cppast/src/refl/template/meta.liquid

66 lines
3.2 KiB
Plaintext
Raw Normal View History

2024-06-20 22:32:20 +08:00
{{ Indent }}template<> struct _Static<{{FullName}},{{MetaName}}> {
2024-06-25 20:26:25 +08:00
{{ Indent }} using T = {{FullName}};
2024-06-20 22:32:20 +08:00
{{ Indent }} consteval static auto __MakeStaticFields() {
{{ Indent }} return std::array{
{{ Indent }} {%- for field in FieldList %}
{{ Indent }} {%- if field.Type == 1 %}
{{ Indent }} refl::StaticMemberField(&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
{{ Indent }} {%- elsif field.Type == 2 %}
2024-06-25 20:26:25 +08:00
{{ Indent }} refl::StaticCtorField((T::{{field.Ref}})nullptr,{{field.Meta}}),
2024-06-21 22:20:13 +08:00
{{ Indent }} {%- elsif field.Type == 3 %}
2024-06-20 22:32:20 +08:00
{{ Indent }} refl::StaticMethodField(&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
2024-06-21 22:20:13 +08:00
{{ Indent }} {%- else %}
{{ Indent }} refl::StaticMethodField((T::{{field.Ref}})&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
2024-06-20 22:32:20 +08:00
{{ Indent }} {%- endif %}
{{ Indent }} {%- endfor %}
{{ Indent }} };
{{ Indent }} };
{{ Indent }}
{{ Indent }} consteval static int Size() {
{{ Indent }} return refl::fetch_meta_size<_Static<T,{{MetaName}}>>();
{{ Indent }} };
{{ Indent }} consteval static int MemberCount() {
{{ Indent }} return {{MemberCount}};
{{ Indent }} };
{{ Indent }} consteval static int CtorCount() {
{{ Indent }} return {{CtorCount}};
{{ Indent }} };
{{ Indent }}};
{{ Indent }}
{{ Indent }}template<> struct _Meta<{{FullName}},{{MetaName}}> : public refl::MetaHelp {
2024-06-25 20:26:25 +08:00
{{ Indent }} using T = {{FullName}};
2024-06-20 22:32:20 +08:00
{{ Indent }} using MyParent = {{ ParentName }};
{{ Indent }} using MyStatic = _Static<T,{{MetaName}}>;
2024-06-25 20:26:25 +08:00
{{ Indent }}{%-if IsMultyMeta %}
2024-06-20 22:32:20 +08:00
{{ Indent }} using MyMetas = class _Multy<T>;
2024-06-25 20:26:25 +08:00
{{ Indent }}{%- endif %}
2024-06-20 22:32:20 +08:00
{{ Indent }} inline static char s_data[MyStatic::Size()]{};
{{ Indent }} static auto __MakeFields() {
{{ Indent }} char* memory = &s_data[0];
{{ Indent }} return std::array{
{{ Indent }} {%- for field in FieldList %}
{{ Indent }} {%- if field.Type == 1 %}
{{ Indent }} MemberField(&T::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}),
{{ Indent }} {%- elsif field.Type == 2 %}
2024-06-25 20:26:25 +08:00
{{ Indent }} CtorField((T::{{field.Ref}})nullptr, memory, {{field.Meta}}),
2024-06-21 22:20:13 +08:00
{{ Indent }} {%- elsif field.Type == 3 %}
2024-06-20 22:32:20 +08:00
{{ Indent }} MethodField(&T::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}),
2024-06-21 22:20:13 +08:00
{{ Indent }} {%- else %}
{{ Indent }} MethodField((T::{{field.Ref}})&T::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}),
2024-06-20 22:32:20 +08:00
{{ Indent }} {%- endif %}
{{ Indent }} {%- endfor %}
{{ Indent }} };
{{ Indent }} };
{{ Indent }}};
2024-06-25 20:26:25 +08:00
{{ Indent }}{%- if MetaType == 1 %}
{{ Indent }}const refl::UClass* _Multy<{{FullName}}>::get_{{ MetaName }}()
2024-06-20 22:32:20 +08:00
{{ Indent }}{
2024-06-25 20:26:25 +08:00
{{ Indent }} static const auto s_cls = refl::UClass_Meta<T, _Meta<T,{{ MetaName }}>>();
2024-06-20 22:32:20 +08:00
{{ Indent }} return &s_cls;
{{ Indent }}};
2024-06-25 20:26:25 +08:00
{{ Indent }}{%- else %}
{{ Indent }}inline const refl::UClass* _Multy<{{FullName}}>::get_{{ MetaName }}()
{{ Indent }}{
{{ Indent }} return &refl::TypeInfo<T>::StaticClass;
{{ Indent }}};
2024-06-20 22:32:20 +08:00
{{ Indent }}{%- endif %}