38 class INFERENCE_ENGINE_API_CLASS(Parameter) {
51 std::swap(ptr, parameter.ptr);
60 Parameter(
const std::shared_ptr<ngraph::Variant>& var);
68 Parameter(std::shared_ptr<ngraph::Variant>& var);
87 typename =
typename std::enable_if<!std::is_same<typename std::decay<T>::type,
Parameter>::value>::type>
89 static_assert(!std::is_same<
typename std::decay<T>::type,
Parameter>::value,
"To prevent recursion");
90 ptr =
new RealData<typename std::decay<T>::type>(std::forward<T>(parameter));
111 if (
this == ¶meter) {
115 if (!parameter.
empty()) ptr = parameter.ptr->copy();
132 return nullptr == ptr;
142 return empty() ?
false : ptr->is(
typeid(T));
150 template <
typename T>
152 return std::move(dyn_cast<T>(ptr));
162 return dyn_cast<T>(ptr);
170 const T&
as() const& {
171 return dyn_cast<T>(ptr);
181 return std::move(dyn_cast<
typename std::remove_cv<T>::type>(ptr));
191 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
200 operator const T&()
const& {
201 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
209 std::shared_ptr<ngraph::Variant> asVariant()
const;
216 operator std::shared_ptr<ngraph::Variant>()
const {
226 operator T&()
const& {
227 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
237 return *ptr == *(rhs.ptr);
246 return !(*
this == rhs);
250 template <
class T,
class EqualTo>
251 struct CheckOperatorEqual {
252 template <
class U,
class V>
253 static auto test(U*) -> decltype(std::declval<U>() == std::declval<V>()) {
257 template <
typename,
typename>
258 static auto test(...) -> std::false_type {
262 using type =
typename std::is_same<bool, decltype(test<T, EqualTo>(
nullptr))>::type;
265 template <
class T,
class EqualTo = T>
266 struct HasOperatorEqual : CheckOperatorEqual<T, EqualTo>::type {};
272 virtual ~Any() =
default;
274 virtual bool is(
const std::type_info&)
const = 0;
275 virtual Any* copy()
const = 0;
276 virtual bool operator==(
const Any& rhs)
const = 0;
280 struct RealData : Any, std::tuple<T> {
281 using std::tuple<T>::tuple;
283 bool is(
const std::type_info&
id)
const override {
284 return id ==
typeid(T);
286 Any* copy()
const override {
287 return new RealData {
get()};
291 return std::get<0>(*
static_cast<std::tuple<T>*
>(
this));
294 const T&
get()
const& {
295 return std::get<0>(*
static_cast<const std::tuple<T>*
>(
this));
299 typename std::enable_if<!HasOperatorEqual<U>::value,
bool>::type
300 equal(
const Any& left,
const Any& rhs)
const {
305 typename std::enable_if<HasOperatorEqual<U>::value,
bool>::type
306 equal(
const Any& left,
const Any& rhs)
const {
307 return dyn_cast<U>(&left) == dyn_cast<U>(&rhs);
310 bool operator==(
const Any& rhs)
const override {
311 return rhs.is(
typeid(T)) && equal<T>(*
this, rhs);
315 template <
typename T>
316 static T& dyn_cast(Any* obj) {
318 return dynamic_cast<RealData<T>&
>(*obj).get();
321 template <
typename T>
322 static const T& dyn_cast(
const Any* obj) {
324 return dynamic_cast<const RealData<T>&
>(*obj).get();
331 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<InferenceEngine::Blob::Ptr>);
332 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<int>);
333 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<bool>);
334 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<float>);
335 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<uint32_t>);
336 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::string>);
337 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<unsigned long>);
338 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<int>>);
339 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<std::string>>);
340 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<unsigned long>>);
341 extern template struct INFERENCE_ENGINE_API_CLASS(
342 InferenceEngine::Parameter::RealData<std::tuple<unsigned int, unsigned int>>);
343 extern template struct INFERENCE_ENGINE_API_CLASS(
344 InferenceEngine::Parameter::RealData<std::tuple<unsigned int, unsigned int, unsigned int>>);
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:25
Parameter(T &¶meter)
Constructor creates parameter with object.
Definition: ie_parameter.hpp:88
bool is() const
Definition: ie_parameter.hpp:141
std::string type
Layer type.
Definition: ie_layers.h:47
Definition: cldnn_config.hpp:16
Parameter(Parameter &¶meter) noexcept
Move constructor.
Definition: ie_parameter.hpp:50
T & as() &
Definition: ie_parameter.hpp:161
Parameter(const Parameter ¶meter)
Copy constructor.
Definition: ie_parameter.hpp:75
A header file for Blob and generic TBlob<>
bool operator==(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:236
void clear()
Definition: ie_parameter.hpp:122
bool empty() const noexcept
Definition: ie_parameter.hpp:131
Definition: ie_cnn_network.h:27
Parameter & operator=(const Parameter ¶meter)
Definition: ie_parameter.hpp:110
const T & as() const &
Definition: ie_parameter.hpp:170
Parameter(const char *str)
Constructor creates string parameter from char *.
Definition: ie_parameter.hpp:98
T && as() &&
Definition: ie_parameter.hpp:151
The macro defines a symbol import/export mechanism essential for Microsoft Windows(R) OS...
bool operator!=(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:245
This class represents an object to work with different parameters.
Definition: ie_parameter.hpp:38
A header file for the main Inference Engine exception.