12GX_CORE_NAMESPACE_BEGIN()
40 GxNode(
void) : _className(nullptr), _virtualName(nullptr), _pSmall(nullptr), _pLarge(nullptr){}
42 virtual ~GxNode(
void){}
44 void initialize(
void);
48 GxNode(
const GxNode&);
50 GX_FORCE_INLINE
const GxNode& operator = (
const GxNode&);
59 constexpr u32 getId(
void)
const {
return _id; }
61 constexpr void setId(u32
id){ _id = id; }
63 constexpr GX_CSTR getClassName(
void)
const {
return _className; }
65 constexpr void setClassName(GX_CSTR name){ _className = name; }
67 constexpr GX_CSTR getVirtualName(
void)
const {
return _virtualName; }
69 constexpr void setVirtualName(GX_CSTR name){ _virtualName = name; }
71 constexpr GxNode* getSmall(
void)
const {
return _pSmall; }
73 constexpr void setSmall(GxNode* pSmall){ _pSmall = pSmall; }
75 constexpr GxNode* getLarge(
void)
const {
return _pLarge; }
77 constexpr void setLarge(GxNode* pLarge){ _pLarge = pLarge; }
95 static constexpr u32 NODE_MAX = 8192;
104 GxIdCheckTree(
void) : _count(0){}
106 ~GxIdCheckTree(
void){}
108 void initialize(
void);
112 GxIdCheckTree(
const GxIdCheckTree&);
114 GX_FORCE_INLINE
const GxIdCheckTree& operator = (
const GxIdCheckTree&);
123 constexpr u32 getCount(
void)
const {
return _count; }
125 GX_FORCE_INLINE GxNode* getNode(u32 index) {
return index < _count ? &_node[index] :
nullptr; }
134 void add(u32
id, GX_CSTR className, GX_CSTR virtualName);
142 GxNode _node[NODE_MAX];
164 typedef void* (*CREATE_INSTANCE_FUNCTION)(GX_CSTR filename, u32 line);
166 typedef void* (*CREATE_INSTANCE_FUNCTION)(void);
172 typedef void (*CREATE_GUI_FUNCTION)(void);
175 typedef GxProperty* (*GET_PROPERTIES_FUNCTION)(void);
177 typedef u32 (*GET_PROPERTY_NUM_FUNCTION)(void);
179 typedef GxFunction* (*GET_FUNCTIONS_FUNCTION)(void);
181 typedef u32(*GET_FUNCTION_NUM_FUNCTION)(void);
305 _pParent(nullptr), _pChild(nullptr), _pNext(nullptr), _pCreateInstanceFunction(nullptr),
307 _pCreateGuiFunction(nullptr),
309 _pGetPropertiesFunction(nullptr), _pGetPropertyNumFunction(nullptr), _pGetFunctionNumFunction(nullptr){}
314 GX_CSTR className, GX_CSTR name,
ICON_TYPE iconType,
316 TYPE type, u32 size, u32
id, u32 attribute,
GxRtti* pBaseRtti,
317 CREATE_INSTANCE_FUNCTION pCreateInstanceFunction,
319 CREATE_GUI_FUNCTION pCreateGuiFunction,
321 GET_PROPERTIES_FUNCTION pGetPropertiesFunction,
322 GET_PROPERTY_NUM_FUNCTION pGetPropertyNumFunction,
323 GET_FUNCTIONS_FUNCTION pGetFunctionsFunction,
324 GET_FUNCTION_NUM_FUNCTION pGetFunctionNumFunction);
334 GX_FORCE_INLINE
const GxRtti& operator = (
const GxRtti&);
344 GX_INLINE GxGuiBase* createGui(
GxProperty& property,
GxTypedObject* pOwner,
const GxRtti& rtti, u32 index = 0)
const {
return _pCreateGuiFunction(property, pOwner, rtti, index); }
347 u32 createPropertyTable(GxPropertyTable& propertyTable, b32 searchParentFlag = true) const;
356 GX_FORCE_INLINE
void*
createInstance(GX_CSTR filename, u32 line)
const {
return _pCreateInstanceFunction(filename, line); }
358 GX_FORCE_INLINE
void*
createInstance(
void)
const {
return _pCreateInstanceFunction(); }
361 void trace(GxTypedObject* pObject);
376 constexpr u32
getId(
void)
const {
return _id; }
378 GX_FORCE_INLINE
b32 isId(u32
id)
const {
return _id == id; }
393 constexpr GX_CSTR getName(
void)
const {
return _name; }
395 constexpr GX_CSTR getClassName(
void)
const {
return _className; }
397 GX_CSTR getFormalName(
void)
const;
399 GX_CSTR getFormalClassName(
void)
const;
401 constexpr ICON_TYPE getIconType(
void)
const {
return _iconType; }
403 ICON_TYPE getIconTypeParentsFollow(
void)
const;
437 const GxTypedObject* getDefaultObject(GxTypedObject* pCustomObject = nullptr);
449 GxRtti* getRttiSub(u32
id)
const;
452 GxRtti* getRttiSub(GX_CSTR name)
const;
454 GX_CSTR getFormalNameSub(GX_CSTR name)
const;
473 static constexpr u32 CLASS_NAME_MAX = 127;
474 GX_CHAR _className[CLASS_NAME_MAX + 1];
483 CREATE_INSTANCE_FUNCTION _pCreateInstanceFunction;
485 CREATE_GUI_FUNCTION _pCreateGuiFunction;
487 GET_PROPERTIES_FUNCTION _pGetPropertiesFunction;
488 GET_PROPERTY_NUM_FUNCTION _pGetPropertyNumFunction;
489 GET_FUNCTIONS_FUNCTION _pGetFunctionsFunction;
490 GET_FUNCTION_NUM_FUNCTION _pGetFunctionNumFunction;
497#define GX_RTTI_CLASS(__THIS__, __BASE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
498#define GX_RTTI_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
499#define GX_RTTI_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)
500#define GX_RTTI_CLASS_NAME(__THIS__, __BASE__, __NAME__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
501#define GX_RTTI_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
502#define GX_RTTI_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)
504#define GX_RTTI_CLASS(__THIS__, __BASE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
505#define GX_RTTI_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
506#define GX_RTTI_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)
507#define GX_RTTI_CLASS_NAME(__THIS__, __BASE__, __NAME__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
508#define GX_RTTI_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
509#define GX_RTTI_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)
514#define GX_RTTI_ABSTRACT_CLASS(__THIS__, __BASE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)
515#define GX_RTTI_ABSTRACT_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)
516#define GX_RTTI_ABSTRACT_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, #__THIS__, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)
517#define GX_RTTI_ABSTRACT_CLASS_NAME(__THIS__, __BASE__, __NAME__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)
518#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)
519#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)
521#define GX_RTTI_ABSTRACT_CLASS(__THIS__, __BASE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)
522#define GX_RTTI_ABSTRACT_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)
523#define GX_RTTI_ABSTRACT_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)
524#define GX_RTTI_ABSTRACT_CLASS_NAME(__THIS__, __BASE__, __NAME__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)
525#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)
526#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__) GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)
530#define GX_RTTI_GET_NAME(__CLASS_NAME__, __VIRTUAL_NAME__) static GX_CSTR __getName(void){ return __VIRTUAL_NAME__; }
532#if defined(__clang__)
533#define GX_RTTI_CPP_PRAGMA_BEGIN() \
534 _Pragma("clang diagnostic push") \
535 _Pragma("clang diagnostic ignored \"-Winconsistent-missing-override\"")
536#define GX_RTTI_CPP_PRAGMA_END() \
537 _Pragma("clang diagnostic pop")
539#define GX_RTTI_CPP_PRAGMA_BEGIN()
540#define GX_RTTI_CPP_PRAGMA_END()
545#define GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, __ID__, __ICON_TYPE__, __ATTRIBUTE__, __CREATE_INSTANCE__, __DESTROY_INSTANCE__) \
546 GX_RTTI_CPP_PRAGMA_BEGIN() \
547 using MyClass = __THIS__; \
548 using Super = __BASE__; \
549 static GxRtti __rtti; \
550 static GxProperty __properties[]; \
551 static GxFunction __functions[]; \
552 static const u32 __defaultId = __ID__; \
553 static const u32 __defaultAttr = __ATTRIBUTE__; \
554 static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
555 GxRtti& getRtti(void) const override { return __THIS__::__rtti; } \
556 void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
557 const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
558 static GxProperty* __getProperties(void){ return __properties; } \
559 static GxFunction* __getFunctions(void){ return __functions; } \
560 static u32 __getPropertyCount(void); \
561 static u32 __getFunctionCount(void); \
562 GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
563 static GxRtti& __getStaticRtti(void){ return __rtti; } \
564 static __THIS__* __createInstance(void){ return __CREATE_INSTANCE__; } \
565 void __destroyInstance(void){ __DESTROY_INSTANCE__; } \
566 virtual void trace(void){ __THIS__::__getStaticRtti().trace(this); } \
567 static GxGuiBase* __createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0){ return MyClass::createGui(property, pOwner, rtti, index); } \
568 static const GxRtti::ICON_TYPE __iconType = __ICON_TYPE__; \
569 GX_RTTI_CPP_PRAGMA_END()
571#define GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, __ID__, __ICON_TYPE__, __ATTRIBUTE__, __CREATE_INSTANCE__, __DESTROY_INSTANCE__) \
572 GX_RTTI_CPP_PRAGMA_BEGIN() \
573 using MyClass = __THIS__; \
574 using Super = __BASE__; \
575 static GxRtti __rtti; \
576 static GxProperty __properties[]; \
577 static GxFunction __functions[]; \
578 static const u32 __defaultId = __ID__; \
579 static const u32 __defaultAttr = __ATTRIBUTE__; \
580 static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
581 GxRtti& getRtti(void) const override { return __THIS__::__rtti; } \
582 void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
583 const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
584 static GxProperty* __getProperties(void){ return __properties; } \
585 static GxFunction* __getFunctions(void){ return __functions; } \
586 static u32 __getPropertyCount(void); \
587 static u32 __getFunctionCount(void); \
588 GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
589 static GxRtti& __getStaticRtti(void){ return __rtti; } \
590 static __THIS__* __createInstance(void){ return __CREATE_INSTANCE__; } \
591 void __destroyInstance(void){ __DESTROY_INSTANCE__; } \
592 virtual void trace(void){ __THIS__::__getStaticRtti().trace(this); } \
593 GX_RTTI_CPP_PRAGMA_END()
598#define GX_RTTI_STRUCT(__THIS__) GX_RTTI_STRUCT_DEFINE(__THIS__, #__THIS__, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)
599#define GX_RTTI_STRUCT_ATTRIBUTE(__THIS__, __ATTRIBUTE__) GX_RTTI_STRUCT_DEFINE(__THIS__, #__THIS__, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)
600#define GX_RTTI_STRUCT_NAME(__THIS__, __NAME__) GX_RTTI_STRUCT_DEFINE(__THIS__, __NAME__, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)
601#define GX_RTTI_STRUCT_NAME_ATTRIBUTE(__THIS__, __NAME__, __ATTRIBUTE__) GX_RTTI_STRUCT_DEFINE(__THIS__, __NAME__, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)
603#define GX_RTTI_STRUCT(__THIS__) GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)
604#define GX_RTTI_STRUCT_ATTRIBUTE(__THIS__, __ATTRIBUTE__) GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)
605#define GX_RTTI_STRUCT_NAME(__THIS__, __NAME__) GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)
606#define GX_RTTI_STRUCT_NAME_ATTRIBUTE(__THIS__, __NAME__, __ATTRIBUTE__) GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)
611#define GX_RTTI_STRUCT_DEFINE(__THIS__, __NAME__, __ID__, __ATTRIBUTE__) \
612 using MyClass = __THIS__; \
613 using Super = GxStructBase; \
614 static GxRtti __rtti; \
615 static GxProperty __properties[]; \
616 static GxFunction __functions[]; \
617 static const u32 __defaultId = __ID__; \
618 static const u32 __defaultAttr = __ATTRIBUTE__; \
619 static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
620 GxRtti& getRtti(void) const { return __THIS__::__rtti; } \
621 void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
622 const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
623 static GxProperty* __getProperties (void){ return __properties; } \
624 static GxFunction* __getFunctions(void){ return __functions; } \
625 static u32 __getPropertyCount(void); \
626 static u32 __getFunctionCount(void); \
627 GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
628 static GxRtti& __getStaticRtti(void){ return __rtti; } \
629 static __THIS__* __createInstance(void){ return GX_NEW (__THIS__); } \
630 void __destroyInstance(void){ GX_DELETE this; } \
631 void trace(void){ __THIS__::__getStaticRtti().trace(this); } \
632 static GxGuiBase* __createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0){ return MyClass::createGui(property, pOwner, rtti, index); } \
633 static const GxRtti::ICON_TYPE __iconType = GxRtti::ICON_TYPE::INVALID;
635#define GX_RTTI_STRUCT_DEFINE(__THIS__, __NAME__, __ID__, __ATTRIBUTE__) \
636 using MyClass = __THIS__; \
637 using Super = GxStructBase; \
638 static GxRtti __rtti; \
639 static GxProperty __properties[]; \
640 static GxFunction __functions[]; \
641 static const u32 __defaultId = __ID__; \
642 static const u32 __defaultAttr = __ATTRIBUTE__; \
643 static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
644 GxRtti& getRtti(void) const { return __THIS__::__rtti; } \
645 void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
646 const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
647 static GxProperty* __getProperties (void){ return __properties; } \
648 static GxFunction* __getFunctions(void){ return __functions; } \
649 static u32 __getPropertyCount(void); \
650 static u32 __getFunctionCount(void); \
651 GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
652 static GxRtti& __getStaticRtti(void){ return __rtti; } \
653 static __THIS__* __createInstance(void){ return GX_NEW (__THIS__); } \
654 void __destroyInstance(void){ GX_DELETE this; } \
655 void trace(void){ __THIS__::__getStaticRtti().trace(this); }
659#define GX_PROPERTY_BEGIN(__THIS__) GX_PROPERTY_BEGIN_EX(__THIS__, 0, nullptr, nullptr)
660#define GX_PROPERTY_ATTRIBUTE_BEGIN(__THIS__, __ATTRIBUTE__) GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, nullptr, nullptr)
661#define GX_PROPERTY_FUNCTION_BEGIN(__THIS__) GX_PROPERTY_BEGIN_EX(__THIS__, 0, (GxRtti::GET_FUNCTIONS_FUNCTION )&__THIS__::__getFunctions, (GxRtti::GET_FUNCTION_NUM_FUNCTION)&__THIS__::__getFunctionCount)
662#define GX_PROPERTY_ATTRIBUTE_FUNCTION_BEGIN(__THIS__, __ATTRIBUTE__) GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, (GxRtti::GET_FUNCTIONS_FUNCTION )&__THIS__::__getFunctions, (GxRtti::GET_FUNCTION_NUM_FUNCTION)&__THIS__::__getFunctionCount)
664#define GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, __GET_FUNCTION__, __GET_FUNCTION_COUNT__) GxRtti __THIS__::__rtti( #__THIS__, __THIS__::__getName(), __iconType, \
665 GxRtti::TYPE::NORMAL, sizeof(__THIS__), (__defaultId == GxRtti::DEFAULT_ID) ? GxMath::getHash32(#__THIS__) : __defaultId, __THIS__::__defaultAttr | __ATTRIBUTE__, \
666 &Super::__getStaticRtti(), (GxRtti::CREATE_INSTANCE_FUNCTION)&__THIS__::__createInstance, (GxRtti::CREATE_GUI_FUNCTION)&__THIS__::__createGui, \
667 (GxRtti::GET_PROPERTIES_FUNCTION )&__THIS__::__getProperties, (GxRtti::GET_PROPERTY_NUM_FUNCTION)&__THIS__::__getPropertyCount, \
668 __GET_FUNCTION__, __GET_FUNCTION_COUNT__); \
669 u32 __THIS__::__getPropertyCount(void){ \
670 static b32 initialFlag = false; static u32 count = 0; \
671 if( !initialFlag ){ \
672 for( GxProperty* pProperty = __properties; pProperty->getType() != GxProperty::TYPE::COUNT_MAX; pProperty++ ){ count++; } \
673 initialFlag = true; \
677 GxProperty __THIS__::__properties[] = {
679#define GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, __GET_FUNCTION__, __GET_FUNCTION_COUNT__) GxRtti __THIS__::__rtti( \
680 GxRtti::TYPE::NORMAL, sizeof(__THIS__), (__defaultId == GxRtti::DEFAULT_ID) ? GxMath::getHash32(#__THIS__) : __defaultId, __THIS__::__defaultAttr | __ATTRIBUTE__, \
681 &Super::__getStaticRtti(), (GxRtti::CREATE_INSTANCE_FUNCTION)&__THIS__::__createInstance, \
682 (GxRtti::GET_PROPERTIES_FUNCTION )&__THIS__::__getProperties, (GxRtti::GET_PROPERTY_NUM_FUNCTION)&__THIS__::__getPropertyCount, \
683 __GET_FUNCTION__, __GET_FUNCTION_COUNT__); \
684 u32 __THIS__::__getPropertyCount(void){ \
685 static b32 initialFlag = false; static u32 count = 0; \
686 if( !initialFlag ){ \
687 for( GxProperty* pProperty = __properties; pProperty->getType() != GxProperty::TYPE::COUNT_MAX; pProperty++ ){ count++; } \
688 initialFlag = true; \
692 GxProperty __THIS__::__properties[] = {
697#define GX_PROPERTY_END() \
698 GxProperty( GxProperty::TYPE::COUNT_MAX, GxProperty::GxFunction(), GxProperty::ATTRIBUTE_NONE, nullptr, &MyClass::__getStaticRtti(), GxProperty::DEFAULT_ID, nullptr, nullptr) \
701#define GX_PROPERTY_END() \
702 GxProperty( GxProperty::TYPE::COUNT_MAX, GxProperty::GxFunction(), GxProperty::ATTRIBUTE_NONE, nullptr, &MyClass::__getStaticRtti(), GxProperty::DEFAULT_ID) \
707#define GX_FUNCTION_BEGIN(__THIS__) u32 __THIS__::__getFunctionCount(void){ \
708 static b32 initialFlag = false; static u32 count = 0; \
709 if( !initialFlag ){ \
710 for( GxFunction* pFunction = __functions; pFunction->getReturnType()._type != GxFunction::TYPE::MAX; pFunction++ ){ count++; } \
711 initialFlag = true; \
715 GxFunction __THIS__::__functions[] = {
718#define GX_FUNCTION_END() \
719 GxFunction(nullptr, 0, nullptr, "", GxFunction::TYPE::MAX) \
723#define GX_RTTI __getStaticRtti()
727#define GX_CREATE_INSTANCE() createInstance(__FILE__, __LINE__)
729#define GX_CREATE_INSTANCE() createInstance()
733#define GX_DESTROY_INSTANCE() __destroyInstance()
735GX_CORE_NAMESPACE_END()
void GxTypedObject
その他
Definition GxDefine.h:213
配列クラス
Definition GxArray.h:18
関数型情報
Definition GxFunction.h:18
プロパティクラス
Definition GxProperty.h:48
プロパティテーブルクラス
Definition GxProperty.h:1641
実行時型情報クラス
Definition GxRtti.h:154
constexpr u32 getAttribute(void) const
属性を取得
Definition GxRtti.h:380
u32 createDifferencePropertyTable(GxPropertyTable &propertyTable, GxTypedObject *pTargetObject, b32 searchParentFlag=true, const GxTypedObject *pDefaultObject=nullptr)
差分のプロパティ配列を作成
Definition GxRtti.cpp:300
GxRtti(TYPE type, u32 size, u32 id, u32 attribute, GxRtti *pBaseRtti, CREATE_INSTANCE_FUNCTION pCreateInstanceFunction, GET_PROPERTIES_FUNCTION pGetPropertiesFunction, GET_PROPERTY_NUM_FUNCTION pGetPropertyNumFunction, GET_FUNCTIONS_FUNCTION pGetFunctionsFunction, GET_FUNCTION_NUM_FUNCTION pGetFunctionNumFunction)
コンストラクタ
ICON_TYPE
アイコンタイプ定義
Definition GxRtti.h:202
@ CHECK_BOX_OFF
チェックボックスOFF
@ LAYOUT_CUSTOM
レイアウト(カスタマイズ)
static void copyObject(GxTypedObject *pObjectDst, const GxTypedObject *pObjectSrc, const GxRtti &rtti)
指定オブジェクトをコピー
Definition GxRtti.cpp:406
void deleteDefaultObjectSub(void)
デフォルトオブジェクトを削除するサブ関数
Definition GxRtti.cpp:986
const GxRtti * enumerate(const GxRtti *pRootRtti) const
指定以下のRTTIを列挙
Definition GxRtti.cpp:487
constexpr GxRtti::TYPE getType(void) const
種類を取得
Definition GxRtti.h:384
u32 getPropertyCount(void) const
プロパティ数を取得
Definition GxRtti.cpp:636
static volatile GxRtti * _pUsageCall
最適化回避呼び出し
Definition GxRtti.h:463
ATTRIBUTE
属性
Definition GxRtti.h:185
@ ATTRIBUTE_ALL
全フラグON
Definition GxRtti.h:190
@ ATTRIBUTE_CREATABLE
createInstance()を実行できる
Definition GxRtti.h:187
@ ATTRIBUTE_STRUCT
構造体
Definition GxRtti.h:189
@ ATTRIBUTE_NONE
全フラグOFF
Definition GxRtti.h:186
@ ATTRIBUTE_HIDE
GUIを表示しない
Definition GxRtti.h:188
GxRtti(void)
デフォルトコンストラクタ
Definition GxRtti.h:301
GX_FORCE_INLINE b32 isDerived(const GxRtti &rtti) const
継承されている型か判定
Definition GxRtti.h:372
GX_FORCE_INLINE b32 isAttribute(ATTRIBUTE attribute) const
属性を判定
Definition GxRtti.h:382
static void getRttiList(GxArray &list, const GxRtti &root=getRttiRoot(), ATTRIBUTE attributeOn=ATTRIBUTE_ALL, ATTRIBUTE attributeOff=ATTRIBUTE_NONE)
RTTIリストを取得
Definition GxRtti.cpp:816
TYPE
種類
Definition GxRtti.h:195
static const GxRtti * getRtti(u32 id, const GxRtti &root=getRttiRoot())
RTTIを取得
Definition GxRtti.cpp:796
static constexpr u32 DEFAULT_ID
GxRttiのIDを定義しなかったときのデフォルト値
Definition GxRtti.h:161
static void deleteDefaultObjectAll(void)
全てのデフォルトオブジェクトを削除
Definition GxRtti.cpp:977
constexpr u32 getId(void) const
IDを取得
Definition GxRtti.h:376
constexpr GxRtti * getChild(void) const
子を取得
Definition GxRtti.h:388
constexpr GxRtti * getParent(void) const
親を取得
Definition GxRtti.h:386
GxFunction * getFunction(u32 index) const
関数型を取得
Definition GxRtti.cpp:780
void getReferencePropertyList(GxArray &list, b32 searchParentFlag=false) const
参照リソースプロパティリストを取得
Definition GxRtti.cpp:726
u32 getFunctionCount(void) const
関数型の数を取得
Definition GxRtti.cpp:766
static GX_CHAR _usageDummy[8]
最適化回避用バッファ
Definition GxRtti.h:464
ICON_TYPE_64
アイコンタイプ定義(サイズ64)
Definition GxRtti.h:273
static GxRtti & getRttiRoot(void)
RTTIルートを取得
Definition GxRtti.cpp:870
GX_FORCE_INLINE b32 operator==(const GxRtti &rtti) const
一致演算子
Definition GxRtti.h:327
constexpr void setSingletonInstance(GxTypedObject *pSingletonInstance)
シングルトンインスタンスを設定
Definition GxRtti.h:441
GX_FORCE_INLINE void * createInstance(void) const
インスタンスを生成
Definition GxRtti.h:358
static GxRtti * getNextRtti(const GxRtti &rttiRoot, const GxRtti &rttiTarget)
次のRTTIを取得
Definition GxRtti.cpp:842
constexpr GxRtti * getNext(void) const
次の兄弟を取得
Definition GxRtti.h:390
void getReferenceRttiList(GxArray &list, b32 searchParentFlag=false) const
参照リソースRTTIリストを取得
Definition GxRtti.cpp:682
constexpr GxTypedObject * getSingletonInstance(void) const
シングルトンインスタンスを取得
Definition GxRtti.h:439
GX_FORCE_INLINE b32 isId(u32 id) const
IDを判定
Definition GxRtti.h:378
GX_FORCE_INLINE b32 operator!=(const GxRtti &rtti) const
不一致演算子
Definition GxRtti.h:329
static void forceUsage(GxRtti &rtti)
最適化回避呼び出し
Definition GxRtti.cpp:143
GxProperty * getProperty(u32 id, b32 searchParentFlag=false) const
プロパティを取得
Definition GxRtti.cpp:651
32bitブーリアン
Definition GxDefine.h:173