44 virtual void clone(
void*
const* src,
void** dest) = 0;
45 virtual void move(
void*
const* src,
void** dest) = 0;
47 virtual const void*
get_value(
void*
const * src) = 0;
49 virtual const std::type_info&
type() = 0;
50 virtual void print(std::ostream& out,
void*
const* src) = 0;
56 virtual ::size_t
get_size() {
return sizeof(T); }
57 virtual const std::type_info&
type() {
return typeid(T); }
67 new (dest) T(*
reinterpret_cast<T const*
>(src));
69 virtual void clone(
void*
const* src,
void** dest) { *dest = *src; }
70 virtual void move(
void*
const* src,
void** dest) { *dest = *src; }
71 virtual void*
get_value(
void** src) {
return reinterpret_cast<void*
>(src); }
72 virtual const void*
get_value(
void*
const * src) {
return reinterpret_cast<const void*
>(src); }
73 virtual void print(std::ostream& out,
void*
const* src) { out << *reinterpret_cast<T const*>(src); }
82 delete (*
reinterpret_cast<T**
>(x)); *x =
NULL;
87 *dest =
new T(*
reinterpret_cast<T const*
>(src));
89 virtual void clone(
void*
const* src,
void** dest)
91 *dest =
new T(**
reinterpret_cast<T* const*
>(src));
93 virtual void move(
void*
const* src,
void** dest)
95 (*
reinterpret_cast<T**
>(dest))->~T();
96 **
reinterpret_cast<T**
>(dest) = **
reinterpret_cast<T* const*
>(src);
98 virtual void*
get_value(
void** src) {
return *src; }
99 virtual const void*
get_value(
void*
const * src) {
return *src; }
100 virtual void print(std::ostream& out,
void*
const* src) { out << *reinterpret_cast<T const*>(*src); }
126 #define SMALL_POLICY(TYPE) \
128 struct choose_policy<TYPE> { typedef small_any_policy<TYPE> type; \
163 template <
typename T>
200 policy->
clone(&x.object, &
object);
205 template <
typename T>
209 policy = anyimpl::get_policy<T>();
241 T* r =
reinterpret_cast<T*
>(policy->
get_value(&
object));
250 const T* r =
reinterpret_cast<const T*
>(policy->
get_value(&
object));
264 policy = anyimpl::get_policy<anyimpl::empty_any>();
270 return policy->
type() == x.policy->
type();
277 return policy->
type() ==
typeid(T);
280 const std::type_info&
type()
const
282 return policy->
type();
285 friend std::ostream&
operator <<(std::ostream& out,
const any& any_val);
290 any_val.policy->
print(out,&any_val.object);
#define SMALL_POLICY(TYPE)
Specializations for small types.
bool has_type()
Returns if the type is compatible with the policy.
bool empty() const
Returns true if the any contains no value.
bool compatible(const any &x) const
Returns true if the two types are the same.
any(const any &x)
Copy constructor.
friend std::ostream & operator<<(std::ostream &out, const any &any_val)
any(const T &x)
Initializing constructor.
const T & cast() const
Cast operator. You can only cast to the original type.
any & operator=(const char *x)
any(const char *x)
Special initializing constructor for string literals.
any_t & operator=(const T &x)
Assignment operator.
void reset()
Frees any allocated memory, and sets the value to NULL.
any_t & assign(const T &x)
Assignment function.
T & cast()
Cast operator. You can only cast to the original type.
any & swap(any &x)
Utility functions.
const std::type_info & type() const
any & assign(const any &x)
Assignment function from another any.
base_any_policy * get_policy()
This function will return a different policy for each type.
std::ostream & operator<<(std::ostream &out, const empty_any &)
std::ostream & operator<<(std::ostream &stream, const cuda::kd_tree_builder_detail::SplitInfo &s)
void swap(cloudViewer::core::SmallVectorImpl< T > &LHS, cloudViewer::core::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
virtual void static_delete(void **x)=0
virtual void * get_value(void **src)=0
virtual void move(void *const *src, void **dest)=0
virtual const void * get_value(void *const *src)=0
virtual void print(std::ostream &out, void *const *src)=0
virtual void copy_from_value(void const *src, void **dest)=0
virtual void clone(void *const *src, void **dest)=0
virtual const std::type_info & type()=0
virtual ::size_t get_size()=0
virtual void static_delete(void **x)
virtual void * get_value(void **src)
virtual const void * get_value(void *const *src)
virtual void move(void *const *src, void **dest)
virtual void copy_from_value(void const *src, void **dest)
virtual void clone(void *const *src, void **dest)
virtual void print(std::ostream &out, void *const *src)
small_any_policy< T * > type
virtual void static_delete(void **)
virtual const void * get_value(void *const *src)
virtual void clone(void *const *src, void **dest)
virtual void move(void *const *src, void **dest)
virtual void print(std::ostream &out, void *const *src)
virtual void * get_value(void **src)
virtual void copy_from_value(void const *src, void **dest)
virtual const std::type_info & type()
virtual ::size_t get_size()