🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
运行时类型信息

详细描述

提供运行时类型信息功能,包括类元信息、属性元信息、对象的强弱引用计数。

class  ast::PropertyTimePoint
 
class  ast::ClonePtr< T >
 
class  ast::WeakPtr< _Object >
 
class  ast::AttributeBasic< ObjectPtrType, PropertyType >
 
struct  ast::initial_strong_ref_t
 
class  ast::Object
 
struct  ast::has_own_getType< T >
 
class  ast::ObjectCalculation
 
class  ast::Class
 
class  ast::Field
 
class  ast::Property
 
class  ast::PropertyBool
 
class  ast::PropertyDouble
 
class  ast::PropertyInt
 
class  ast::PropertyObject
 
class  ast::PropertyPOD
 
class  ast::PropertyQuantity
 
class  ast::PropertyString
 
class  ast::PropertyStruct
 
struct  ast::property_trait< T >
 
struct  ast::property_trait< std::string >
 
struct  ast::property_trait< TimePoint >
 
class  ast::Struct
 
struct  ast::ObjectPrintConfig
 
class  ast::ScopedPtr< T >
 
class  ast::SharedPtr< _Object >
 

宏定义

#define AST_OBJECT(TYPE)
 
#define AST_PROPERT(NAME)
 
#define AST_PROPERT_NAME(CLASS, NAME)
 
#define aPropertyName(CLASS, NAME)
 
#define _AST_IMPL_OBJECT(TYPE)
 

类型定义

typedef AttributeBasic< WeakPtr< Object >, Propertyast::Attribute
 
using ast::FPropertyGet = errc_t (*)(const void* obj, void* value)
 
using ast::FPropertySet = errc_t (*)(void* obj, const void* value)
 
using ast::FPropertyGetItemByString = errc_t (*)(const void* obj, StringView key, Object*& value)
 
using ast::FPropertyGetItemByIndex = errc_t (*)(const void* obj, size_t key, Object*& value)
 

枚举

enum  { ast::INVALID_ID = -1 }
 
enum class  ast::EValueType {
  ast::EValueType::eBool , ast::EValueType::eInt , ast::EValueType::eDouble , ast::EValueType::eQuantity ,
  ast::EValueType::eString , ast::EValueType::eObject , ast::EValueType::eTimePoint , ast::EValueType::eInvalid
}
 

函数

template<typename T >
ast::aobject_cast (Object *obj)
 
errc_t ast::aFakeGet (const void *container, void *value)
 
errc_t ast::aFakeSet (void *container, const void *value)
 
template<>
std::string ast::Property::getValue< std::string > (const void *container)
 
Propertyast::_aNewPropertyBool (FPropertyGet getter, FPropertySet setter)
 
Propertyast::_aNewPropertyInt (FPropertyGet getter, FPropertySet setter)
 
Propertyast::_aNewPropertyDouble (FPropertyGet getter, FPropertySet setter)
 
Propertyast::_aNewPropertyString (FPropertyGet getter, FPropertySet setter)
 
Propertyast::_aNewPropertyQuantity (FPropertyGet getter, FPropertySet setter, Dimension dimension)
 
Propertyast::_aNewPropertyObject (FPropertyGet getter, FPropertySet setter, Class *cls)
 
template<typename T >
Propertyast::_aNewProperty (FPropertyGet getter, FPropertySet setter)
 
template<>
Propertyast::_aNewProperty< bool > (FPropertyGet getter, FPropertySet setter)
 
template<>
Propertyast::_aNewProperty< int > (FPropertyGet getter, FPropertySet setter)
 
template<>
Propertyast::_aNewProperty< double > (FPropertyGet getter, FPropertySet setter)
 
template<>
Propertyast::_aNewProperty< std::string > (FPropertyGet getter, FPropertySet setter)
 
template<typename T , typename MemberType , MemberType T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyMem ()
 
template<typename T , typename Ret , Ret(T::*)() const Getter>
A_ALWAYS_INLINE Propertyast::aNewPropertyReadOnly ()
 
template<typename T , typename Ret , Ret(T::*)() const Getter, void(T::*)(Ret) Setter>
A_ALWAYS_INLINE Propertyast::aNewProperty ()
 
template<typename T , typename Ret , Ret(T::*)() const Getter, errc_t(T::*)(Ret) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyWithError ()
 
template<typename T , double T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyQuantity (Dimension dim)
 
template<typename T , double(T::*)() const Getter, void(T::*)(double) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyQuantity (Dimension dim)
 
template<typename T , double(T::*)() const Getter, errc_t(T::*)(double) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyQuantityWithError (Dimension dim)
 
template<typename T , typename ObjectType , ObjectType *T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyObject ()
 
template<typename T , typename ObjectType , ObjectType *(T::*)() const Getter, void(T::*)(ObjectType *) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyObject ()
 
template<typename T , typename ObjectType , ObjectType *(T::*)() const Getter, errc_t(T::*)(ObjectType *) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyObjectWithError ()
 
template<typename T , bool T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyBoolMem ()
 
template<typename T , int T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyIntMem ()
 
template<typename T , double T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyDoubleMem ()
 
template<typename T , std::string T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyStringMem ()
 
template<typename T , bool T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyBool ()
 
template<typename T , int T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyInt ()
 
template<typename T , double T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyDouble ()
 
template<typename T , std::string T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyString ()
 
template<typename T , double T::* Member>
A_ALWAYS_INLINE Propertyast::aNewPropertyQuantityMem (Dimension dim)
 
template<typename T , bool(T::*)() const Getter, void(T::*)(bool) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyBool ()
 
template<typename T , int(T::*)() const Getter, void(T::*)(int) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyInt ()
 
template<typename T , double(T::*)() const Getter, void(T::*)(double) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyDouble ()
 
template<typename T , const std::string &(T::*)() const Getter, void(T::*)(StringView) Setter>
A_ALWAYS_INLINE Propertyast::aNewPropertyString ()
 
void ast::aGetAllClassNames (std::vector< std::string > &names)
 
const std::unordered_map< std::string, Class * > & ast::aGetAllClasses ()
 
Classast::aGetClass (StringView name)
 
bool ast::aIsVirtualClass (StringView name)
 
void ast::aRegisterClass (Class *cls, StringView name=StringView())
 
Objectast::aGetClassDefaultObject (StringView name)
 
Objectast::aGetClassDefaultObject (Class *cls)
 
Objectast::aNewObject (StringView typeName, Object *parentScope=nullptr)
 
template<typename T >
T * ast::aNewObject (Object *parentScope=nullptr)
 
void ast::aDeleteObject (Object *obj)
 
SharedPtr< Objectast::aMakeObject (StringView name, Object *parentScope=nullptr)
 
Objectast::aResolveObject (StringView value, Class *cls=nullptr)
 
template<typename T >
ast::aResolveObject (StringView value)
 
Objectast::aGetObject (uint32_t id)
 
uint32_t ast::aAddObject (Object *object)
 
errc_t ast::aRemoveObject (Object *object)
 
void ast::aRemoveAllObjects ()
 
int ast::aGetObjectCount ()
 
std::vector< Object * > ast::aFindObjects (Class *cls, StringView name=StringView())
 
Objectast::aFindObject (Class *cls, StringView name=StringView())
 
template<typename T >
ast::aFindObject (StringView name=StringView())
 
errc_t ast::aSetParentScope (Object *obj, Object *parentScope)
 
Objectast::aGetParentScope (Object *obj)
 
Objectast::aGetAncestorScope (Object *obj, Class *cls)
 
template<typename T >
ast::aGetAncestorScope (Object *obj)
 
std::vector< Object * > ast::aGetAllObjects ()
 
void ast::aPrintAllObjects ()
 
Objectast::aFindChild (Object *parentScope, Class *cls=nullptr, StringView name=StringView())
 
template<typename T >
ast::aFindChild (Object *parentScope, StringView name=StringView())
 
errc_t ast::aFindChildren (Object *parentScope, Class *cls, StringView name, std::vector< Object * > &children)
 
std::vector< Object * > ast::aFindChildren (Object *parentScope, Class *cls=nullptr, StringView name=StringView())
 
void ast::aPrintObject (Object *obj, int indent=0, const ObjectPrintConfig &config=ObjectPrintConfig())
 
void ast::aPrintObjectTree (Object *root, int indent=0)
 
void ast::aPrintObjectTree (Object *root, int indent, const ObjectPrintConfig &config)
 
template<typename T >
bool ast::Object::isOfType () const
 
template<>
double ast::Property::getValue (const void *container)
 

变量

constexpr initial_strong_ref_t ast::initial_strong_ref {}
 

宏定义说明

◆ _AST_IMPL_OBJECT

#define _AST_IMPL_OBJECT ( TYPE)
值:
Class TYPE::staticType;\

◆ aPropertyName

#define aPropertyName ( CLASS,
NAME )
值:
AST_PROPERT_NAME(CLASS, NAME)

◆ AST_OBJECT

#define AST_OBJECT ( TYPE)
值:
static Class staticType;\
static inline Class* StaticType(){return &staticType;}\
Class* getType() const override{return &staticType;} \
static void ClassInit(Class* cls);\

◆ AST_PROPERT

#define AST_PROPERT ( NAME)
值:
static constexpr const char* _prop_##NAME = #NAME;

◆ AST_PROPERT_NAME

#define AST_PROPERT_NAME ( CLASS,
NAME )
值:
CLASS::_prop_##NAME

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
INVALID_ID 

无效对象ID

◆ EValueType

enum class ast::EValueType
strong
枚举值
eBool 

bool类型

eInt 

int类型

eDouble 

double类型

eQuantity 

数量值类型

eString 

std::string类型

eObject 

对象类型

eTimePoint 

时间点类型

eInvalid 

无效类型

函数说明

◆ aAddObject()

AST_UTIL_CAPI uint32_t ast::aAddObject ( Object * object)

获取对象的索引/对象ID

obj 对象指针

返回
对象的索引/对象ID

添加对象到对象管理器

将对象添加到对象管理器中,返回对象的索引/对象ID, 如果对象已存在则返回已存在的索引/对象ID

参数
object对象指针
返回
对象的索引/对象ID

◆ aDeleteObject()

AST_UTIL_CAPI void ast::aDeleteObject ( Object * obj)

删除对象

用于释放对象裸指针对应的内存

警告
不要用于智能指针管理的对象,否则会导致未定义行为
参数
obj对象指针

◆ aFakeGet()

AST_UTIL_API errc_t ast::aFakeGet ( const void * container,
void * value )

模拟获取属性值的函数

参数
container对象指针
value指向属性值的指针
返回
errc_t 错误码

◆ aFakeSet()

AST_UTIL_API errc_t ast::aFakeSet ( void * container,
const void * value )

模拟设置属性值的函数

参数
container对象指针
value指向属性值的指针
返回
errc_t 错误码

◆ aFindChild()

AST_UTIL_API Object * ast::aFindChild ( Object * parentScope,
Class * cls = nullptr,
StringView name = StringView() )

查找对象的子对象

根据父对象、类指针和子对象名查找子对象

参数
parentScope父对象指针
cls类指针,如果为空则匹配所有类型
name子对象名,如果为空则匹配所有名称
返回
子对象指针

◆ aFindChildren() [1/2]

AST_UTIL_API errc_t ast::aFindChildren ( Object * parentScope,
Class * cls,
StringView name,
std::vector< Object * > & children )

查找对象的子对象

根据父对象、类指针和子对象名查找子对象

参数
parentScope父对象指针
cls类指针,如果为空则匹配所有类型
name子对象名,如果为空则匹配所有名称
children输出参数,用于存储子对象指针
返回
错误码

◆ aFindChildren() [2/2]

AST_UTIL_API std::vector< Object * > ast::aFindChildren ( Object * parentScope,
Class * cls = nullptr,
StringView name = StringView() )

查找对象的子对象

根据父对象、类指针和子对象名查找子对象

参数
parentScope父对象指针
cls类指针,如果为空则匹配所有类型
name子对象名,如果为空则匹配所有名称
返回
子对象指针向量

◆ aFindObject()

AST_UTIL_API Object * ast::aFindObject ( Class * cls,
StringView name = StringView() )

查找对象

根据类指针和对象名查找对象

参数
cls类指针,如果为空则匹配所有类型
name对象名,如果为空则匹配所有名称
返回
对象指针

◆ aFindObjects()

AST_UTIL_API std::vector< Object * > ast::aFindObjects ( Class * cls,
StringView name = StringView() )

查找对象

根据类指针和对象名查找对象

参数
cls类指针,如果为空则匹配所有类型
name对象名,如果为空则匹配所有名称
返回
对象指针向量

◆ aGetAllClasses()

AST_UTIL_API const std::unordered_map< std::string, Class * > & ast::aGetAllClasses ( )

获取所有已注册的类

返回所有已注册的类的指针

返回
所有已注册的类的指针

◆ aGetAllClassNames()

AST_UTIL_CAPI void ast::aGetAllClassNames ( std::vector< std::string > & names)

获取所有已注册的类名

names 输出参数,用于存储所有已注册的类名

返回

◆ aGetAllObjects()

AST_UTIL_API std::vector< Object * > ast::aGetAllObjects ( )

获取所有对象

获取所有已添加的对象

返回
所有对象指针向量

◆ aGetAncestorScope()

AST_UTIL_CAPI Object * ast::aGetAncestorScope ( Object * obj,
Class * cls )

获取对象的祖先作用域

obj 对象指针

参数
cls类指针,如果为空则匹配所有类型
返回
祖先作用域指针

◆ aGetClass()

AST_UTIL_CAPI Class * ast::aGetClass ( StringView name)

获取类的元数据

根据类名获取类的元数据

参数
name类名
返回
类的元数据指针

◆ aGetClassDefaultObject() [1/2]

AST_UTIL_API Object * ast::aGetClassDefaultObject ( Class * cls)

根据类指针获取类的默认对象(CDO)

CDO是类的默认构造函数创建的对象,用于存储类的默认属性值等信息,参考了Unreal Engine的设计

参数
cls类指针
返回
类的默认对象指针

◆ aGetClassDefaultObject() [2/2]

AST_UTIL_API Object * ast::aGetClassDefaultObject ( StringView name)

根据类名获取类的默认对象(CDO)

CDO是类的默认构造函数创建的对象,用于存储类的默认属性值等信息,参考了Unreal Engine的设计

参数
name类名
返回
类的默认对象指针

◆ aGetObject()

AST_UTIL_CAPI Object * ast::aGetObject ( uint32_t id)

根据索引获取对象

根据对象的索引获取对象

参数
id对象索引/对象ID
返回
对象指针

◆ aGetObjectCount()

AST_UTIL_CAPI int ast::aGetObjectCount ( )

获取对象管理器中已添加的对象数量

获取对象管理器中已添加的对象数量

返回
对象数量

◆ aGetParentScope()

AST_UTIL_CAPI Object * ast::aGetParentScope ( Object * obj)

获取对象的父作用域

obj 对象指针

返回
父作用域指针

◆ aIsVirtualClass()

AST_UTIL_CAPI bool ast::aIsVirtualClass ( StringView name)

检查类是否为虚类

参数
cls类指针
返回
是否为虚类

◆ aMakeObject()

AST_UTIL_API SharedPtr< Object > ast::aMakeObject ( StringView name,
Object * parentScope = nullptr )

创建对象,返回智能指针

根据类名创建对象

参数
name类名
parentScope父作用域指针
返回
对象智能指针

◆ aNewObject() [1/2]

template<typename T >
T * ast::aNewObject ( Object * parentScope = nullptr)

创建对象,返回裸指针

根据类名创建对象

参数
parentScope父作用域指针
返回
对象指针

◆ aNewObject() [2/2]

AST_UTIL_CAPI Object * ast::aNewObject ( StringView typeName,
Object * parentScope = nullptr )

创建对象,返回裸指针

根据类名创建对象

警告
创建的对象需要手动管理生命周期(手动释放内存)
参数
typeName类名
parentScope父作用域指针
返回
对象指针

◆ aPrintAllObjects()

AST_UTIL_API void ast::aPrintAllObjects ( )

打印所有对象

打印所有已添加的对象,包括对象名称、类型等信息

返回

◆ aPrintObject()

AST_UTIL_API void ast::aPrintObject ( Object * obj,
int indent = 0,
const ObjectPrintConfig & config = ObjectPrintConfig() )

打印对象信息

打印对象的名称、类型、引用计数等信息

参数
obj对象指针
indent缩进级别,默认为0
config配置结构体,默认为数

◆ aPrintObjectTree()

AST_UTIL_API void ast::aPrintObjectTree ( Object * root,
int indent = 0 )

打印对象树的结构

递归打印对象树的结构,包括对象名称、类型等信息

参数
root根对象指针
indent缩进级别,默认为0
config配置结构体,默认为不打印引用计数

◆ aRegisterClass()

AST_UTIL_CAPI void ast::aRegisterClass ( Class * cls,
StringView name = StringView() )

注册类

注册类的元数据,用于后续的反射操作

参数
cls类指针
返回
类的元数据指针

◆ aRemoveAllObjects()

AST_UTIL_CAPI void ast::aRemoveAllObjects ( )

移除所有对象

从对象管理器中移除所有对象,包括子对象

返回

◆ aRemoveObject()

AST_UTIL_CAPI errc_t ast::aRemoveObject ( Object * object)

移除对象

从对象管理器中移除对象,包括子对象

参数
object对象指针
返回
错误码

◆ aResolveObject()

AST_UTIL_API Object * ast::aResolveObject ( StringView value,
Class * cls = nullptr )

解析对象

根据对象路径/名称/表达式解析对象

警告
要求value为对象路径(带有类型名称),或者cls不为空,否则只查找类型对象
参数
value对象路径/名称/表达式
cls对象类型,默认 nullptr 表示不指定类型
返回
解析后的对象指针

◆ aSetParentScope()

AST_UTIL_CAPI errc_t ast::aSetParentScope ( Object * obj,
Object * parentScope )

设置对象的父作用域

obj 对象指针

参数
parentScope父作用域指针
返回
错误码

◆ isOfType()

template<typename T >
bool ast::Object::isOfType ( ) const

判断对象是否为指定类型的实例

参数
T类型参数