XII Release 0.1.0
Loading...
Searching...
No Matches
xiiAbstractMemberProperty Class Referenceabstract

This is the base class for all properties that are members of a class. It provides more information about the actual type. More...

#include <AbstractProperty.h>

Inheritance diagram for xiiAbstractMemberProperty:
[legend]

Public Member Functions

 xiiAbstractMemberProperty (xiiStringView sPropertyName)
 Passes the property name through to xiiAbstractProperty.
 
virtual xiiPropertyCategory::Enum GetCategory () const override
 Returns xiiPropertyCategory::Member.
 
virtual void * GetPropertyPointer (const void *pInstance) const =0
 Returns a pointer to the property data or nullptr. If a valid pointer is returned, that pointer and the information from GetSpecificType() can be used to step deeper into the type (if required).
 
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 this property's type.
 
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 property's type.
 
- Public Member Functions inherited from xiiAbstractProperty
 xiiAbstractProperty (xiiStringView sPropertyName)
 The constructor must get the name of the property. The string must be a compile-time constant.
 
xiiStringView GetPropertyName () const
 Returns the name of the property.
 
virtual const xiiRTTIGetSpecificType () const =0
 Returns the type information of the constant property. Use this to cast this property to a specific version of xiiTypedConstantProperty.
 
const xiiBitflags< xiiPropertyFlags > & GetFlags () const
 Returns the flags of the property.
 
xiiAbstractPropertyAddFlags (xiiBitflags< xiiPropertyFlags > flags)
 Adds flags to the property. Returns itself to allow to be called during initialization.
 
xiiAbstractPropertyAddAttributes (xiiPropertyAttribute *pAttrib1, xiiPropertyAttribute *pAttrib2=nullptr, xiiPropertyAttribute *pAttrib3=nullptr, xiiPropertyAttribute *pAttrib4=nullptr, xiiPropertyAttribute *pAttrib5=nullptr, xiiPropertyAttribute *pAttrib6=nullptr)
 Adds attributes to the property. Returns itself to allow to be called during initialization. Allocate an attribute using standard 'new'.
 
xiiArrayPtr< const xiiPropertyAttribute *const > GetAttributes () const
 Returns the array of property attributes.
 
template<typename Type>
const Type * GetAttributeByType () const
 Returns the first attribute that derives from the given type, or nullptr if nothing is found.
 

Additional Inherited Members

- Protected Attributes inherited from xiiAbstractProperty
xiiBitflags< xiiPropertyFlagsm_Flags
 
xiiStringView m_sPropertyName
 
xiiHybridArray< const xiiPropertyAttribute *, 2U, xiiStaticAllocatorWrapperm_Attributes
 

Detailed Description

This is the base class for all properties that are members of a class. It provides more information about the actual type.

If xiiPropertyFlags::Pointer is set as a flag, you must not cast this property to xiiTypedMemberProperty, instead use GetValuePtr and SetValuePtr. This is because reference and const-ness of the property are only fixed for the pointer but not the type, so the actual property type cannot be derived.

Member Function Documentation

◆ GetCategory()

virtual xiiPropertyCategory::Enum xiiAbstractMemberProperty::GetCategory ( ) const
inlineoverridevirtual

◆ GetPropertyPointer()

virtual void * xiiAbstractMemberProperty::GetPropertyPointer ( const void * pInstance) const
pure virtual

Returns a pointer to the property data or nullptr. If a valid pointer is returned, that pointer and the information from GetSpecificType() can be used to step deeper into the type (if required).

You need to pass the pointer to an object on which you are operating. This function is mostly of interest when the property itself is a compound type (a struct or class). If it is a simple type (int, float, etc.) it doesn't make much sense to retrieve the pointer.

For example GetSpecificType() might return that a property is of type xiiVec3. In that case one might either stop and just use the code to handle xiiVec3 types, or one might continue and enumerate all sub-properties (x, y and z) as well.

Note
There is no guarantee that this function returns a non-nullptr pointer, independent of the type. When a property uses custom 'accessors' (functions to get / set the property value), it is not possible (or useful) to get the property pointer.

Implemented in xiiAccessorProperty< Class, Type >, xiiBitflagsAccessorProperty< Class, EnumType, Type >, xiiBitflagsMemberProperty< Class, EnumType, Type >, xiiEnumAccessorProperty< Class, EnumType, Type >, xiiEnumMemberProperty< Class, EnumType, Type >, xiiMemberProperty< Class, Type >, xiiPhantomMemberProperty, and xiiResourceAccessorProperty< Class, Type >.

◆ GetValuePtr()

virtual void xiiAbstractMemberProperty::GetValuePtr ( const void * pInstance,
void * out_pObject ) const
pure virtual

◆ SetValuePtr()

virtual void xiiAbstractMemberProperty::SetValuePtr ( void * pInstance,
const void * pObject ) const
pure virtual

The documentation for this class was generated from the following file: