Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[reflection][feat]support non aggregate #721

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions include/ylt/reflection/internal/args_count.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#pragma once

#define YLT_MARCO_EXPAND(...) __VA_ARGS__

#define YLT_ARG_COUNT(...) \
YLT_MARCO_EXPAND(YLT_ARG_COUNT_IMPL( \
0, ##__VA_ARGS__, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, \
113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, \
99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, \
81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, \
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, \
45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, \
27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
9, 8, 7, 6, 5, 4, 3, 2, 1, 0))

#define YLT_ARG_COUNT_IMPL( \
_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, \
_17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, \
_32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, \
_47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, \
_62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, \
_77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, \
_92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, \
_105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, \
_117, _118, _119, _120, _121, _122, _123, _124, N, ...) \
N
7 changes: 7 additions & 0 deletions include/ylt/reflection/internal/common_macro.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once
#include "args_count.hpp"
#define YLT_CONCAT_(l, r) l##r

#define YLT_CONCAT(l, r) YLT_CONCAT_(l, r)

#define CONCAT_MEMBER(t, x) t.x
262 changes: 262 additions & 0 deletions include/ylt/reflection/internal/generate/member_names_macro_gen.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
/*
macro = "#define CON_STR"
with open("member_names_gen.txt", "w", encoding="utf-8") as codefile:
codefile.write(
"\n".join(
[
f"{macro}{i}(element, ...) ADD_VIEW(element) SEPERATOR
YLT_MARCO_EXPAND(CON_STR{i-1}(__VA_ARGS__))" for i in range(2, 127)
]
)
)
*/
#define CON_STR2(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR1(__VA_ARGS__))
#define CON_STR3(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR2(__VA_ARGS__))
#define CON_STR4(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR3(__VA_ARGS__))
#define CON_STR5(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR4(__VA_ARGS__))
#define CON_STR6(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR5(__VA_ARGS__))
#define CON_STR7(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR6(__VA_ARGS__))
#define CON_STR8(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR7(__VA_ARGS__))
#define CON_STR9(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR8(__VA_ARGS__))
#define CON_STR10(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR9(__VA_ARGS__))
#define CON_STR11(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR10(__VA_ARGS__))
#define CON_STR12(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR11(__VA_ARGS__))
#define CON_STR13(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR12(__VA_ARGS__))
#define CON_STR14(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR13(__VA_ARGS__))
#define CON_STR15(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR14(__VA_ARGS__))
#define CON_STR16(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR15(__VA_ARGS__))
#define CON_STR17(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR16(__VA_ARGS__))
#define CON_STR18(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR17(__VA_ARGS__))
#define CON_STR19(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR18(__VA_ARGS__))
#define CON_STR20(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR19(__VA_ARGS__))
#define CON_STR21(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR20(__VA_ARGS__))
#define CON_STR22(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR21(__VA_ARGS__))
#define CON_STR23(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR22(__VA_ARGS__))
#define CON_STR24(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR23(__VA_ARGS__))
#define CON_STR25(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR24(__VA_ARGS__))
#define CON_STR26(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR25(__VA_ARGS__))
#define CON_STR27(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR26(__VA_ARGS__))
#define CON_STR28(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR27(__VA_ARGS__))
#define CON_STR29(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR28(__VA_ARGS__))
#define CON_STR30(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR29(__VA_ARGS__))
#define CON_STR31(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR30(__VA_ARGS__))
#define CON_STR32(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR31(__VA_ARGS__))
#define CON_STR33(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR32(__VA_ARGS__))
#define CON_STR34(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR33(__VA_ARGS__))
#define CON_STR35(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR34(__VA_ARGS__))
#define CON_STR36(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR35(__VA_ARGS__))
#define CON_STR37(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR36(__VA_ARGS__))
#define CON_STR38(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR37(__VA_ARGS__))
#define CON_STR39(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR38(__VA_ARGS__))
#define CON_STR40(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR39(__VA_ARGS__))
#define CON_STR41(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR40(__VA_ARGS__))
#define CON_STR42(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR41(__VA_ARGS__))
#define CON_STR43(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR42(__VA_ARGS__))
#define CON_STR44(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR43(__VA_ARGS__))
#define CON_STR45(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR44(__VA_ARGS__))
#define CON_STR46(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR45(__VA_ARGS__))
#define CON_STR47(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR46(__VA_ARGS__))
#define CON_STR48(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR47(__VA_ARGS__))
#define CON_STR49(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR48(__VA_ARGS__))
#define CON_STR50(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR49(__VA_ARGS__))
#define CON_STR51(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR50(__VA_ARGS__))
#define CON_STR52(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR51(__VA_ARGS__))
#define CON_STR53(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR52(__VA_ARGS__))
#define CON_STR54(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR53(__VA_ARGS__))
#define CON_STR55(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR54(__VA_ARGS__))
#define CON_STR56(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR55(__VA_ARGS__))
#define CON_STR57(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR56(__VA_ARGS__))
#define CON_STR58(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR57(__VA_ARGS__))
#define CON_STR59(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR58(__VA_ARGS__))
#define CON_STR60(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR59(__VA_ARGS__))
#define CON_STR61(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR60(__VA_ARGS__))
#define CON_STR62(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR61(__VA_ARGS__))
#define CON_STR63(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR62(__VA_ARGS__))
#define CON_STR64(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR63(__VA_ARGS__))
#define CON_STR65(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR64(__VA_ARGS__))
#define CON_STR66(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR65(__VA_ARGS__))
#define CON_STR67(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR66(__VA_ARGS__))
#define CON_STR68(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR67(__VA_ARGS__))
#define CON_STR69(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR68(__VA_ARGS__))
#define CON_STR70(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR69(__VA_ARGS__))
#define CON_STR71(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR70(__VA_ARGS__))
#define CON_STR72(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR71(__VA_ARGS__))
#define CON_STR73(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR72(__VA_ARGS__))
#define CON_STR74(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR73(__VA_ARGS__))
#define CON_STR75(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR74(__VA_ARGS__))
#define CON_STR76(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR75(__VA_ARGS__))
#define CON_STR77(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR76(__VA_ARGS__))
#define CON_STR78(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR77(__VA_ARGS__))
#define CON_STR79(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR78(__VA_ARGS__))
#define CON_STR80(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR79(__VA_ARGS__))
#define CON_STR81(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR80(__VA_ARGS__))
#define CON_STR82(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR81(__VA_ARGS__))
#define CON_STR83(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR82(__VA_ARGS__))
#define CON_STR84(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR83(__VA_ARGS__))
#define CON_STR85(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR84(__VA_ARGS__))
#define CON_STR86(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR85(__VA_ARGS__))
#define CON_STR87(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR86(__VA_ARGS__))
#define CON_STR88(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR87(__VA_ARGS__))
#define CON_STR89(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR88(__VA_ARGS__))
#define CON_STR90(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR89(__VA_ARGS__))
#define CON_STR91(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR90(__VA_ARGS__))
#define CON_STR92(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR91(__VA_ARGS__))
#define CON_STR93(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR92(__VA_ARGS__))
#define CON_STR94(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR93(__VA_ARGS__))
#define CON_STR95(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR94(__VA_ARGS__))
#define CON_STR96(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR95(__VA_ARGS__))
#define CON_STR97(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR96(__VA_ARGS__))
#define CON_STR98(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR97(__VA_ARGS__))
#define CON_STR99(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR98(__VA_ARGS__))
#define CON_STR100(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR99(__VA_ARGS__))
#define CON_STR101(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR100(__VA_ARGS__))
#define CON_STR102(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR101(__VA_ARGS__))
#define CON_STR103(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR102(__VA_ARGS__))
#define CON_STR104(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR103(__VA_ARGS__))
#define CON_STR105(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR104(__VA_ARGS__))
#define CON_STR106(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR105(__VA_ARGS__))
#define CON_STR107(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR106(__VA_ARGS__))
#define CON_STR108(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR107(__VA_ARGS__))
#define CON_STR109(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR108(__VA_ARGS__))
#define CON_STR110(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR109(__VA_ARGS__))
#define CON_STR111(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR110(__VA_ARGS__))
#define CON_STR112(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR111(__VA_ARGS__))
#define CON_STR113(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR112(__VA_ARGS__))
#define CON_STR114(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR113(__VA_ARGS__))
#define CON_STR115(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR114(__VA_ARGS__))
#define CON_STR116(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR115(__VA_ARGS__))
#define CON_STR117(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR116(__VA_ARGS__))
#define CON_STR118(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR117(__VA_ARGS__))
#define CON_STR119(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR118(__VA_ARGS__))
#define CON_STR120(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR119(__VA_ARGS__))
#define CON_STR121(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR120(__VA_ARGS__))
#define CON_STR122(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR121(__VA_ARGS__))
#define CON_STR123(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR122(__VA_ARGS__))
#define CON_STR124(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR123(__VA_ARGS__))
#define CON_STR125(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR124(__VA_ARGS__))
#define CON_STR126(element, ...) \
ADD_VIEW(element) SEPERATOR YLT_MARCO_EXPAND(CON_STR125(__VA_ARGS__))
Loading
Loading