37 class INFERENCE_ENGINE_API_CLASS(Parameter) {
59 Parameter(
const std::shared_ptr<ngraph::Variant>& var);
86 typename =
typename std::enable_if<!std::is_same<typename std::decay<T>::type,
Parameter>::value>::type>
88 static_assert(!std::is_same<
typename std::decay<T>::type,
Parameter>::value,
"To prevent recursion");
89 ptr =
new RealData<typename std::decay<T>::type>(std::forward<T>(
parameter));
131 return nullptr == ptr;
141 return empty() ? false : ptr->is(
typeid(T));
149 template <
typename T>
151 return std::move(dyn_cast<T>(ptr));
161 return dyn_cast<T>(ptr);
169 const T&
as() const& {
170 return dyn_cast<T>(ptr);
180 return std::move(dyn_cast<
typename std::remove_cv<T>::type>(ptr));
190 return dyn_cast<typename std::remove_cv<T>::type>(ptr);
199 operator const T&()
const& {
200 return dyn_cast<typename std::remove_cv<T>::type>(ptr);
215 operator std::shared_ptr<ngraph::Variant>()
const {
225 operator T&()
const& {
226 return dyn_cast<typename std::remove_cv<T>::type>(ptr);
236 return *ptr == *(rhs.ptr);
245 return !(*
this == rhs);
249 template <
class T,
class EqualTo>
250 struct CheckOperatorEqual {
251 template <
class U,
class V>
252 static auto test(U*) -> decltype(std::declval<U>() == std::declval<V>()) {
256 template <
typename,
typename>
257 static auto test(...) -> std::false_type {
261 using type =
typename std::is_same<bool, decltype(test<T, EqualTo>(
nullptr))>::type;
264 template <
class T,
class EqualTo = T>
265 struct HasOperatorEqual : CheckOperatorEqual<T, EqualTo>::type {};
268 #if defined(__clang__) && !defined(__SYCL_COMPILER_VERSION)
271 virtual ~Any() =
default;
273 virtual bool is(
const std::type_info&)
const = 0;
274 virtual Any* copy()
const = 0;
275 virtual bool operator==(
const Any& rhs)
const = 0;
279 struct RealData : Any, std::tuple<T> {
280 using std::tuple<T>::tuple;
282 bool is(
const std::type_info&
id)
const override {
283 return id ==
typeid(T);
285 Any* copy()
const override {
286 return new RealData {get()};
290 return std::get<0>(*
static_cast<std::tuple<T>*
>(
this));
293 const T& get() const& {
294 return std::get<0>(*
static_cast<const std::tuple<T>*
>(
this));
298 typename std::enable_if<!HasOperatorEqual<U>::value,
bool>::type
299 equal(
const Any& left,
const Any& rhs)
const {
304 typename std::enable_if<HasOperatorEqual<U>::value,
bool>::type
305 equal(
const Any& left,
const Any& rhs)
const {
306 return dyn_cast<U>(&left) == dyn_cast<U>(&rhs);
309 bool operator==(
const Any& rhs)
const override {
310 return rhs.is(
typeid(T)) && equal<T>(*
this, rhs);
314 template <
typename T>
315 static T& dyn_cast(Any* obj) {
317 return dynamic_cast<RealData<T>&
>(*obj).get();
320 template <
typename T>
321 static const T& dyn_cast(
const Any* obj) {
323 return dynamic_cast<const RealData<T>&
>(*obj).get();
329 #if defined(__clang__) && !defined(__SYCL_COMPILER_VERSION)
330 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<InferenceEngine::Blob::Ptr>);
331 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<int>);
332 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<bool>);
333 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<float>);
334 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<uint32_t>);
335 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::string>);
336 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<unsigned long>);
337 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<int>>);
338 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<std::string>>);
339 extern template struct INFERENCE_ENGINE_API_CLASS(InferenceEngine::Parameter::RealData<std::vector<unsigned long>>);
340 extern template struct INFERENCE_ENGINE_API_CLASS(
341 InferenceEngine::Parameter::RealData<std::tuple<unsigned int, unsigned int>>);
342 extern template struct INFERENCE_ENGINE_API_CLASS(
343 InferenceEngine::Parameter::RealData<std::tuple<unsigned int, unsigned int, unsigned int>>);
This class represents an object to work with different parameters.
Definition: ie_parameter.hpp:37
virtual ~Parameter()
Destructor.
Parameter()=default
Default constructor.
Parameter(const Parameter ¶meter)
Copy constructor.
Definition: ie_parameter.hpp:74
T & as() &
Definition: ie_parameter.hpp:160
Parameter & operator=(const Parameter ¶meter)
Definition: ie_parameter.hpp:109
bool is() const
Definition: ie_parameter.hpp:140
void clear()
Definition: ie_parameter.hpp:121
std::shared_ptr< ngraph::Variant > asVariant() const
Converts parameter to shared pointer on ngraph::Variant.
const T & as() const &
Definition: ie_parameter.hpp:169
Parameter(std::shared_ptr< ngraph::Variant > &var)
Creates parameter from variant. This method creates empty parameter if variant doesn't contain Parame...
Parameter(T &¶meter)
Constructor creates parameter with object.
Definition: ie_parameter.hpp:87
Parameter(Parameter &¶meter) noexcept
Move constructor.
Definition: ie_parameter.hpp:49
bool operator!=(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:244
Parameter(const std::shared_ptr< ngraph::Variant > &var)
Creates parameter from variant. This method creates empty parameter if variant doesn't contain Parame...
bool operator==(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:235
bool empty() const noexcept
Definition: ie_parameter.hpp:130
T && as() &&
Definition: ie_parameter.hpp:150
Parameter(const char *str)
Constructor creates string parameter from char *.
Definition: ie_parameter.hpp:97
A header file for Blob and generic TBlob<>
A header file for the main Inference Engine exception.
#define THROW_IE_EXCEPTION
A macro used to throw general exception with a description.
Definition: ie_exception.hpp:25
Inference Engine C++ API.
Definition: cldnn_config.hpp:15
Parameter parameter(TensorShape shape, NumericType dtype=np.float32, Optional[str] name=None)
Node equal(NodeInput left_node, NodeInput right_node, str auto_broadcast="NUMPY", Optional[str] name=None)