14 #include <type_traits> 29 template <
class Loader>
32 std::shared_ptr<Loader> _so_loader;
35 IE_SUPPRESS_DEPRECATED_START
41 explicit SymbolLoader(std::shared_ptr<Loader> loader): _so_loader(loader) {
42 if (_so_loader ==
nullptr) {
53 T* instantiateSymbol(
const std::string& name)
const {
54 IE_SUPPRESS_DEPRECATED_START
55 T* instance =
nullptr;
57 StatusCode sts = bind_function<StatusCode(T*&, ResponseDesc*)>(name)(instance, &desc);
62 IE_SUPPRESS_DEPRECATED_END
72 std::function<T> bind_function(
const std::string& functionName)
const {
73 std::function<T> ptr(reinterpret_cast<T*>(_so_loader->get_symbol(functionName.c_str())));
77 IE_SUPPRESS_DEPRECATED_END
85 class SOCreatorTrait {};
92 template <
class T,
class Loader = SharedObjectLoader>
94 IE_SUPPRESS_DEPRECATED_START
95 template <
class U,
class W>
96 friend class SOPointer;
102 SOPointer() =
default;
108 template <
typename C,
109 typename = enableIfSupportedChar<C>>
110 explicit SOPointer(
const std::basic_string<C> & name)
111 : _so_loader(new Loader(name.c_str())),
112 _pointedObj(details::shared_from_irelease(
113 SymbolLoader<Loader>(_so_loader).template instantiateSymbol<T>(SOCreatorTrait<T>::name))) {}
119 explicit SOPointer(
const char * name)
120 : _so_loader(new Loader(name)),
121 _pointedObj(details::shared_from_irelease(
122 SymbolLoader<Loader>(_so_loader).template instantiateSymbol<T>(SOCreatorTrait<T>::name))) {}
128 explicit SOPointer(T* pointedObj): _so_loader(), _pointedObj(pointedObj) {
129 if (_pointedObj ==
nullptr) {
138 explicit SOPointer(std::shared_ptr<Loader> so_loader)
139 : _so_loader(so_loader),
140 _pointedObj(details::shared_from_irelease(
141 SymbolLoader<Loader>(_so_loader).template instantiateSymbol<T>(SOCreatorTrait<T>::name))) {}
147 template <
class U,
class W>
148 SOPointer(
const SOPointer<U, W>& that)
149 : _so_loader(std::dynamic_pointer_cast<Loader>(that._so_loader)),
150 _pointedObj(std::dynamic_pointer_cast<T>(that._pointedObj)) {
151 if (_pointedObj ==
nullptr) {
160 details::NoReleaseOn<T>* operator->() const noexcept {
161 return reinterpret_cast<details::NoReleaseOn<T>*
>(_pointedObj.get());
168 details::NoReleaseOn<T>* operator*() const noexcept {
169 return this->operator->();
172 explicit operator bool() const noexcept {
173 return (
nullptr != _so_loader) && (
nullptr != _pointedObj);
176 friend bool operator==(std::nullptr_t,
const SOPointer& ptr) noexcept {
179 friend bool operator==(
const SOPointer& ptr, std::nullptr_t) noexcept {
182 friend bool operator!=(std::nullptr_t,
const SOPointer& ptr) noexcept {
183 return static_cast<bool>(ptr);
185 friend bool operator!=(
const SOPointer& ptr, std::nullptr_t) noexcept {
186 return static_cast<bool>(ptr);
189 SOPointer& operator=(
const SOPointer& pointer) noexcept {
190 _pointedObj = pointer._pointedObj;
191 _so_loader = pointer._so_loader;
195 operator std::shared_ptr<Loader>()
const noexcept {
203 std::shared_ptr<Loader> _so_loader;
208 std::shared_ptr<T> _pointedObj;
209 IE_SUPPRESS_DEPRECATED_END
221 inline std::shared_ptr<T>
make_so_pointer(
const file_name_t& name) =
delete;
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:25
Definition: cldnn_config.hpp:16
StatusCode
This enum contains codes for all possible return values of the interface functions.
Definition: ie_common.h:224
A bias layout for opearation.
Definition: ie_common.h:98
std::shared_ptr< T > make_so_pointer(const file_name_t &name)=delete
Creates a special shared_pointer wrapper for the given type from a specific shared module...
Definition: ie_extension.h:285
Utility header file. Provides no release base class.
This is a header file with functions related to filesystem operations.
A header file for definition of abstraction over platform specific shared objects.
A header file for the Inference Engine plugins destruction mechanism.
This is a header file with common inference engine definitions.
A header file for the main Inference Engine exception.