Plasma Engine  2.0
Loading...
Searching...
No Matches
AbstractProperty.h
1#pragma once
2
4
5#include <Foundation/Basics.h>
6
7#include <Foundation/Containers/HashSet.h>
8#include <Foundation/Containers/HashTable.h>
9#include <Foundation/Containers/Map.h>
10#include <Foundation/Containers/Set.h>
11#include <Foundation/Containers/SmallArray.h>
12#include <Foundation/Containers/StaticArray.h>
13#include <Foundation/Reflection/Implementation/RTTI.h>
14#include <Foundation/Types/Bitflags.h>
15#include <Foundation/Types/Enum.h>
16
17class plRTTI;
19
21template <typename T>
23{
24 static constexpr bool value = false;
25};
26
27template <typename T>
29{
30 static constexpr bool value = true;
31};
32
34template <typename T>
36{
37 static constexpr bool value = std::is_enum<T>::value;
38};
39
40template <typename T>
41struct plIsEnum<plEnum<T>>
42{
43 static constexpr bool value = true;
44};
45
48{
49 using StorageType = plUInt16;
50
51 enum Enum : plUInt16
52 {
53 StandardType = PL_BIT(0),
54 IsEnum = PL_BIT(1),
55 Bitflags = PL_BIT(2),
56 Class = PL_BIT(3),
57
58 Const = PL_BIT(4),
59 Reference = PL_BIT(5),
60 Pointer = PL_BIT(6),
61
62 PointerOwner = PL_BIT(7),
63 ReadOnly = PL_BIT(8),
64 Hidden = PL_BIT(9),
65 Phantom = PL_BIT(10),
67
68 VarOut = PL_BIT(11),
69 VarInOut = PL_BIT(12),
70
71 Default = 0,
72 Void = 0
73 };
74
75 struct Bits
76 {
77 StorageType StandardType : 1;
78 StorageType IsEnum : 1;
79 StorageType Bitflags : 1;
80 StorageType Class : 1;
81
82 StorageType Const : 1;
83 StorageType Reference : 1;
84 StorageType Pointer : 1;
85
86 StorageType PointerOwner : 1;
87 StorageType ReadOnly : 1;
88 StorageType Hidden : 1;
89 StorageType Phantom : 1;
90 };
91
92 template <class Type>
93 static plBitflags<plPropertyFlags> GetParameterFlags()
94 {
95 using CleanType = typename plTypeTraits<Type>::NonConstReferencePointerType;
98 if constexpr (std::is_same<CleanType, plVariant>::value ||
99 std::is_same<Type, const char*>::value || // We treat const char* as a basic type and not a pointer.
100 (type >= plVariantType::FirstStandardType && type <= plVariantType::LastStandardType))
102 else if constexpr (plIsEnum<CleanType>::value)
104 else if constexpr (plIsBitflags<CleanType>::value)
106 else
108
109 if constexpr (std::is_const<typename plTypeTraits<Type>::NonReferencePointerType>::value)
111
112 if constexpr (std::is_pointer<Type>::value && !std::is_same<Type, const char*>::value)
114
115 if constexpr (std::is_reference<Type>::value)
117
118 return flags;
119 }
120};
121
122template <>
123inline plBitflags<plPropertyFlags> plPropertyFlags::GetParameterFlags<void>()
124{
126}
127
128PL_DECLARE_FLAGS_OPERATORS(plPropertyFlags)
129
130
132{
133 using StorageType = plUInt8;
134
135 enum Enum
136 {
143 Default = Member
144 };
145};
146
149class PL_FOUNDATION_DLL plAbstractProperty
150{
151public:
153 plAbstractProperty(const char* szPropertyName) { m_szPropertyName = szPropertyName; }
154
155 virtual ~plAbstractProperty() = default;
156
158 const char* GetPropertyName() const { return m_szPropertyName; }
159
162 virtual const plRTTI* GetSpecificType() const = 0;
163
165 virtual plPropertyCategory::Enum GetCategory() const = 0; // [tested]
166
168 const plBitflags<plPropertyFlags>& GetFlags() const { return m_Flags; };
169
172 {
173 m_Flags.Add(flags);
174 return this;
175 };
176
180 plPropertyAttribute* pAttrib4 = nullptr, plPropertyAttribute* pAttrib5 = nullptr, plPropertyAttribute* pAttrib6 = nullptr)
181 {
182 PL_ASSERT_DEV(pAttrib1 != nullptr, "invalid attribute");
183
184 m_Attributes.PushBack(pAttrib1);
185 if (pAttrib2)
186 m_Attributes.PushBack(pAttrib2);
187 if (pAttrib3)
188 m_Attributes.PushBack(pAttrib3);
189 if (pAttrib4)
190 m_Attributes.PushBack(pAttrib4);
191 if (pAttrib5)
192 m_Attributes.PushBack(pAttrib5);
193 if (pAttrib6)
194 m_Attributes.PushBack(pAttrib6);
195 return this;
196 };
197
200
202 template <typename Type>
203 const Type* GetAttributeByType() const;
204
205protected:
207 const char* m_szPropertyName;
209};
210
212class PL_FOUNDATION_DLL plAbstractConstantProperty : public plAbstractProperty
213{
214public:
216 plAbstractConstantProperty(const char* szPropertyName)
217 : plAbstractProperty(szPropertyName)
218 {
219 }
220
222 virtual plPropertyCategory::Enum GetCategory() const override { return plPropertyCategory::Constant; } // [tested]
223
225 virtual void* GetPropertyPointer() const = 0;
226
228 virtual plVariant GetConstant() const = 0;
229};
230
236class PL_FOUNDATION_DLL plAbstractMemberProperty : public plAbstractProperty
237{
238public:
240 plAbstractMemberProperty(const char* szPropertyName)
241 : plAbstractProperty(szPropertyName)
242 {
243 }
244
247
259 virtual void* GetPropertyPointer(const void* pInstance) const = 0;
260
263 virtual void GetValuePtr(const void* pInstance, void* out_pObject) const = 0;
264
267 virtual void SetValuePtr(void* pInstance, const void* pObject) const = 0;
268};
269
270
272class PL_FOUNDATION_DLL plAbstractArrayProperty : public plAbstractProperty
273{
274public:
276 plAbstractArrayProperty(const char* szPropertyName)
277 : plAbstractProperty(szPropertyName)
278 {
279 }
280
283
285 virtual plUInt32 GetCount(const void* pInstance) const = 0;
286
288 virtual void GetValue(const void* pInstance, plUInt32 uiIndex, void* pObject) const = 0;
289
291 virtual void SetValue(void* pInstance, plUInt32 uiIndex, const void* pObject) const = 0;
292
294 virtual void Insert(void* pInstance, plUInt32 uiIndex, const void* pObject) const = 0;
295
297 virtual void Remove(void* pInstance, plUInt32 uiIndex) const = 0;
298
300 virtual void Clear(void* pInstance) const = 0;
301
303 virtual void SetCount(void* pInstance, plUInt32 uiCount) const = 0;
304
305 virtual void* GetValuePointer(void* pInstance, plUInt32 uiIndex) const { return nullptr; }
306};
307
308
312class PL_FOUNDATION_DLL plAbstractSetProperty : public plAbstractProperty
313{
314public:
316 plAbstractSetProperty(const char* szPropertyName)
317 : plAbstractProperty(szPropertyName)
318 {
319 }
320
323
325 virtual bool IsEmpty(const void* pInstance) const = 0;
326
328 virtual void Clear(void* pInstance) const = 0;
329
331 virtual void Insert(void* pInstance, const void* pObject) const = 0;
332
334 virtual void Remove(void* pInstance, const void* pObject) const = 0;
335
337 virtual bool Contains(const void* pInstance, const void* pObject) const = 0;
338
340 virtual void GetValues(const void* pInstance, plDynamicArray<plVariant>& out_keys) const = 0;
341};
342
343
347class PL_FOUNDATION_DLL plAbstractMapProperty : public plAbstractProperty
348{
349public:
351 plAbstractMapProperty(const char* szPropertyName)
352 : plAbstractProperty(szPropertyName)
353 {
354 }
355
358
360 virtual bool IsEmpty(const void* pInstance) const = 0;
361
363 virtual void Clear(void* pInstance) const = 0;
364
366 virtual void Insert(void* pInstance, const char* szKey, const void* pObject) const = 0;
367
369 virtual void Remove(void* pInstance, const char* szKey) const = 0;
370
372 virtual bool Contains(const void* pInstance, const char* szKey) const = 0;
373
375 virtual bool GetValue(const void* pInstance, const char* szKey, void* pObject) const = 0;
376
378 virtual void GetKeys(const void* pInstance, plHybridArray<plString, 16>& out_keys) const = 0;
379};
380
382template <int _Index, class... Args>
384
385template <class Head, class... Tail>
386struct getArgument<0, Head, Tail...>
387{
388 using Type = Head;
389};
390
391template <int _Index, class Head, class... Tail>
392struct getArgument<_Index, Head, Tail...>
393{
394 using Type = typename getArgument<_Index - 1, Tail...>::Type;
395};
396
398template <int I, typename FUNC>
402
403template <int I, typename R, typename... P>
405{
406 enum Constants
407 {
408 Arguments = sizeof...(P),
409 };
410 static_assert(I < Arguments, "I needs to be smaller than the number of function parameters.");
411 using ParameterType = typename getArgument<I, P...>::Type;
412 using ReturnType = R;
413};
414
415template <int I, class Class, typename R, typename... P>
416struct plFunctionParameterTypeResolver<I, R (Class::*)(P...)>
417{
418 enum Constants
419 {
420 Arguments = sizeof...(P),
421 };
422 static_assert(I < Arguments, "I needs to be smaller than the number of function parameters.");
423 using ParameterType = typename getArgument<I, P...>::Type;
424 using ReturnType = R;
425};
426
427template <int I, class Class, typename R, typename... P>
428struct plFunctionParameterTypeResolver<I, R (Class::*)(P...) const>
429{
430 enum Constants
431 {
432 Arguments = sizeof...(P),
433 };
434 static_assert(I < Arguments, "I needs to be smaller than the number of function parameters.");
435 using ParameterType = typename getArgument<I, P...>::Type;
436 using ReturnType = R;
437};
438
440template <typename FUNC>
444
445template <class Class, typename R, typename P>
447{
448 using ParameterType = P;
449 using ReturnType = R;
450};
451
453template <typename CONTAINER>
457
458template <typename T>
460{
461 using Type = typename plTypeTraits<T>::NonConstReferenceType;
462};
463
464template <typename T>
469
470template <typename T, plUInt32 Size>
472{
473 using Type = typename plTypeTraits<T>::NonConstReferenceType;
474};
475
476template <typename T, plUInt32 Size>
478{
479 using Type = typename plTypeTraits<T>::NonConstReferenceType;
480};
481
482template <typename T, plUInt16 Size>
484{
485 using Type = typename plTypeTraits<T>::NonConstReferenceType;
486};
487
488template <typename T>
490{
491 using Type = typename plTypeTraits<T>::NonConstReferenceType;
492};
493
494template <typename T>
496{
497 using Type = typename plTypeTraits<T>::NonConstReferenceType;
498};
499
500template <typename T>
502{
503 using Type = typename plTypeTraits<T>::NonConstReferenceType;
504};
505
506template <typename K, typename T>
508{
509 using Type = typename plTypeTraits<T>::NonConstReferenceType;
510};
511
512template <typename K, typename T>
514{
515 using Type = typename plTypeTraits<T>::NonConstReferenceType;
516};
517
518
521{
522 using StorageType = plUInt8;
523
524 enum Enum
525 {
529 Default = Member
530 };
531};
532
534class PL_FOUNDATION_DLL plAbstractFunctionProperty : public plAbstractProperty
535{
536public:
538 plAbstractFunctionProperty(const char* szPropertyName)
539 : plAbstractProperty(szPropertyName)
540 {
541 }
542
547 virtual const plRTTI* GetReturnType() const = 0;
551 virtual plUInt32 GetArgumentCount() const = 0;
553 virtual const plRTTI* GetArgumentType(plUInt32 uiParamIndex) const = 0;
555 virtual plBitflags<plPropertyFlags> GetArgumentFlags(plUInt32 uiParamIndex) const = 0;
556
568 virtual void Execute(void* pInstance, plArrayPtr<plVariant> arguments, plVariant& out_returnValue) const = 0;
569
570 virtual const plRTTI* GetSpecificType() const override { return GetReturnType(); }
571
577
581 plPropertyAttribute* pAttrib4 = nullptr, plPropertyAttribute* pAttrib5 = nullptr, plPropertyAttribute* pAttrib6 = nullptr)
582 {
583 return static_cast<plAbstractFunctionProperty*>(plAbstractProperty::AddAttributes(pAttrib1, pAttrib2, pAttrib3, pAttrib4, pAttrib5, pAttrib6));
584 }
585};
The base class for a property that represents an array of values.
Definition AbstractProperty.h:273
virtual void Insert(void *pInstance, plUInt32 uiIndex, const void *pObject) const =0
Inserts the target of pObject into the array at index uiIndex.
virtual void Clear(void *pInstance) const =0
Clears the array.
plAbstractArrayProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:276
virtual void SetValue(void *pInstance, plUInt32 uiIndex, const void *pObject) const =0
Writes the target of pObject to the element at index uiIndex.
virtual plUInt32 GetCount(const void *pInstance) const =0
Returns number of elements.
virtual void Remove(void *pInstance, plUInt32 uiIndex) const =0
Removes the element in the array at index uiIndex.
virtual void GetValue(const void *pInstance, plUInt32 uiIndex, void *pObject) const =0
Writes element at index uiIndex to the target of pObject.
virtual plPropertyCategory::Enum GetCategory() const override
Returns plPropertyCategory::Array.
Definition AbstractProperty.h:282
virtual void SetCount(void *pInstance, plUInt32 uiCount) const =0
Resizes the array to uiCount.
This is the base class for all constant properties that are stored inside the RTTI data.
Definition AbstractProperty.h:213
virtual void * GetPropertyPointer() const =0
Returns a pointer to the constant data or nullptr. See plAbstractMemberProperty::GetPropertyPointer f...
virtual plVariant GetConstant() const =0
Returns the constant value as an plVariant.
virtual plPropertyCategory::Enum GetCategory() const override
Returns plPropertyCategory::Constant.
Definition AbstractProperty.h:222
plAbstractConstantProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:216
The base class for a property that represents a function.
Definition AbstractProperty.h:535
virtual plFunctionType::Enum GetFunctionType() const =0
Returns the type of function, see plFunctionPropertyType::Enum.
plAbstractFunctionProperty * AddFlags(plBitflags< plPropertyFlags > flags)
Adds flags to the property. Returns itself to allow to be called during initialization.
Definition AbstractProperty.h:573
plAbstractFunctionProperty * AddAttributes(plPropertyAttribute *pAttrib1, plPropertyAttribute *pAttrib2=nullptr, plPropertyAttribute *pAttrib3=nullptr, plPropertyAttribute *pAttrib4=nullptr, plPropertyAttribute *pAttrib5=nullptr, plPropertyAttribute *pAttrib6=nullptr)
Adds attributes to the property. Returns itself to allow to be called during initialization....
Definition AbstractProperty.h:580
plAbstractFunctionProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:538
virtual plBitflags< plPropertyFlags > GetArgumentFlags(plUInt32 uiParamIndex) const =0
Returns the property flags of the given argument.
virtual plPropertyCategory::Enum GetCategory() const override
Returns the category of this property. Cast this property to the next higher type for more informatio...
Definition AbstractProperty.h:543
virtual const plRTTI * GetArgumentType(plUInt32 uiParamIndex) const =0
Returns the type of the given argument.
virtual plUInt32 GetArgumentCount() const =0
Returns the number of arguments.
virtual plBitflags< plPropertyFlags > GetReturnFlags() const =0
Returns property flags of the return value.
virtual const plRTTI * GetReturnType() const =0
Returns the type of the return value.
virtual const plRTTI * GetSpecificType() const override
Returns the type information of the constant property. Use this to cast this property to a specific v...
Definition AbstractProperty.h:570
virtual void Execute(void *pInstance, plArrayPtr< plVariant > arguments, plVariant &out_returnValue) const =0
Calls the function. Provide the instance on which the function is supposed to be called.
The base class for a property that represents a set of values.
Definition AbstractProperty.h:348
virtual void Insert(void *pInstance, const char *szKey, const void *pObject) const =0
Inserts the target of pObject into the set.
plAbstractMapProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:351
virtual bool IsEmpty(const void *pInstance) const =0
Returns whether the set is empty.
virtual void GetKeys(const void *pInstance, plHybridArray< plString, 16 > &out_keys) const =0
Writes the content of the set to out_keys.
virtual void Remove(void *pInstance, const char *szKey) const =0
Removes the target of pObject from the set.
virtual bool Contains(const void *pInstance, const char *szKey) const =0
Returns whether the target of pObject is in the set.
virtual bool GetValue(const void *pInstance, const char *szKey, void *pObject) const =0
Writes element at index uiIndex to the target of pObject.
virtual plPropertyCategory::Enum GetCategory() const override
Returns plPropertyCategory::Map.
Definition AbstractProperty.h:357
virtual void Clear(void *pInstance) const =0
Clears the set.
This is the base class for all properties that are members of a class. It provides more information a...
Definition AbstractProperty.h:237
virtual void * GetPropertyPointer(const void *pInstance) const =0
Returns a pointer to the property data or nullptr. If a valid pointer is returned,...
virtual plPropertyCategory::Enum GetCategory() const override
Returns plPropertyCategory::Member.
Definition AbstractProperty.h:246
virtual void GetValuePtr(const void *pInstance, void *out_pObject) const =0
Writes the value of this property in pInstance to pObject. pObject needs to point to an instance of t...
virtual void SetValuePtr(void *pInstance, const void *pObject) const =0
Sets the value of pObject to the property in pInstance. pObject needs to point to an instance of this...
plAbstractMemberProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:240
This is the base interface for all properties in the reflection system. It provides enough informatio...
Definition AbstractProperty.h:150
plAbstractProperty * AddFlags(plBitflags< plPropertyFlags > flags)
Adds flags to the property. Returns itself to allow to be called during initialization.
Definition AbstractProperty.h:171
virtual plPropertyCategory::Enum GetCategory() const =0
Returns the category of this property. Cast this property to the next higher type for more informatio...
plAbstractProperty * AddAttributes(plPropertyAttribute *pAttrib1, plPropertyAttribute *pAttrib2=nullptr, plPropertyAttribute *pAttrib3=nullptr, plPropertyAttribute *pAttrib4=nullptr, plPropertyAttribute *pAttrib5=nullptr, plPropertyAttribute *pAttrib6=nullptr)
Adds attributes to the property. Returns itself to allow to be called during initialization....
Definition AbstractProperty.h:179
plAbstractProperty(const char *szPropertyName)
The constructor must get the name of the property. The string must be a compile-time constant.
Definition AbstractProperty.h:153
const plBitflags< plPropertyFlags > & GetFlags() const
Returns the flags of the property.
Definition AbstractProperty.h:168
plArrayPtr< const plPropertyAttribute *const > GetAttributes() const
Returns the array of property attributes.
Definition AbstractProperty.h:199
const char * GetPropertyName() const
Returns the name of the property.
Definition AbstractProperty.h:158
virtual const plRTTI * GetSpecificType() const =0
Returns the type information of the constant property. Use this to cast this property to a specific v...
The base class for a property that represents a set of values.
Definition AbstractProperty.h:313
virtual plPropertyCategory::Enum GetCategory() const override
Returns plPropertyCategory::Set.
Definition AbstractProperty.h:322
virtual bool IsEmpty(const void *pInstance) const =0
Returns whether the set is empty.
virtual void Remove(void *pInstance, const void *pObject) const =0
Removes the target of pObject from the set.
virtual void GetValues(const void *pInstance, plDynamicArray< plVariant > &out_keys) const =0
Writes the content of the set to out_keys.
virtual void Clear(void *pInstance) const =0
Clears the set.
virtual void Insert(void *pInstance, const void *pObject) const =0
Inserts the target of pObject into the set.
plAbstractSetProperty(const char *szPropertyName)
Passes the property name through to plAbstractProperty.
Definition AbstractProperty.h:316
virtual bool Contains(const void *pInstance, const void *pObject) const =0
Returns whether the target of pObject is in the set.
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition Deque.h:270
Definition DynamicArray.h:81
Definition HashSet.h:191
Definition HashTable.h:333
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Definition Map.h:408
Base class of all attributes can be used to decorate a RTTI property.
Definition PropertyAttributes.h:11
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
Definition Set.h:238
Definition SmallArray.h:219
Wraps a C-style array, which has a fixed size at compile-time, with a more convenient interface.
Definition StaticArray.h:13
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Use getArgument<N, Args...>::Type to get the type of the Nth argument in Args.
Definition AbstractProperty.h:383
The plBitflags class allows you to work with type-safe bitflags.
Definition Bitflags.h:82
PL_ALWAYS_INLINE void Add(const plBitflags< T > &rhs)
Sets the given flag.
Definition Bitflags.h:151
Template that allows to probe a container for its element type.
Definition AbstractProperty.h:455
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Template that allows to probe a function for a parameter and return type.
Definition AbstractProperty.h:400
Describes what kind of function a property is.
Definition AbstractProperty.h:521
Enum
Definition AbstractProperty.h:525
@ StaticMember
A static member function, instance pointer will be ignored.
Definition AbstractProperty.h:527
@ Member
A normal member function, a valid instance pointer must be provided to call.
Definition AbstractProperty.h:526
@ Constructor
A constructor. Return value is a void* pointing to the new instance allocated with the default alloca...
Definition AbstractProperty.h:528
Determines whether a type is plIsBitflags.
Definition AbstractProperty.h:23
Determines whether a type is plIsBitflags.
Definition AbstractProperty.h:36
Template that allows to probe a single parameter function for parameter and return type.
Definition AbstractProperty.h:442
Describes what category a property belongs to.
Definition AbstractProperty.h:132
Enum
Definition AbstractProperty.h:136
@ Member
The property is a 'member property', i.e. it represents some accessible value. Cast to plAbstractMemb...
Definition AbstractProperty.h:138
@ Set
The property is actually a set of values. Cast to plAbstractSetProperty.
Definition AbstractProperty.h:141
@ Function
The property is a function which can be called. Cast to plAbstractFunctionProperty.
Definition AbstractProperty.h:139
@ Map
The property is actually a map from string to values. Cast to plAbstractMapProperty.
Definition AbstractProperty.h:142
@ Constant
The property is a constant value that is stored inside the RTTI data.
Definition AbstractProperty.h:137
@ Array
The property is actually an array of values. The array dimensions might be changeable....
Definition AbstractProperty.h:140
Definition AbstractProperty.h:76
Flags used to describe a property and its type.
Definition AbstractProperty.h:48
Enum
Definition AbstractProperty.h:52
@ ReadOnly
Can only be read but not modified.
Definition AbstractProperty.h:63
@ Const
Property value is const.
Definition AbstractProperty.h:58
@ Reference
Property value is a reference.
Definition AbstractProperty.h:59
@ IsEnum
enum property, cast to plAbstractEnumerationProperty.
Definition AbstractProperty.h:54
@ Phantom
Definition AbstractProperty.h:65
@ StandardType
Anything that can be stored inside an plVariant except for pointers and containers.
Definition AbstractProperty.h:53
@ VarOut
Tag for non-const-ref function parameters to indicate usage 'out'.
Definition AbstractProperty.h:68
@ Hidden
This property should not appear in the UI.
Definition AbstractProperty.h:64
@ Bitflags
Bitflags property, cast to plAbstractEnumerationProperty.
Definition AbstractProperty.h:55
@ VarInOut
Tag for non-const-ref function parameters to indicate usage 'inout'.
Definition AbstractProperty.h:69
@ Class
A struct or class. All of the above are mutually exclusive.
Definition AbstractProperty.h:56
@ Pointer
Property value is a pointer.
Definition AbstractProperty.h:60
@ PointerOwner
This pointer property takes ownership of the passed pointer.
Definition AbstractProperty.h:62
typename std::remove_const< typename std::remove_reference< T >::type >::type NonConstReferenceType
removes reference and const qualifier
Definition TypeTraits.h:218
typename std::remove_const< typename std::remove_reference< typename std::remove_pointer< T >::type >::type >::type NonConstReferencePointerType
removes reference, const and pointer qualifier Note that this removes the const and reference of the ...
Definition TypeTraits.h:225
A helper struct to convert the C++ type, which is passed as the template argument,...
Definition VariantType.h:97
Enum
This enum describes the type of data that is currently stored inside the variant. Note that changes t...
Definition VariantType.h:26
@ FirstStandardType
*** Types that are flagged as 'StandardTypes' (see DetermineTypeFlags) ***
Definition VariantType.h:30