17 struct DefineWrapperNode {
20 DefineWrapperNode* m_next =
nullptr;
22 DefineWrapperNode(std::string name, std::function<
ReflectionObject*()> func) : m_name(std::move(name)),
23 m_func(std::move(func)) {}
26 typedef DefineWrapperNode* WrapperContainer;
33 static unsigned char* SetDefine(std::string&& type, std::function<
ReflectionObject*()>&& func) {
34 if (ReflectionMgr::m_defineWrapper.m_defined ==
nullptr) {
35 ReflectionMgr::m_defineWrapper.m_defined =
new DefineWrapperNode(type, func);
36 ReflectionMgr::m_defineWrapper.m_node = ReflectionMgr::m_defineWrapper.m_defined;
39 auto& src = ReflectionMgr::m_defineWrapper.m_node;
40 auto* new_obj =
new DefineWrapperNode(type, func);
41 src->m_next = new_obj;
42 ReflectionMgr::m_defineWrapper.m_node = new_obj;
43 ReflectionMgr::m_defineWrapper_prev = m_defineWrapper;
47 static void ReleaseDefine() {
48 for (
auto* node = ReflectionMgr::m_defineWrapper.m_defined;;) {
49 if (node ==
nullptr)
break;
50 auto* node_next = node->m_next;
57 WrapperContainer m_defined =
nullptr;
58 WrapperContainer m_node =
nullptr;