🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
RTTIAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/SharedPtr.hpp"
25#include "AstUtil/Object.hpp"
26#include "AstUtil/StringView.hpp"
27#include <map>
28
29AST_NAMESPACE_BEGIN
30
36// -----------
37// 类型元信息
38// -----------
39
40
44AST_UTIL_CAPI void aGetAllClassNames(std::vector<std::string>& names);
45
49AST_UTIL_API const std::unordered_map<std::string, Class*>& aGetAllClasses();
50
55AST_UTIL_CAPI Class* aGetClass(StringView name);
56
60AST_UTIL_CAPI bool aIsVirtualClass(StringView name);
61
66AST_UTIL_CAPI void aRegisterClass(Class* cls, StringView name=StringView());
67
72AST_UTIL_API Object* aGetClassDefaultObject(StringView name);
73
78AST_UTIL_API Object* aGetClassDefaultObject(Class* cls);
79
86AST_UTIL_CAPI Object* aNewObject(StringView typeName, Object* parentScope=nullptr);
87
88
93AST_UTIL_CAPI void aDeleteObject(Object* obj);
94
100AST_UTIL_API SharedPtr<Object> aMakeObject(StringView typeName, Object* parentScope=nullptr);
101
102
103
110AST_UTIL_API Object* aResolveObject(StringView value, Class* cls = nullptr);
111
112
113template<typename T>
114T aResolveObject(StringView value)
115{
116 using ObjectType = typename std::decay<typename std::remove_pointer<T>::type>::type;
117 static_assert(has_own_getType<ObjectType>::value, "aResolveObject requires the type to has a AST_OBJECT macro");
118 return static_cast<T>(aResolveObject(value, ObjectType::StaticType()));
119}
120
121// -----------
122// 对象管理
123// -----------
124
129AST_UTIL_CAPI Object* aGetObject(uint32_t id);
130
134// AST_UTIL_CAPI uint32_t aGetObjectID(Object* obj);
135
142AST_UTIL_CAPI uint32_t aAddObject(Object* object);
143
144
149AST_UTIL_CAPI errc_t aRemoveObject(Object* object);
150
154AST_UTIL_CAPI void aRemoveAllObjects();
155
159AST_UTIL_CAPI int aGetObjectCount();
160
161
167AST_UTIL_API std::vector<Object*> aFindObjects(Class* cls, StringView name=StringView());
168
169
175AST_UTIL_API Object* aFindObject(Class* cls, StringView name=StringView());
176
177template<typename T>
178T aFindObject(StringView name=StringView())
179{
180 // @todo: 这里逻辑和aobject_cast<T>的重复了,考虑怎么重构
181 using ObjectType = typename std::decay<typename std::remove_pointer<T>::type>::type;
182 static_assert(has_own_getType<ObjectType>::value, "aFindObject requires the type to has a AST_OBJECT macro");
183 return static_cast<T>(aFindObject(ObjectType::StaticType(), name));
184}
185
190AST_UTIL_CAPI errc_t aSetParentScope(Object* obj, Object* parentScope);
191
192
196AST_UTIL_CAPI Object* aGetParentScope(Object* obj);
197
198
203AST_UTIL_CAPI Object* aGetAncestorScope(Object* obj, Class* cls);
204
205template<typename T>
206T aGetAncestorScope(Object* obj)
207{
208 // @todo: 这里逻辑和aobject_cast<T>的重复了,考虑怎么重构
209 using ObjectType = typename std::decay<typename std::remove_pointer<T>::type>::type;
210 static_assert(has_own_getType<ObjectType>::value, "aGetAncestorScope requires the type to has a AST_OBJECT macro");
211 return static_cast<T>(aGetAncestorScope(obj, ObjectType::StaticType()));
212}
213
217AST_UTIL_API std::vector<Object*> aGetAllObjects();
218
219
223AST_UTIL_API void aPrintAllObjects();
224
225
232AST_UTIL_API Object* aFindChild(Object* parentScope, Class* cls=nullptr, StringView name=StringView());
233
234
235template<typename T>
236T aFindChild(Object* parentScope, StringView name=StringView())
237{
238 // @todo: 这里逻辑和aobject_cast<T>的重复了,考虑怎么重构
239 using ObjectType = typename std::decay<typename std::remove_pointer<T>::type>::type;
240 static_assert(has_own_getType<ObjectType>::value, "aFindChild requires the type to has a AST_OBJECT macro");
241 return static_cast<T>(aFindChild(parentScope, ObjectType::StaticType(), name));
242}
243
251AST_UTIL_API errc_t aFindChildren(Object* parentScope, Class* cls, StringView name, std::vector<Object*>& children);
252
253
260AST_UTIL_API std::vector<Object*> aFindChildren(Object* parentScope, Class* cls=nullptr, StringView name=StringView());
261
264 bool printRefCount = false;
265 bool printWeakRefCount = false;
266};
267
268
274AST_UTIL_API void aPrintObject(Object* obj, int indent=0, const ObjectPrintConfig& config = ObjectPrintConfig());
275
276
282AST_UTIL_API void aPrintObjectTree(Object* root, int indent=0);
283AST_UTIL_API void aPrintObjectTree(Object* root, int indent, const ObjectPrintConfig& config);
284
287AST_NAMESPACE_END
对象基类,继承自该类的对象可以使用运行时类型信息相关功能,实现强弱引用计数、运行时元信息(属性访问、序列化等)等基础功能
定义 Object.hpp:95
Object * aResolveObject(StringView value, Class *cls)
解析对象
定义 RTTIAPI.cpp:94
SharedPtr< Object > aMakeObject(StringView name, Object *parentScope)
创建对象,返回智能指针
定义 RTTIAPI.cpp:88
bool aIsVirtualClass(StringView name)
检查类是否为虚类
定义 RTTIAPI.cpp:49
Object * aFindChild(Object *parentScope, Class *cls, StringView name)
查找对象的子对象
定义 RTTIAPI.cpp:240
Object * aFindObject(Class *cls, StringView name)
查找对象
定义 RTTIAPI.cpp:206
Object * aGetParentScope(Object *obj)
获取对象的父作用域
定义 RTTIAPI.cpp:216
void aPrintObject(Object *obj, int indent, const ObjectPrintConfig &config)
打印对象信息
定义 RTTIAPI.cpp:355
errc_t aRemoveObject(Object *object)
移除对象
定义 RTTIAPI.cpp:185
uint32_t aAddObject(Object *object)
获取对象的索引/对象ID
定义 RTTIAPI.cpp:180
Class * aGetClass(StringView name)
获取类的元数据
定义 RTTIAPI.cpp:44
int aGetObjectCount()
获取对象管理器中已添加的对象数量
定义 RTTIAPI.cpp:195
Object * aGetObject(uint32_t id)
根据索引获取对象
定义 RTTIAPI.cpp:175
void aRegisterClass(Class *cls, StringView name)
注册类
定义 RTTIAPI.cpp:55
Object * aGetAncestorScope(Object *obj, Class *cls)
获取对象的祖先作用域
定义 RTTIAPI.cpp:221
const std::unordered_map< std::string, Class * > & aGetAllClasses()
获取所有已注册的类
定义 RTTIAPI.cpp:39
errc_t aSetParentScope(Object *obj, Object *parentScope)
设置对象的父作用域
定义 RTTIAPI.cpp:211
errc_t aFindChildren(Object *parentScope, Class *cls, StringView name, std::vector< Object * > &children)
查找对象的子对象
定义 RTTIAPI.cpp:292
void aDeleteObject(Object *obj)
删除对象
定义 RTTIAPI.cpp:83
void aGetAllClassNames(std::vector< std::string > &names)
获取所有已注册的类名
定义 RTTIAPI.cpp:34
Object * aGetClassDefaultObject(StringView name)
根据类名获取类的默认对象(CDO)
定义 RTTIAPI.cpp:62
void aPrintAllObjects()
打印所有对象
定义 RTTIAPI.cpp:231
std::vector< Object * > aGetAllObjects()
获取所有对象
定义 RTTIAPI.cpp:226
void aRemoveAllObjects()
移除所有对象
定义 RTTIAPI.cpp:190
void aPrintObjectTree(Object *root, int indent)
打印对象树的结构
定义 RTTIAPI.cpp:386
std::string aFindObjects(const JsonValue &arguments)
查找对象
打印对象树的配置结构体
定义 RTTIAPI.hpp:263