26 template<
class Loader>
29 std::shared_ptr<Loader> _so_loader;
36 explicit SymbolLoader(std::shared_ptr<Loader> loader) : _so_loader(loader) {}
44 T* instantiateSymbol(
const std::string& name)
const {
45 T* instance =
nullptr;
47 StatusCode sts = bind_function<StatusCode(T*&, ResponseDesc*)>(name)(instance, &desc);
60 std::function<T> bind_function(
const std::string &functionName)
const {
61 std::function<T> ptr(reinterpret_cast<T *>(_so_loader->get_symbol(functionName.c_str())));
70 class SOCreatorTrait {};
75 template <
class T,
class Loader = SharedObjectLoader>
77 IE_SUPPRESS_DEPRECATED_START
78 template <
class U,
class W>
friend class SOPointer;
83 SOPointer() =
default;
89 explicit SOPointer(
const file_name_t &name)
90 : _so_loader(new Loader(name.c_str()))
91 , _pointedObj(details::shared_from_irelease(
92 SymbolLoader<Loader>(_so_loader).template instantiateSymbol<T>(SOCreatorTrait<T>::name))) {
99 explicit SOPointer(T * _pointedObj_)
101 , _pointedObj(_pointedObj_) {
102 if (_pointedObj ==
nullptr) {
111 template<
class U,
class W>
112 SOPointer(
const SOPointer<U, W> & that) :
113 _so_loader(std::dynamic_pointer_cast<Loader>(that._so_loader)),
114 _pointedObj(std::dynamic_pointer_cast<T>(that._pointedObj)) {
115 if (_pointedObj ==
nullptr) {
124 details::NoReleaseOn<T>* operator->() const noexcept {
125 return reinterpret_cast<details::NoReleaseOn<T>*
>(_pointedObj.get());
132 details::NoReleaseOn<T>* operator*() const noexcept {
133 return this->operator->();
136 explicit operator bool() const noexcept {
137 return (
nullptr != _so_loader) && (
nullptr != _pointedObj);
140 friend bool operator == (std::nullptr_t,
const SOPointer& ptr) noexcept {
143 friend bool operator == (
const SOPointer& ptr, std::nullptr_t) noexcept {
146 friend bool operator != (std::nullptr_t,
const SOPointer& ptr) noexcept {
147 return static_cast<bool>(ptr);
149 friend bool operator != (
const SOPointer& ptr, std::nullptr_t) noexcept {
150 return static_cast<bool>(ptr);
153 SOPointer& operator=(
const SOPointer & pointer) noexcept {
154 _pointedObj = pointer._pointedObj;
155 _so_loader = pointer._so_loader;
163 std::shared_ptr<Loader> _so_loader;
167 std::shared_ptr<T> _pointedObj;
168 IE_SUPPRESS_DEPRECATED_END
180 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:22
Definition: ie_argmax_layer.hpp:11
A header file for Main Inference Engine API.
StatusCode
This enum contains codes for all possible return values of the interface functions.
Definition: ie_common.h:205
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:194
Utility header file. Provides no release base class.
A header file for definition of abstraction over platform specific shared objects.
This is a header file with common inference engine definitions.
A header file for the main Inference Engine exception.