54 template<class T, typename = typename std::enable_if<!std::is_same<typename std::decay<T>::type,
Parameter>::value>::type >
56 static_assert(!std::is_same<
typename std::decay<T>::type,
Parameter>::value,
"To prevent recursion");
57 ptr =
new RealData<typename std::decay<T>::type>(std::forward<T>(parameter));
79 if (
this == ¶meter) {
83 if (!parameter.
empty())
84 ptr = parameter.ptr->copy();
101 return nullptr == ptr;
111 return empty() ?
false : ptr->is(
typeid(T));
121 return std::move(dyn_cast<T>(ptr));
131 return dyn_cast<T>(ptr);
139 const T&
as() const & {
140 return dyn_cast<T>(ptr);
150 return std::move(dyn_cast<
typename std::remove_cv<T>::type>(ptr));
160 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
168 template<
class T>
operator const T&()
const & {
169 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
177 template<
class T>
operator T&()
const & {
178 return dyn_cast<
typename std::remove_cv<T>::type>(ptr);
187 return *ptr == *(rhs.ptr);
195 return !(*
this == rhs);
199 template<
class T,
class EqualTo>
200 struct CheckOperatorEqual {
201 template<
class U,
class V>
202 static auto test(U*) -> decltype(std::declval<U>() == std::declval<V>()) {
206 template<
typename,
typename>
207 static auto test(...) -> std::false_type {
211 using type =
typename std::is_same<bool, decltype(test<T, EqualTo>(
nullptr))>::type;
214 template<
class T,
class EqualTo = T>
215 struct HasOperatorEqual : CheckOperatorEqual<T, EqualTo>::type {};
218 virtual ~Any() =
default;
219 virtual bool is(
const std::type_info&)
const = 0;
220 virtual Any *copy()
const = 0;
221 virtual bool operator==(
const Any& rhs)
const = 0;
225 struct RealData: Any, std::tuple<T> {
226 using std::tuple<T>::tuple;
228 bool is(
const std::type_info&
id)
const override {
229 return id ==
typeid(T);
231 Any *copy()
const override {
232 return new RealData{
get()};
236 return std::get<0>(*this);
239 const T&
get()
const & {
240 return std::get<0>(*this);
244 typename std::enable_if<!HasOperatorEqual<U>::value,
bool>::type
245 equal(
const Any& left,
const Any& rhs)
const {
250 typename std::enable_if<HasOperatorEqual<U>::value,
bool>::type
251 equal(
const Any& left,
const Any& rhs)
const {
252 return dyn_cast<U>(&left) == dyn_cast<U>(&rhs);
255 bool operator==(
const Any& rhs)
const override {
256 return rhs.is(
typeid(T)) && equal<T>(*
this, rhs);
261 static T &dyn_cast(Any* obj) {
264 return dynamic_cast<RealData<T>&
>(*obj).get();
268 static const T &dyn_cast(
const Any* obj) {
271 return dynamic_cast<const RealData<T> &
>(*obj).get();
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:22
Parameter(T &¶meter)
Constructor creates parameter with object.
Definition: ie_parameter.hpp:55
bool is() const
Definition: ie_parameter.hpp:110
Definition: ie_argmax_layer.hpp:11
Parameter(Parameter &¶meter) noexcept
Move constructor.
Definition: ie_parameter.hpp:38
T & as() &
Definition: ie_parameter.hpp:130
Parameter(const Parameter ¶meter)
Copy constructor.
Definition: ie_parameter.hpp:44
bool operator==(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:186
Parameter()=default
Default constructor.
void clear()
Definition: ie_parameter.hpp:91
bool empty() const noexcept
Definition: ie_parameter.hpp:100
Parameter & operator=(const Parameter ¶meter)
Definition: ie_parameter.hpp:78
const T & as() const &
Definition: ie_parameter.hpp:139
Parameter(const char *str)
Constructor creates string parameter from char *.
Definition: ie_parameter.hpp:64
T && as() &&
Definition: ie_parameter.hpp:120
bool operator!=(const Parameter &rhs) const
The comparison operator for the Parameter.
Definition: ie_parameter.hpp:194
This class represents an object to work with different parameters.
Definition: ie_parameter.hpp:27
virtual ~Parameter()
Destructor.
Definition: ie_parameter.hpp:69
A header file for the main Inference Engine exception.