From 76c1ee6db505e91d2fef2d4e3abe6837355e9a4b Mon Sep 17 00:00:00 2001 From: qicosmos Date: Fri, 19 Jul 2024 14:08:53 +0800 Subject: [PATCH] support YLT_REFL --- .../internal/foreach_user_macro.hpp | 11 - .../generate/foreach_user_macro_gen.hpp | 260 ------------------ src/reflection/tests/test_reflection.cpp | 12 +- 3 files changed, 9 insertions(+), 274 deletions(-) delete mode 100644 include/ylt/reflection/internal/foreach_user_macro.hpp delete mode 100644 include/ylt/reflection/internal/generate/foreach_user_macro_gen.hpp diff --git a/include/ylt/reflection/internal/foreach_user_macro.hpp b/include/ylt/reflection/internal/foreach_user_macro.hpp deleted file mode 100644 index af8563988..000000000 --- a/include/ylt/reflection/internal/foreach_user_macro.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "common_macro.hpp" - -#define YLT_CALL0(f, o) -#define YLT_CALL1(f, o, _1) f(CONCAT_MEMBER(o, _1)); - -#include "generate/foreach_user_macro_gen.hpp" - -#define YLT_FOREACH_(fun, funarg, ...) \ - YLT_CONCAT(YLT_CALL, YLT_ARG_COUNT(__VA_ARGS__))(fun, funarg, __VA_ARGS__) -#define YLT_FOREACH(fun, funarg, ...) YLT_FOREACH_(fun, funarg, __VA_ARGS__) diff --git a/include/ylt/reflection/internal/generate/foreach_user_macro_gen.hpp b/include/ylt/reflection/internal/generate/foreach_user_macro_gen.hpp deleted file mode 100644 index 052854f86..000000000 --- a/include/ylt/reflection/internal/generate/foreach_user_macro_gen.hpp +++ /dev/null @@ -1,260 +0,0 @@ -/* -macro = "#define YLT_CALL" -with open("generated_foreach.txt", "w", encoding="utf-8") as codefile: - codefile.write( - "\n".join( - [ - f"{macro}{i}(f,o,_1, ...) YLT_CALL1(f,o,_1) -YLT_CALL{i-1}(f,o,__VA_ARGS__)" for i in range(2, 126) - ] - ) - ) -*/ -#define YLT_CALL2(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL1(f, o, __VA_ARGS__) -#define YLT_CALL3(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL2(f, o, __VA_ARGS__) -#define YLT_CALL4(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL3(f, o, __VA_ARGS__) -#define YLT_CALL5(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL4(f, o, __VA_ARGS__) -#define YLT_CALL6(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL5(f, o, __VA_ARGS__) -#define YLT_CALL7(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL6(f, o, __VA_ARGS__) -#define YLT_CALL8(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL7(f, o, __VA_ARGS__) -#define YLT_CALL9(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL8(f, o, __VA_ARGS__) -#define YLT_CALL10(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL9(f, o, __VA_ARGS__) -#define YLT_CALL11(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL10(f, o, __VA_ARGS__) -#define YLT_CALL12(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL11(f, o, __VA_ARGS__) -#define YLT_CALL13(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL12(f, o, __VA_ARGS__) -#define YLT_CALL14(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL13(f, o, __VA_ARGS__) -#define YLT_CALL15(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL14(f, o, __VA_ARGS__) -#define YLT_CALL16(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL15(f, o, __VA_ARGS__) -#define YLT_CALL17(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL16(f, o, __VA_ARGS__) -#define YLT_CALL18(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL17(f, o, __VA_ARGS__) -#define YLT_CALL19(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL18(f, o, __VA_ARGS__) -#define YLT_CALL20(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL19(f, o, __VA_ARGS__) -#define YLT_CALL21(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL20(f, o, __VA_ARGS__) -#define YLT_CALL22(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL21(f, o, __VA_ARGS__) -#define YLT_CALL23(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL22(f, o, __VA_ARGS__) -#define YLT_CALL24(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL23(f, o, __VA_ARGS__) -#define YLT_CALL25(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL24(f, o, __VA_ARGS__) -#define YLT_CALL26(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL25(f, o, __VA_ARGS__) -#define YLT_CALL27(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL26(f, o, __VA_ARGS__) -#define YLT_CALL28(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL27(f, o, __VA_ARGS__) -#define YLT_CALL29(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL28(f, o, __VA_ARGS__) -#define YLT_CALL30(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL29(f, o, __VA_ARGS__) -#define YLT_CALL31(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL30(f, o, __VA_ARGS__) -#define YLT_CALL32(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL31(f, o, __VA_ARGS__) -#define YLT_CALL33(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL32(f, o, __VA_ARGS__) -#define YLT_CALL34(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL33(f, o, __VA_ARGS__) -#define YLT_CALL35(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL34(f, o, __VA_ARGS__) -#define YLT_CALL36(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL35(f, o, __VA_ARGS__) -#define YLT_CALL37(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL36(f, o, __VA_ARGS__) -#define YLT_CALL38(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL37(f, o, __VA_ARGS__) -#define YLT_CALL39(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL38(f, o, __VA_ARGS__) -#define YLT_CALL40(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL39(f, o, __VA_ARGS__) -#define YLT_CALL41(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL40(f, o, __VA_ARGS__) -#define YLT_CALL42(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL41(f, o, __VA_ARGS__) -#define YLT_CALL43(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL42(f, o, __VA_ARGS__) -#define YLT_CALL44(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL43(f, o, __VA_ARGS__) -#define YLT_CALL45(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL44(f, o, __VA_ARGS__) -#define YLT_CALL46(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL45(f, o, __VA_ARGS__) -#define YLT_CALL47(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL46(f, o, __VA_ARGS__) -#define YLT_CALL48(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL47(f, o, __VA_ARGS__) -#define YLT_CALL49(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL48(f, o, __VA_ARGS__) -#define YLT_CALL50(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL49(f, o, __VA_ARGS__) -#define YLT_CALL51(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL50(f, o, __VA_ARGS__) -#define YLT_CALL52(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL51(f, o, __VA_ARGS__) -#define YLT_CALL53(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL52(f, o, __VA_ARGS__) -#define YLT_CALL54(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL53(f, o, __VA_ARGS__) -#define YLT_CALL55(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL54(f, o, __VA_ARGS__) -#define YLT_CALL56(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL55(f, o, __VA_ARGS__) -#define YLT_CALL57(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL56(f, o, __VA_ARGS__) -#define YLT_CALL58(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL57(f, o, __VA_ARGS__) -#define YLT_CALL59(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL58(f, o, __VA_ARGS__) -#define YLT_CALL60(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL59(f, o, __VA_ARGS__) -#define YLT_CALL61(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL60(f, o, __VA_ARGS__) -#define YLT_CALL62(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL61(f, o, __VA_ARGS__) -#define YLT_CALL63(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL62(f, o, __VA_ARGS__) -#define YLT_CALL64(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL63(f, o, __VA_ARGS__) -#define YLT_CALL65(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL64(f, o, __VA_ARGS__) -#define YLT_CALL66(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL65(f, o, __VA_ARGS__) -#define YLT_CALL67(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL66(f, o, __VA_ARGS__) -#define YLT_CALL68(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL67(f, o, __VA_ARGS__) -#define YLT_CALL69(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL68(f, o, __VA_ARGS__) -#define YLT_CALL70(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL69(f, o, __VA_ARGS__) -#define YLT_CALL71(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL70(f, o, __VA_ARGS__) -#define YLT_CALL72(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL71(f, o, __VA_ARGS__) -#define YLT_CALL73(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL72(f, o, __VA_ARGS__) -#define YLT_CALL74(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL73(f, o, __VA_ARGS__) -#define YLT_CALL75(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL74(f, o, __VA_ARGS__) -#define YLT_CALL76(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL75(f, o, __VA_ARGS__) -#define YLT_CALL77(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL76(f, o, __VA_ARGS__) -#define YLT_CALL78(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL77(f, o, __VA_ARGS__) -#define YLT_CALL79(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL78(f, o, __VA_ARGS__) -#define YLT_CALL80(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL79(f, o, __VA_ARGS__) -#define YLT_CALL81(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL80(f, o, __VA_ARGS__) -#define YLT_CALL82(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL81(f, o, __VA_ARGS__) -#define YLT_CALL83(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL82(f, o, __VA_ARGS__) -#define YLT_CALL84(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL83(f, o, __VA_ARGS__) -#define YLT_CALL85(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL84(f, o, __VA_ARGS__) -#define YLT_CALL86(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL85(f, o, __VA_ARGS__) -#define YLT_CALL87(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL86(f, o, __VA_ARGS__) -#define YLT_CALL88(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL87(f, o, __VA_ARGS__) -#define YLT_CALL89(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL88(f, o, __VA_ARGS__) -#define YLT_CALL90(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL89(f, o, __VA_ARGS__) -#define YLT_CALL91(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL90(f, o, __VA_ARGS__) -#define YLT_CALL92(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL91(f, o, __VA_ARGS__) -#define YLT_CALL93(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL92(f, o, __VA_ARGS__) -#define YLT_CALL94(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL93(f, o, __VA_ARGS__) -#define YLT_CALL95(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL94(f, o, __VA_ARGS__) -#define YLT_CALL96(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL95(f, o, __VA_ARGS__) -#define YLT_CALL97(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL96(f, o, __VA_ARGS__) -#define YLT_CALL98(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL97(f, o, __VA_ARGS__) -#define YLT_CALL99(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL98(f, o, __VA_ARGS__) -#define YLT_CALL100(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL99(f, o, __VA_ARGS__) -#define YLT_CALL101(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL100(f, o, __VA_ARGS__) -#define YLT_CALL102(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL101(f, o, __VA_ARGS__) -#define YLT_CALL103(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL102(f, o, __VA_ARGS__) -#define YLT_CALL104(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL103(f, o, __VA_ARGS__) -#define YLT_CALL105(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL104(f, o, __VA_ARGS__) -#define YLT_CALL106(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL105(f, o, __VA_ARGS__) -#define YLT_CALL107(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL106(f, o, __VA_ARGS__) -#define YLT_CALL108(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL107(f, o, __VA_ARGS__) -#define YLT_CALL109(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL108(f, o, __VA_ARGS__) -#define YLT_CALL110(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL109(f, o, __VA_ARGS__) -#define YLT_CALL111(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL110(f, o, __VA_ARGS__) -#define YLT_CALL112(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL111(f, o, __VA_ARGS__) -#define YLT_CALL113(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL112(f, o, __VA_ARGS__) -#define YLT_CALL114(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL113(f, o, __VA_ARGS__) -#define YLT_CALL115(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL114(f, o, __VA_ARGS__) -#define YLT_CALL116(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL115(f, o, __VA_ARGS__) -#define YLT_CALL117(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL116(f, o, __VA_ARGS__) -#define YLT_CALL118(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL117(f, o, __VA_ARGS__) -#define YLT_CALL119(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL118(f, o, __VA_ARGS__) -#define YLT_CALL120(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL119(f, o, __VA_ARGS__) -#define YLT_CALL121(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL120(f, o, __VA_ARGS__) -#define YLT_CALL122(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL121(f, o, __VA_ARGS__) -#define YLT_CALL123(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL122(f, o, __VA_ARGS__) -#define YLT_CALL124(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL123(f, o, __VA_ARGS__) -#define YLT_CALL125(f, o, _1, ...) \ - YLT_CALL1(f, o, _1) YLT_CALL124(f, o, __VA_ARGS__) diff --git a/src/reflection/tests/test_reflection.cpp b/src/reflection/tests/test_reflection.cpp index ed0e2191b..7dbf5de1d 100644 --- a/src/reflection/tests/test_reflection.cpp +++ b/src/reflection/tests/test_reflection.cpp @@ -82,8 +82,10 @@ void test_pt() { static_assert(y == 4); CHECK(y == 4); +#if __has_include() constexpr auto x = get<"x"_ylts>(pt); static_assert(x == 2); +#endif } TEST_CASE("test member value") { @@ -115,11 +117,13 @@ TEST_CASE("test member value") { auto& age1 = get(p, "age"); CHECK(age1 == 6); +#if __has_include() auto& age2 = get<"age"_ylts>(p); CHECK(age2 == 6); auto& var1 = get<"str"_ylts>(p); CHECK(var1 == "hello reflection"); +#endif test_pt(); @@ -173,14 +177,16 @@ TEST_CASE("test member value") { constexpr std::string_view name2 = name_of(2); CHECK(name2 == "str"); +#if __has_include() constexpr size_t idx = index_of(); CHECK(idx == 2); - constexpr size_t idx1 = index_of("str"); - CHECK(idx1 == 2); - constexpr size_t idx2 = index_of(); CHECK(idx2 == 4); +#endif + + constexpr size_t idx1 = index_of("str"); + CHECK(idx1 == 2); size_t idx3 = index_of("no_such"); CHECK(idx3 == 4);