cppast/src/refl/template/meta.liquid

56 lines
2.7 KiB
Plaintext
Raw Normal View History

2024-04-26 19:22:14 +08:00
{%- assign NewLine = newline_to_br -%}
{{ Indent2 }}struct {{ Name }}_Static_{{MetaName}} {
{{ Indent2 }} consteval static auto __MakeStaticFields() {
{{ Indent2 }} return std::array{
{{ NewLine }} {%- for field in FieldList -%}
2024-06-13 21:34:13 +08:00
{{ NewLine }} {%- if field.Type == 1 -%}
2024-06-14 22:26:49 +08:00
{{ Indent2 }} refl::StaticMemberField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
2024-06-13 21:34:13 +08:00
{{ NewLine }} {%- elsif field.Type == 2 -%}
{{ Indent2 }} refl::StaticCtorField<{{field.Name}}>({{field.Meta}}),
2024-04-26 19:22:14 +08:00
{{ NewLine }} {%- else -%}
2024-06-14 22:26:49 +08:00
{{ Indent2 }} refl::StaticMethodField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
2024-04-26 19:22:14 +08:00
{{ NewLine }} {%- endif -%}
{{ NewLine }} {%- endfor -%}
{{ Indent2 }} };
{{ Indent2 }} };
{{ NewLine }}
{{ Indent2 }} consteval static int Size() {
{{ Indent2 }} return refl::fetch_meta_size<{{ Name }}_Static_{{MetaName}}>();
{{ Indent2 }} };
2024-06-13 21:34:13 +08:00
{{ Indent2 }} consteval static int MemberCount() {
{{ Indent2 }} return {{MemberCount}};
{{ Indent2 }} };
{{ Indent2 }} consteval static int CtorCount() {
{{ Indent2 }} return {{CtorCount}};
{{ Indent2 }} };
2024-04-26 19:22:14 +08:00
{{ Indent2 }}};
{{ NewLine }}
{{ Indent2 }}struct {{ Name }}_{{MetaName}} : public refl::Meta {
2024-06-14 22:26:49 +08:00
{{ Indent2 }} using MyUClass = refl::UClass_Meta<{{ Name }}, {{ ParentName }}>;
2024-04-26 19:22:14 +08:00
{{ Indent2 }} using MyStatic = {{ Name }}_Static_{{MetaName}};
2024-04-29 14:58:45 +08:00
{{ NewLine }} {%-if IsMultyMeta -%}
{{ Indent2 }} using MyMetas = class {{Name}}_MulytMeta;
{{ NewLine }} {%- endif -%}
2024-04-26 19:22:14 +08:00
{{ Indent2 }} inline static char s_data[MyStatic::Size()]{};
{{ Indent2 }} static auto __MakeFields() {
{{ Indent2 }} char* memory = &s_data[0];
{{ Indent2 }} return std::array{
{{ NewLine }} {%- for field in FieldList -%}
2024-06-13 21:34:13 +08:00
{{ NewLine }} {%- if field.Type == 1 -%}
2024-06-14 22:26:49 +08:00
{{ Indent2 }} MemberField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}),
2024-06-13 21:34:13 +08:00
{{ NewLine }} {%- elsif field.Type == 2 -%}
2024-06-14 22:26:49 +08:00
{{ Indent2 }} CtorField<{{field.Name}}>(memory, {{field.Meta}}),
2024-04-26 19:22:14 +08:00
{{ NewLine }} {%- else -%}
2024-06-14 22:26:49 +08:00
{{ Indent2 }} MethodField(&{{Name}}::{{field.Name}}, FName("{{field.Name}}"), memory, {{field.Meta}}),
2024-04-26 19:22:14 +08:00
{{ NewLine }} {%- endif -%}
{{ NewLine }} {%- endfor -%}
{{ Indent2 }} };
{{ Indent2 }} };
{{ Indent2 }}};
2024-04-29 14:58:45 +08:00
{{ NewLine }}{%- if IsMultyMeta -%}
{{ Indent2 }}const refl::UClass* {{Name}}_MulytMeta::{{ MetaName }}()
{{ Indent2 }}{
{{ Indent2 }} static const auto s_cls = {{ Name }}_{{MetaName}}::MyUClass();
{{ Indent2 }} return &s_cls;
{{ Indent2 }}};
{{ NewLine }}{%- endif -%}