OROCHI
 
Loading...
Searching...
No Matches
GxRtti.h File Reference

実行時型情報 (Run Time Type Information) More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  GxRtti
 実行時型情報クラス More...
 

Macros

#define GX_RTTI_CLASS(__THIS__, __BASE__)
 
#define GX_RTTI_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__)
 
#define GX_RTTI_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__)
 
#define GX_RTTI_CLASS_NAME(__THIS__, __BASE__, __NAME__)
 
#define GX_RTTI_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__)
 
#define GX_RTTI_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__)
 
#define GX_RTTI_ABSTRACT_CLASS(__THIS__, __BASE__)
 
#define GX_RTTI_ABSTRACT_CLASS_ICON(__THIS__, __BASE__, __ICON_TYPE__)
 
#define GX_RTTI_ABSTRACT_CLASS_ICON_ATTRIBUTE(__THIS__, __BASE__, __ICON_TYPE__, __ATTRIBUTE__)
 
#define GX_RTTI_ABSTRACT_CLASS_NAME(__THIS__, __BASE__, __NAME__)
 
#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON(__THIS__, __BASE__, __NAME__, __ICON_TYPE__)
 
#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON_ATTRIBUTE(__THIS__, __BASE__, __NAME__, __ICON_TYPE__, __ATTRIBUTE__)
 
#define GX_RTTI_GET_NAME(__CLASS_NAME__, __VIRTUAL_NAME__)
 
#define GX_RTTI_CPP_PRAGMA_BEGIN()
 
#define GX_RTTI_CPP_PRAGMA_END()
 
#define GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, __NAME__, __ID__, __ICON_TYPE__, __ATTRIBUTE__, __CREATE_INSTANCE__, __DESTROY_INSTANCE__)
 
#define GX_RTTI_STRUCT(__THIS__)
 
#define GX_RTTI_STRUCT_ATTRIBUTE(__THIS__, __ATTRIBUTE__)
 
#define GX_RTTI_STRUCT_NAME(__THIS__, __NAME__)
 
#define GX_RTTI_STRUCT_NAME_ATTRIBUTE(__THIS__, __NAME__, __ATTRIBUTE__)
 
#define GX_RTTI_STRUCT_DEFINE(__THIS__, __NAME__, __ID__, __ATTRIBUTE__)
 
#define GX_PROPERTY_BEGIN(__THIS__)
 
#define GX_PROPERTY_ATTRIBUTE_BEGIN(__THIS__, __ATTRIBUTE__)
 
#define GX_PROPERTY_FUNCTION_BEGIN(__THIS__)
 
#define GX_PROPERTY_ATTRIBUTE_FUNCTION_BEGIN(__THIS__, __ATTRIBUTE__)
 
#define GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, __GET_FUNCTION__, __GET_FUNCTION_COUNT__)
 
#define GX_PROPERTY_END()
 
#define GX_FUNCTION_BEGIN(__THIS__)
 
#define GX_FUNCTION_END()
 
#define GX_RTTI   __getStaticRtti()
 
#define GX_CREATE_INSTANCE()
 
#define GX_DESTROY_INSTANCE()
 

Detailed Description

実行時型情報 (Run Time Type Information)

Author
Copyright (C)2009 SiliconStudio Inc. All rights reserved.
Tahir Arai

Macro Definition Documentation

◆ GX_CREATE_INSTANCE

#define GX_CREATE_INSTANCE ( )
Value:
createInstance()

◆ GX_DESTROY_INSTANCE

#define GX_DESTROY_INSTANCE ( )
Value:
__destroyInstance()

◆ GX_FUNCTION_BEGIN

#define GX_FUNCTION_BEGIN ( __THIS__)
Value:
u32 __THIS__::__getFunctionCount(void){ \
static b32 initialFlag = false; static u32 count = 0; \
if( !initialFlag ){ \
for( GxFunction* pFunction = __functions; pFunction->getReturnType()._type != GxFunction::TYPE::MAX; pFunction++ ){ count++; } \
initialFlag = true; \
} \
return count; \
} \
GxFunction __THIS__::__functions[] = {
関数型情報
Definition GxFunction.h:18
@ MAX
定義数
GX_FORCE_INLINE GxType getReturnType(void) const
戻り値の型を取得
Definition GxFunction.h:342
32bitブーリアン
Definition GxDefine.h:173

◆ GX_FUNCTION_END

#define GX_FUNCTION_END ( )
Value:
GxFunction(nullptr, 0, nullptr, "", GxFunction::TYPE::MAX) \
};

◆ GX_PROPERTY_ATTRIBUTE_BEGIN

#define GX_PROPERTY_ATTRIBUTE_BEGIN ( __THIS__,
__ATTRIBUTE__ )
Value:
GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, nullptr, nullptr)

◆ GX_PROPERTY_ATTRIBUTE_FUNCTION_BEGIN

#define GX_PROPERTY_ATTRIBUTE_FUNCTION_BEGIN ( __THIS__,
__ATTRIBUTE__ )
Value:
GX_PROPERTY_BEGIN_EX(__THIS__, __ATTRIBUTE__, (GxRtti::GET_FUNCTIONS_FUNCTION )&__THIS__::__getFunctions, (GxRtti::GET_FUNCTION_NUM_FUNCTION)&__THIS__::__getFunctionCount)

◆ GX_PROPERTY_BEGIN

#define GX_PROPERTY_BEGIN ( __THIS__)
Value:
GX_PROPERTY_BEGIN_EX(__THIS__, 0, nullptr, nullptr)

◆ GX_PROPERTY_BEGIN_EX

#define GX_PROPERTY_BEGIN_EX ( __THIS__,
__ATTRIBUTE__,
__GET_FUNCTION__,
__GET_FUNCTION_COUNT__ )
Value:
GxRtti __THIS__::__rtti( \
GxRtti::TYPE::NORMAL, sizeof(__THIS__), (__defaultId == GxRtti::DEFAULT_ID) ? GxMath::getHash32(#__THIS__) : __defaultId, __THIS__::__defaultAttr | __ATTRIBUTE__, \
&Super::__getStaticRtti(), (GxRtti::CREATE_INSTANCE_FUNCTION)&__THIS__::__createInstance, \
(GxRtti::GET_PROPERTIES_FUNCTION )&__THIS__::__getProperties, (GxRtti::GET_PROPERTY_NUM_FUNCTION)&__THIS__::__getPropertyCount, \
__GET_FUNCTION__, __GET_FUNCTION_COUNT__); \
u32 __THIS__::__getPropertyCount(void){ \
static b32 initialFlag = false; static u32 count = 0; \
if( !initialFlag ){ \
for( GxProperty* pProperty = __properties; pProperty->getType() != GxProperty::TYPE::COUNT_MAX; pProperty++ ){ count++; } \
initialFlag = true; \
} \
return count; \
} \
GxProperty __THIS__::__properties[] = {
static u32 getHash32(void *pData, u32 size)
ハッシュ値取得(32bit、データ、サイズ指定版)
Definition GxMath.cpp:241
プロパティクラス
Definition GxProperty.h:48
@ COUNT_MAX
定義数
constexpr GxProperty::TYPE getType(void) const
タイプを取得
Definition GxProperty.h:1083
実行時型情報クラス
Definition GxRtti.h:154
@ NORMAL
通常
static constexpr u32 DEFAULT_ID
GxRttiのIDを定義しなかったときのデフォルト値
Definition GxRtti.h:161

◆ GX_PROPERTY_END

#define GX_PROPERTY_END ( )
Value:
};
関数クラス
Definition GxProperty.h:236
@ ATTRIBUTE_NONE
属性なし
Definition GxProperty.h:130
static constexpr u32 DEFAULT_ID
デフォルトID
Definition GxProperty.h:126

◆ GX_PROPERTY_FUNCTION_BEGIN

#define GX_PROPERTY_FUNCTION_BEGIN ( __THIS__)
Value:
GX_PROPERTY_BEGIN_EX(__THIS__, 0, (GxRtti::GET_FUNCTIONS_FUNCTION )&__THIS__::__getFunctions, (GxRtti::GET_FUNCTION_NUM_FUNCTION)&__THIS__::__getFunctionCount)

◆ GX_RTTI_ABSTRACT_CLASS

#define GX_RTTI_ABSTRACT_CLASS ( __THIS__,
__BASE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)
@ INVALID
未定義

◆ GX_RTTI_ABSTRACT_CLASS_ICON

#define GX_RTTI_ABSTRACT_CLASS_ICON ( __THIS__,
__BASE__,
__ICON_TYPE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)

◆ GX_RTTI_ABSTRACT_CLASS_ICON_ATTRIBUTE

#define GX_RTTI_ABSTRACT_CLASS_ICON_ATTRIBUTE ( __THIS__,
__BASE__,
__ICON_TYPE__,
__ATTRIBUTE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)

◆ GX_RTTI_ABSTRACT_CLASS_NAME

#define GX_RTTI_ABSTRACT_CLASS_NAME ( __THIS__,
__BASE__,
__NAME__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, 0, nullptr, return)

◆ GX_RTTI_ABSTRACT_CLASS_NAME_ICON

#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON ( __THIS__,
__BASE__,
__NAME__,
__ICON_TYPE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, 0, nullptr, return)

◆ GX_RTTI_ABSTRACT_CLASS_NAME_ICON_ATTRIBUTE

#define GX_RTTI_ABSTRACT_CLASS_NAME_ICON_ATTRIBUTE ( __THIS__,
__BASE__,
__NAME__,
__ICON_TYPE__,
__ATTRIBUTE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, __ATTRIBUTE__, nullptr, return)

◆ GX_RTTI_CLASS

#define GX_RTTI_CLASS ( __THIS__,
__BASE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)
@ ATTRIBUTE_CREATABLE
createInstance()を実行できる
Definition GxRtti.h:187

◆ GX_RTTI_CLASS_DEFINE

#define GX_RTTI_CLASS_DEFINE ( __THIS__,
__BASE__,
__NAME__,
__ID__,
__ICON_TYPE__,
__ATTRIBUTE__,
__CREATE_INSTANCE__,
__DESTROY_INSTANCE__ )
Value:
GX_RTTI_CPP_PRAGMA_BEGIN() \
using MyClass = __THIS__; \
using Super = __BASE__; \
static GxRtti __rtti; \
static GxProperty __properties[]; \
static GxFunction __functions[]; \
static const u32 __defaultId = __ID__; \
static const u32 __defaultAttr = __ATTRIBUTE__; \
static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
GxRtti& getRtti(void) const override { return __THIS__::__rtti; } \
void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
static GxProperty* __getProperties(void){ return __properties; } \
static GxFunction* __getFunctions(void){ return __functions; } \
static u32 __getPropertyCount(void); \
static u32 __getFunctionCount(void); \
GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
static GxRtti& __getStaticRtti(void){ return __rtti; } \
static __THIS__* __createInstance(void){ return __CREATE_INSTANCE__; } \
void __destroyInstance(void){ __DESTROY_INSTANCE__; } \
virtual void trace(void){ __THIS__::__getStaticRtti().trace(this); } \
GX_RTTI_CPP_PRAGMA_END()
void trace(GxTypedObject *pObject)
デバッグ出力
Definition GxRtti.cpp:514
static void forceUsage(GxRtti &rtti)
最適化回避呼び出し
Definition GxRtti.cpp:143

◆ GX_RTTI_CLASS_ICON

#define GX_RTTI_CLASS_ICON ( __THIS__,
__BASE__,
__ICON_TYPE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)

◆ GX_RTTI_CLASS_ICON_ATTRIBUTE

#define GX_RTTI_CLASS_ICON_ATTRIBUTE ( __THIS__,
__BASE__,
__ICON_TYPE__,
__ATTRIBUTE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)

◆ GX_RTTI_CLASS_NAME

#define GX_RTTI_CLASS_NAME ( __THIS__,
__BASE__,
__NAME__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ICON_TYPE::INVALID, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)

◆ GX_RTTI_CLASS_NAME_ICON

#define GX_RTTI_CLASS_NAME_ICON ( __THIS__,
__BASE__,
__NAME__,
__ICON_TYPE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE, GX_NEW __THIS__, GX_DELETE this)

◆ GX_RTTI_CLASS_NAME_ICON_ATTRIBUTE

#define GX_RTTI_CLASS_NAME_ICON_ATTRIBUTE ( __THIS__,
__BASE__,
__NAME__,
__ICON_TYPE__,
__ATTRIBUTE__ )
Value:
GX_RTTI_CLASS_DEFINE(__THIS__, __BASE__, nullptr, GxRtti::DEFAULT_ID, __ICON_TYPE__, GxRtti::ATTRIBUTE_CREATABLE | __ATTRIBUTE__, GX_NEW __THIS__, GX_DELETE this)

◆ GX_RTTI_GET_NAME

#define GX_RTTI_GET_NAME ( __CLASS_NAME__,
__VIRTUAL_NAME__ )
Value:
static GX_CSTR __getName(void){ return __VIRTUAL_NAME__; }

◆ GX_RTTI_STRUCT

#define GX_RTTI_STRUCT ( __THIS__)
Value:
GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)
@ ATTRIBUTE_STRUCT
構造体
Definition GxRtti.h:189

◆ GX_RTTI_STRUCT_ATTRIBUTE

#define GX_RTTI_STRUCT_ATTRIBUTE ( __THIS__,
__ATTRIBUTE__ )
Value:
GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)

◆ GX_RTTI_STRUCT_DEFINE

#define GX_RTTI_STRUCT_DEFINE ( __THIS__,
__NAME__,
__ID__,
__ATTRIBUTE__ )
Value:
using MyClass = __THIS__; \
using Super = GxStructBase; \
static GxRtti __rtti; \
static GxProperty __properties[]; \
static GxFunction __functions[]; \
static const u32 __defaultId = __ID__; \
static const u32 __defaultAttr = __ATTRIBUTE__; \
static void usage(void){ GxRtti& rtti = __THIS__::__rtti; GxRtti::forceUsage(rtti); } \
GxRtti& getRtti(void) const { return __THIS__::__rtti; } \
void* cast(const GxRtti& rtti){ if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
const void* cast(const GxRtti& rtti) const { if(getRtti().isDerived(rtti)){ return this; } return nullptr; } \
static GxProperty* __getProperties (void){ return __properties; } \
static GxFunction* __getFunctions(void){ return __functions; } \
static u32 __getPropertyCount(void); \
static u32 __getFunctionCount(void); \
GX_RTTI_GET_NAME(#__THIS__, __NAME__) \
static GxRtti& __getStaticRtti(void){ return __rtti; } \
static __THIS__* __createInstance(void){ return GX_NEW (__THIS__); } \
void __destroyInstance(void){ GX_DELETE this; } \
void trace(void){ __THIS__::__getStaticRtti().trace(this); }
Definition GxBase.h:24

◆ GX_RTTI_STRUCT_NAME

#define GX_RTTI_STRUCT_NAME ( __THIS__,
__NAME__ )
Value:
GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT)

◆ GX_RTTI_STRUCT_NAME_ATTRIBUTE

#define GX_RTTI_STRUCT_NAME_ATTRIBUTE ( __THIS__,
__NAME__,
__ATTRIBUTE__ )
Value:
GX_RTTI_STRUCT_DEFINE(__THIS__, nullptr, GxRtti::DEFAULT_ID, GxRtti::ATTRIBUTE_CREATABLE | GxRtti::ATTRIBUTE_STRUCT | __ATTRIBUTE__)