From 587bb90e23858b3567245b04a7ef91a3df50f4ba Mon Sep 17 00:00:00 2001 From: saipubw Date: Tue, 14 Jan 2025 17:21:53 +0800 Subject: [PATCH] [struct_pack] refact marco (#878) --- include/ylt/coro_rpc/impl/errno.h | 2 +- .../reflection/internal/arg_list_macro.hpp | 4 +- .../ylt/reflection/internal/args_count.hpp | 55 - .../ylt/reflection/internal/common_macro.hpp | 1 - .../internal/generate/arg_list_macro_gen.hpp | 582 +++--- .../{ => internal/generate}/member_macro.hpp | 29 +- include/ylt/reflection/member_ptr.hpp | 17 +- include/ylt/struct_pack/calculate_size.hpp | 2 +- include/ylt/struct_pack/foreach_macro.h | 8 +- include/ylt/struct_pack/packer.hpp | 2 +- include/ylt/struct_pack/reflection.hpp | 1820 +---------------- include/ylt/struct_pack/unpacker.hpp | 4 +- src/struct_pack/examples/derived_class.cpp | 14 +- .../examples/non_aggregated_type.cpp | 11 +- src/struct_pack/tests/test_derived.cpp | 18 +- src/struct_pack/tests/test_derived.hpp | 18 +- src/struct_pack/tests/test_many_members.cpp | 7 +- .../tests/test_non_aggregated_type.cpp | 14 +- src/struct_pack/tests/test_struct.hpp | 2 +- .../docs/en/struct_pack/struct_pack_intro.md | 30 +- .../docs/en/struct_pack/struct_pack_tips.md | 20 + .../en/struct_pack/struct_pack_type_system.md | 8 +- .../docs/zh/struct_pack/struct_pack_intro.md | 27 +- .../docs/zh/struct_pack/struct_pack_tips.md | 23 +- .../zh/struct_pack/struct_pack_type_system.md | 8 +- 25 files changed, 507 insertions(+), 2219 deletions(-) delete mode 100644 include/ylt/reflection/internal/args_count.hpp rename include/ylt/reflection/{ => internal/generate}/member_macro.hpp (99%) diff --git a/include/ylt/coro_rpc/impl/errno.h b/include/ylt/coro_rpc/impl/errno.h index 2fd4dabac..a67e814d7 100644 --- a/include/ylt/coro_rpc/impl/errno.h +++ b/include/ylt/coro_rpc/impl/errno.h @@ -115,6 +115,6 @@ struct rpc_error { const uint16_t& val() const { return *(uint16_t*)&(code.ec); } constexpr operator bool() const noexcept { return code; } }; -STRUCT_PACK_REFL(rpc_error, val(), msg); +YLT_REFL(rpc_error, val(), msg); }; // namespace coro_rpc \ No newline at end of file diff --git a/include/ylt/reflection/internal/arg_list_macro.hpp b/include/ylt/reflection/internal/arg_list_macro.hpp index d819ba571..d93661ddf 100644 --- a/include/ylt/reflection/internal/arg_list_macro.hpp +++ b/include/ylt/reflection/internal/arg_list_macro.hpp @@ -1,6 +1,8 @@ #pragma once #include "common_macro.hpp" +#define YLT_MACRO_EXPAND(...) __VA_ARGS__ + #define WRAP_ARGS0(w, o) #define WRAP_ARGS1(w, o, _1) w(o, _1) #include "generate/arg_list_macro_gen.hpp" @@ -8,4 +10,4 @@ #define WRAP_ARGS_(w, object, ...) \ YLT_CONCAT(WRAP_ARGS, YLT_ARG_COUNT(__VA_ARGS__)) \ (w, object, ##__VA_ARGS__) -#define WRAP_ARGS(w, object, ...) WRAP_ARGS_(w, object, ##__VA_ARGS__) \ No newline at end of file +#define WRAP_ARGS(w, object, ...) WRAP_ARGS_(w, object, ##__VA_ARGS__) diff --git a/include/ylt/reflection/internal/args_count.hpp b/include/ylt/reflection/internal/args_count.hpp deleted file mode 100644 index 69d7a0901..000000000 --- a/include/ylt/reflection/internal/args_count.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#define YLT_MACRO_EXPAND(...) __VA_ARGS__ - -#ifdef _MSC_VER // Microsoft compilers - -#define __NARGS( \ - _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, _125, N, ...) \ - N -#define NARGS_1(...) \ - YLT_MACRO_EXPAND(__NARGS( \ - __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 AUGMENTER(...) unused, __VA_ARGS__ -#define YLT_ARG_COUNT(...) NARGS_1(AUGMENTER(__VA_ARGS__)) - -#else // Others - -#define YLT_ARG_COUNT(...) \ - __NARGS(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 __NARGS( \ - _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 - -#endif diff --git a/include/ylt/reflection/internal/common_macro.hpp b/include/ylt/reflection/internal/common_macro.hpp index df7f0032a..0583ba39b 100644 --- a/include/ylt/reflection/internal/common_macro.hpp +++ b/include/ylt/reflection/internal/common_macro.hpp @@ -1,5 +1,4 @@ #pragma once -#include "args_count.hpp" #define YLT_CONCAT_(l, r) l##r #define YLT_CONCAT(l, r) YLT_CONCAT_(l, r) diff --git a/include/ylt/reflection/internal/generate/arg_list_macro_gen.hpp b/include/ylt/reflection/internal/generate/arg_list_macro_gen.hpp index 7c9186f00..bf66a5155 100644 --- a/include/ylt/reflection/internal/generate/arg_list_macro_gen.hpp +++ b/include/ylt/reflection/internal/generate/arg_list_macro_gen.hpp @@ -1,260 +1,342 @@ +// clang-format off + /*The following boilerplate code was generated using a Python script: +max_fields = 124 macro = "#define WRAP_ARGS" with open("generated_args.txt", "w", encoding="utf-8") as codefile: + codefile.write("#ifdef _MSC_VER // Microsoft compilers\n\n") + codefile.write("#define __NARGS(") + codefile.write( + ",".join(['_{}'.format(num) for num in range(1, max_fields+2)]) + ) + codefile.write(", N, ...) N\n") + codefile.write("#define NARGS_1(...) YLT_MACRO_EXPAND(__NARGS(__VA_ARGS__,") + codefile.write( + ",".join(['{}'.format(num) for num in range(max_fields,-1,-1)]) + ) + codefile.write("))\n") + codefile.write("#define AUGMENTER(...) unused, __VA_ARGS__\n") + codefile.write("#define YLT_ARG_COUNT(...) NARGS_1(AUGMENTER(__VA_ARGS__))\n\n") + codefile.write("#else // Others\n\n") + codefile.write("#define YLT_ARG_COUNT(...) __NARGS(0, ##__VA_ARGS__,") + codefile.write( + ",".join(['{}'.format(num) for num in range(max_fields,-1,-1)]) + ) + codefile.write(")\n") + codefile.write("#define __NARGS(") + codefile.write( + ",".join(['_{}'.format(num) for num in range(0,max_fields+1)]) + ) + codefile.write(", N, ...) N\n") + codefile.write("#endif\n\n") + codefile.write( + "\n".join( + [ + f"{macro}{i}(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS{i-1}(w,o,__VA_ARGS__))" for i in range(2, 126) + ] + ) + ) +with open("generated_args.txt", "w", encoding="utf-8") as codefile: + codefile.write("#ifdef _MSC_VER // Microsoft compilers\n\n") + codefile.write("#define __NARGS(\n") + codefile.write( + ",".join(['_{}'.format(num) for num in range(1, max_fields+2)]) + ) + codefile.write(", N, ...) N\n") + codefile.write("#define NARGS_1(...) YLT_MACRO_EXPAND(__NARGS(__VA_ARGS__,") + codefile.write( + ",".join(['{}'.format(num) for num in range(max_fields,-1,-1)]) + ) + codefile.write("))\n") + codefile.write("#define AUGMENTER(...) unused, __VA_ARGS__\n") + codefile.write("#define YLT_ARG_COUNT(...) NARGS_1(AUGMENTER(__VA_ARGS__))\n\n") + codefile.write("#else // Others\n\n") + codefile.write("#define YLT_ARG_COUNT(...) __NARGS(0, ##__VA_ARGS__,") + codefile.write( + ",".join(['{}'.format(num) for num in range(max_fields,-1,-1)]) + ) + codefile.write(")\n") + codefile.write("#define __NARGS(") + codefile.write( + ",".join(['_{}'.format(num) for num in range(0,max_fields+1)]) + ) + codefile.write(", N, ...) N\n") + codefile.write("#endif\n\n") codefile.write( "\n".join( [ - f"{macro}{i}(w,o,_1, ...) w(o, _1), -YLT_MACRO_EXPAND(WRAP_ARGS{i-1}(w,o,__VA_ARGS__))" for i in range(2, 126) + f"{macro}{i}(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS{i-1}(w,o,__VA_ARGS__))" for i in range(2, 126) ] ) ) */ -#define WRAP_ARGS2(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS1(w, o, __VA_ARGS__)) -#define WRAP_ARGS3(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS2(w, o, __VA_ARGS__)) -#define WRAP_ARGS4(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS3(w, o, __VA_ARGS__)) -#define WRAP_ARGS5(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS4(w, o, __VA_ARGS__)) -#define WRAP_ARGS6(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS5(w, o, __VA_ARGS__)) -#define WRAP_ARGS7(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS6(w, o, __VA_ARGS__)) -#define WRAP_ARGS8(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS7(w, o, __VA_ARGS__)) -#define WRAP_ARGS9(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS8(w, o, __VA_ARGS__)) -#define WRAP_ARGS10(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS9(w, o, __VA_ARGS__)) -#define WRAP_ARGS11(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS10(w, o, __VA_ARGS__)) -#define WRAP_ARGS12(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS11(w, o, __VA_ARGS__)) -#define WRAP_ARGS13(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS12(w, o, __VA_ARGS__)) -#define WRAP_ARGS14(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS13(w, o, __VA_ARGS__)) -#define WRAP_ARGS15(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS14(w, o, __VA_ARGS__)) -#define WRAP_ARGS16(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS15(w, o, __VA_ARGS__)) -#define WRAP_ARGS17(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS16(w, o, __VA_ARGS__)) -#define WRAP_ARGS18(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS17(w, o, __VA_ARGS__)) -#define WRAP_ARGS19(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS18(w, o, __VA_ARGS__)) -#define WRAP_ARGS20(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS19(w, o, __VA_ARGS__)) -#define WRAP_ARGS21(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS20(w, o, __VA_ARGS__)) -#define WRAP_ARGS22(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS21(w, o, __VA_ARGS__)) -#define WRAP_ARGS23(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS22(w, o, __VA_ARGS__)) -#define WRAP_ARGS24(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS23(w, o, __VA_ARGS__)) -#define WRAP_ARGS25(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS24(w, o, __VA_ARGS__)) -#define WRAP_ARGS26(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS25(w, o, __VA_ARGS__)) -#define WRAP_ARGS27(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS26(w, o, __VA_ARGS__)) -#define WRAP_ARGS28(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS27(w, o, __VA_ARGS__)) -#define WRAP_ARGS29(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS28(w, o, __VA_ARGS__)) -#define WRAP_ARGS30(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS29(w, o, __VA_ARGS__)) -#define WRAP_ARGS31(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS30(w, o, __VA_ARGS__)) -#define WRAP_ARGS32(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS31(w, o, __VA_ARGS__)) -#define WRAP_ARGS33(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS32(w, o, __VA_ARGS__)) -#define WRAP_ARGS34(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS33(w, o, __VA_ARGS__)) -#define WRAP_ARGS35(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS34(w, o, __VA_ARGS__)) -#define WRAP_ARGS36(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS35(w, o, __VA_ARGS__)) -#define WRAP_ARGS37(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS36(w, o, __VA_ARGS__)) -#define WRAP_ARGS38(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS37(w, o, __VA_ARGS__)) -#define WRAP_ARGS39(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS38(w, o, __VA_ARGS__)) -#define WRAP_ARGS40(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS39(w, o, __VA_ARGS__)) -#define WRAP_ARGS41(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS40(w, o, __VA_ARGS__)) -#define WRAP_ARGS42(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS41(w, o, __VA_ARGS__)) -#define WRAP_ARGS43(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS42(w, o, __VA_ARGS__)) -#define WRAP_ARGS44(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS43(w, o, __VA_ARGS__)) -#define WRAP_ARGS45(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS44(w, o, __VA_ARGS__)) -#define WRAP_ARGS46(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS45(w, o, __VA_ARGS__)) -#define WRAP_ARGS47(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS46(w, o, __VA_ARGS__)) -#define WRAP_ARGS48(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS47(w, o, __VA_ARGS__)) -#define WRAP_ARGS49(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS48(w, o, __VA_ARGS__)) -#define WRAP_ARGS50(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS49(w, o, __VA_ARGS__)) -#define WRAP_ARGS51(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS50(w, o, __VA_ARGS__)) -#define WRAP_ARGS52(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS51(w, o, __VA_ARGS__)) -#define WRAP_ARGS53(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS52(w, o, __VA_ARGS__)) -#define WRAP_ARGS54(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS53(w, o, __VA_ARGS__)) -#define WRAP_ARGS55(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS54(w, o, __VA_ARGS__)) -#define WRAP_ARGS56(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS55(w, o, __VA_ARGS__)) -#define WRAP_ARGS57(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS56(w, o, __VA_ARGS__)) -#define WRAP_ARGS58(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS57(w, o, __VA_ARGS__)) -#define WRAP_ARGS59(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS58(w, o, __VA_ARGS__)) -#define WRAP_ARGS60(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS59(w, o, __VA_ARGS__)) -#define WRAP_ARGS61(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS60(w, o, __VA_ARGS__)) -#define WRAP_ARGS62(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS61(w, o, __VA_ARGS__)) -#define WRAP_ARGS63(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS62(w, o, __VA_ARGS__)) -#define WRAP_ARGS64(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS63(w, o, __VA_ARGS__)) -#define WRAP_ARGS65(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS64(w, o, __VA_ARGS__)) -#define WRAP_ARGS66(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS65(w, o, __VA_ARGS__)) -#define WRAP_ARGS67(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS66(w, o, __VA_ARGS__)) -#define WRAP_ARGS68(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS67(w, o, __VA_ARGS__)) -#define WRAP_ARGS69(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS68(w, o, __VA_ARGS__)) -#define WRAP_ARGS70(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS69(w, o, __VA_ARGS__)) -#define WRAP_ARGS71(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS70(w, o, __VA_ARGS__)) -#define WRAP_ARGS72(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS71(w, o, __VA_ARGS__)) -#define WRAP_ARGS73(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS72(w, o, __VA_ARGS__)) -#define WRAP_ARGS74(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS73(w, o, __VA_ARGS__)) -#define WRAP_ARGS75(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS74(w, o, __VA_ARGS__)) -#define WRAP_ARGS76(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS75(w, o, __VA_ARGS__)) -#define WRAP_ARGS77(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS76(w, o, __VA_ARGS__)) -#define WRAP_ARGS78(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS77(w, o, __VA_ARGS__)) -#define WRAP_ARGS79(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS78(w, o, __VA_ARGS__)) -#define WRAP_ARGS80(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS79(w, o, __VA_ARGS__)) -#define WRAP_ARGS81(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS80(w, o, __VA_ARGS__)) -#define WRAP_ARGS82(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS81(w, o, __VA_ARGS__)) -#define WRAP_ARGS83(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS82(w, o, __VA_ARGS__)) -#define WRAP_ARGS84(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS83(w, o, __VA_ARGS__)) -#define WRAP_ARGS85(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS84(w, o, __VA_ARGS__)) -#define WRAP_ARGS86(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS85(w, o, __VA_ARGS__)) -#define WRAP_ARGS87(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS86(w, o, __VA_ARGS__)) -#define WRAP_ARGS88(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS87(w, o, __VA_ARGS__)) -#define WRAP_ARGS89(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS88(w, o, __VA_ARGS__)) -#define WRAP_ARGS90(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS89(w, o, __VA_ARGS__)) -#define WRAP_ARGS91(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS90(w, o, __VA_ARGS__)) -#define WRAP_ARGS92(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS91(w, o, __VA_ARGS__)) -#define WRAP_ARGS93(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS92(w, o, __VA_ARGS__)) -#define WRAP_ARGS94(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS93(w, o, __VA_ARGS__)) -#define WRAP_ARGS95(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS94(w, o, __VA_ARGS__)) -#define WRAP_ARGS96(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS95(w, o, __VA_ARGS__)) -#define WRAP_ARGS97(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS96(w, o, __VA_ARGS__)) -#define WRAP_ARGS98(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS97(w, o, __VA_ARGS__)) -#define WRAP_ARGS99(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS98(w, o, __VA_ARGS__)) -#define WRAP_ARGS100(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS99(w, o, __VA_ARGS__)) -#define WRAP_ARGS101(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS100(w, o, __VA_ARGS__)) -#define WRAP_ARGS102(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS101(w, o, __VA_ARGS__)) -#define WRAP_ARGS103(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS102(w, o, __VA_ARGS__)) -#define WRAP_ARGS104(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS103(w, o, __VA_ARGS__)) -#define WRAP_ARGS105(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS104(w, o, __VA_ARGS__)) -#define WRAP_ARGS106(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS105(w, o, __VA_ARGS__)) -#define WRAP_ARGS107(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS106(w, o, __VA_ARGS__)) -#define WRAP_ARGS108(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS107(w, o, __VA_ARGS__)) -#define WRAP_ARGS109(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS108(w, o, __VA_ARGS__)) -#define WRAP_ARGS110(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS109(w, o, __VA_ARGS__)) -#define WRAP_ARGS111(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS110(w, o, __VA_ARGS__)) -#define WRAP_ARGS112(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS111(w, o, __VA_ARGS__)) -#define WRAP_ARGS113(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS112(w, o, __VA_ARGS__)) -#define WRAP_ARGS114(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS113(w, o, __VA_ARGS__)) -#define WRAP_ARGS115(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS114(w, o, __VA_ARGS__)) -#define WRAP_ARGS116(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS115(w, o, __VA_ARGS__)) -#define WRAP_ARGS117(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS116(w, o, __VA_ARGS__)) -#define WRAP_ARGS118(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS117(w, o, __VA_ARGS__)) -#define WRAP_ARGS119(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS118(w, o, __VA_ARGS__)) -#define WRAP_ARGS120(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS119(w, o, __VA_ARGS__)) -#define WRAP_ARGS121(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS120(w, o, __VA_ARGS__)) -#define WRAP_ARGS122(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS121(w, o, __VA_ARGS__)) -#define WRAP_ARGS123(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS122(w, o, __VA_ARGS__)) -#define WRAP_ARGS124(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS123(w, o, __VA_ARGS__)) -#define WRAP_ARGS125(w, o, _1, ...) \ - w(o, _1), YLT_MACRO_EXPAND(WRAP_ARGS124(w, o, __VA_ARGS__)) + +#ifdef _MSC_VER // Microsoft compilers + +#define __NARGS(_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,_125, N, ...) N +#define NARGS_1(...) YLT_MACRO_EXPAND(__NARGS(__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 AUGMENTER(...) unused, __VA_ARGS__ +#define YLT_ARG_COUNT(...) NARGS_1(AUGMENTER(__VA_ARGS__)) + +#else // Others + +#define YLT_ARG_COUNT(...) __NARGS(0, ##__VA_ARGS__,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,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 __NARGS(_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,_125,_126,_127,_128,_129,_130,_131,_132,_133,_134,_135,_136,_137,_138,_139,_140,_141,_142,_143,_144,_145,_146,_147,_148,_149,_150,_151,_152,_153,_154,_155,_156,_157,_158,_159,_160,_161,_162,_163,_164,_165,_166,_167,_168,_169,_170,_171,_172,_173,_174,_175,_176,_177,_178,_179,_180,_181,_182,_183,_184,_185,_186,_187,_188,_189,_190,_191,_192,_193,_194,_195,_196,_197,_198,_199,_200,_201,_202,_203,_204,_205,_206,_207,_208,_209,_210,_211,_212,_213,_214,_215,_216,_217,_218,_219,_220,_221,_222,_223,_224,_225,_226,_227,_228,_229,_230,_231,_232,_233,_234,_235,_236,_237,_238,_239,_240,_241,_242,_243,_244,_245,_246,_247,_248,_249,_250,_251,_252,_253,_254,_255,_256, N, ...) N +#endif + +#define WRAP_ARGS2(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS1(w,o,__VA_ARGS__)) +#define WRAP_ARGS3(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS2(w,o,__VA_ARGS__)) +#define WRAP_ARGS4(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS3(w,o,__VA_ARGS__)) +#define WRAP_ARGS5(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS4(w,o,__VA_ARGS__)) +#define WRAP_ARGS6(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS5(w,o,__VA_ARGS__)) +#define WRAP_ARGS7(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS6(w,o,__VA_ARGS__)) +#define WRAP_ARGS8(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS7(w,o,__VA_ARGS__)) +#define WRAP_ARGS9(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS8(w,o,__VA_ARGS__)) +#define WRAP_ARGS10(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS9(w,o,__VA_ARGS__)) +#define WRAP_ARGS11(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS10(w,o,__VA_ARGS__)) +#define WRAP_ARGS12(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS11(w,o,__VA_ARGS__)) +#define WRAP_ARGS13(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS12(w,o,__VA_ARGS__)) +#define WRAP_ARGS14(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS13(w,o,__VA_ARGS__)) +#define WRAP_ARGS15(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS14(w,o,__VA_ARGS__)) +#define WRAP_ARGS16(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS15(w,o,__VA_ARGS__)) +#define WRAP_ARGS17(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS16(w,o,__VA_ARGS__)) +#define WRAP_ARGS18(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS17(w,o,__VA_ARGS__)) +#define WRAP_ARGS19(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS18(w,o,__VA_ARGS__)) +#define WRAP_ARGS20(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS19(w,o,__VA_ARGS__)) +#define WRAP_ARGS21(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS20(w,o,__VA_ARGS__)) +#define WRAP_ARGS22(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS21(w,o,__VA_ARGS__)) +#define WRAP_ARGS23(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS22(w,o,__VA_ARGS__)) +#define WRAP_ARGS24(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS23(w,o,__VA_ARGS__)) +#define WRAP_ARGS25(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS24(w,o,__VA_ARGS__)) +#define WRAP_ARGS26(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS25(w,o,__VA_ARGS__)) +#define WRAP_ARGS27(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS26(w,o,__VA_ARGS__)) +#define WRAP_ARGS28(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS27(w,o,__VA_ARGS__)) +#define WRAP_ARGS29(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS28(w,o,__VA_ARGS__)) +#define WRAP_ARGS30(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS29(w,o,__VA_ARGS__)) +#define WRAP_ARGS31(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS30(w,o,__VA_ARGS__)) +#define WRAP_ARGS32(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS31(w,o,__VA_ARGS__)) +#define WRAP_ARGS33(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS32(w,o,__VA_ARGS__)) +#define WRAP_ARGS34(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS33(w,o,__VA_ARGS__)) +#define WRAP_ARGS35(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS34(w,o,__VA_ARGS__)) +#define WRAP_ARGS36(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS35(w,o,__VA_ARGS__)) +#define WRAP_ARGS37(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS36(w,o,__VA_ARGS__)) +#define WRAP_ARGS38(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS37(w,o,__VA_ARGS__)) +#define WRAP_ARGS39(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS38(w,o,__VA_ARGS__)) +#define WRAP_ARGS40(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS39(w,o,__VA_ARGS__)) +#define WRAP_ARGS41(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS40(w,o,__VA_ARGS__)) +#define WRAP_ARGS42(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS41(w,o,__VA_ARGS__)) +#define WRAP_ARGS43(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS42(w,o,__VA_ARGS__)) +#define WRAP_ARGS44(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS43(w,o,__VA_ARGS__)) +#define WRAP_ARGS45(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS44(w,o,__VA_ARGS__)) +#define WRAP_ARGS46(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS45(w,o,__VA_ARGS__)) +#define WRAP_ARGS47(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS46(w,o,__VA_ARGS__)) +#define WRAP_ARGS48(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS47(w,o,__VA_ARGS__)) +#define WRAP_ARGS49(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS48(w,o,__VA_ARGS__)) +#define WRAP_ARGS50(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS49(w,o,__VA_ARGS__)) +#define WRAP_ARGS51(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS50(w,o,__VA_ARGS__)) +#define WRAP_ARGS52(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS51(w,o,__VA_ARGS__)) +#define WRAP_ARGS53(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS52(w,o,__VA_ARGS__)) +#define WRAP_ARGS54(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS53(w,o,__VA_ARGS__)) +#define WRAP_ARGS55(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS54(w,o,__VA_ARGS__)) +#define WRAP_ARGS56(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS55(w,o,__VA_ARGS__)) +#define WRAP_ARGS57(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS56(w,o,__VA_ARGS__)) +#define WRAP_ARGS58(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS57(w,o,__VA_ARGS__)) +#define WRAP_ARGS59(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS58(w,o,__VA_ARGS__)) +#define WRAP_ARGS60(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS59(w,o,__VA_ARGS__)) +#define WRAP_ARGS61(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS60(w,o,__VA_ARGS__)) +#define WRAP_ARGS62(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS61(w,o,__VA_ARGS__)) +#define WRAP_ARGS63(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS62(w,o,__VA_ARGS__)) +#define WRAP_ARGS64(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS63(w,o,__VA_ARGS__)) +#define WRAP_ARGS65(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS64(w,o,__VA_ARGS__)) +#define WRAP_ARGS66(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS65(w,o,__VA_ARGS__)) +#define WRAP_ARGS67(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS66(w,o,__VA_ARGS__)) +#define WRAP_ARGS68(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS67(w,o,__VA_ARGS__)) +#define WRAP_ARGS69(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS68(w,o,__VA_ARGS__)) +#define WRAP_ARGS70(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS69(w,o,__VA_ARGS__)) +#define WRAP_ARGS71(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS70(w,o,__VA_ARGS__)) +#define WRAP_ARGS72(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS71(w,o,__VA_ARGS__)) +#define WRAP_ARGS73(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS72(w,o,__VA_ARGS__)) +#define WRAP_ARGS74(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS73(w,o,__VA_ARGS__)) +#define WRAP_ARGS75(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS74(w,o,__VA_ARGS__)) +#define WRAP_ARGS76(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS75(w,o,__VA_ARGS__)) +#define WRAP_ARGS77(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS76(w,o,__VA_ARGS__)) +#define WRAP_ARGS78(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS77(w,o,__VA_ARGS__)) +#define WRAP_ARGS79(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS78(w,o,__VA_ARGS__)) +#define WRAP_ARGS80(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS79(w,o,__VA_ARGS__)) +#define WRAP_ARGS81(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS80(w,o,__VA_ARGS__)) +#define WRAP_ARGS82(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS81(w,o,__VA_ARGS__)) +#define WRAP_ARGS83(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS82(w,o,__VA_ARGS__)) +#define WRAP_ARGS84(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS83(w,o,__VA_ARGS__)) +#define WRAP_ARGS85(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS84(w,o,__VA_ARGS__)) +#define WRAP_ARGS86(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS85(w,o,__VA_ARGS__)) +#define WRAP_ARGS87(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS86(w,o,__VA_ARGS__)) +#define WRAP_ARGS88(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS87(w,o,__VA_ARGS__)) +#define WRAP_ARGS89(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS88(w,o,__VA_ARGS__)) +#define WRAP_ARGS90(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS89(w,o,__VA_ARGS__)) +#define WRAP_ARGS91(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS90(w,o,__VA_ARGS__)) +#define WRAP_ARGS92(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS91(w,o,__VA_ARGS__)) +#define WRAP_ARGS93(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS92(w,o,__VA_ARGS__)) +#define WRAP_ARGS94(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS93(w,o,__VA_ARGS__)) +#define WRAP_ARGS95(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS94(w,o,__VA_ARGS__)) +#define WRAP_ARGS96(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS95(w,o,__VA_ARGS__)) +#define WRAP_ARGS97(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS96(w,o,__VA_ARGS__)) +#define WRAP_ARGS98(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS97(w,o,__VA_ARGS__)) +#define WRAP_ARGS99(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS98(w,o,__VA_ARGS__)) +#define WRAP_ARGS100(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS99(w,o,__VA_ARGS__)) +#define WRAP_ARGS101(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS100(w,o,__VA_ARGS__)) +#define WRAP_ARGS102(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS101(w,o,__VA_ARGS__)) +#define WRAP_ARGS103(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS102(w,o,__VA_ARGS__)) +#define WRAP_ARGS104(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS103(w,o,__VA_ARGS__)) +#define WRAP_ARGS105(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS104(w,o,__VA_ARGS__)) +#define WRAP_ARGS106(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS105(w,o,__VA_ARGS__)) +#define WRAP_ARGS107(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS106(w,o,__VA_ARGS__)) +#define WRAP_ARGS108(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS107(w,o,__VA_ARGS__)) +#define WRAP_ARGS109(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS108(w,o,__VA_ARGS__)) +#define WRAP_ARGS110(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS109(w,o,__VA_ARGS__)) +#define WRAP_ARGS111(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS110(w,o,__VA_ARGS__)) +#define WRAP_ARGS112(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS111(w,o,__VA_ARGS__)) +#define WRAP_ARGS113(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS112(w,o,__VA_ARGS__)) +#define WRAP_ARGS114(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS113(w,o,__VA_ARGS__)) +#define WRAP_ARGS115(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS114(w,o,__VA_ARGS__)) +#define WRAP_ARGS116(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS115(w,o,__VA_ARGS__)) +#define WRAP_ARGS117(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS116(w,o,__VA_ARGS__)) +#define WRAP_ARGS118(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS117(w,o,__VA_ARGS__)) +#define WRAP_ARGS119(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS118(w,o,__VA_ARGS__)) +#define WRAP_ARGS120(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS119(w,o,__VA_ARGS__)) +#define WRAP_ARGS121(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS120(w,o,__VA_ARGS__)) +#define WRAP_ARGS122(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS121(w,o,__VA_ARGS__)) +#define WRAP_ARGS123(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS122(w,o,__VA_ARGS__)) +#define WRAP_ARGS124(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS123(w,o,__VA_ARGS__)) +#define WRAP_ARGS125(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS124(w,o,__VA_ARGS__)) +#define WRAP_ARGS126(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS125(w,o,__VA_ARGS__)) +#define WRAP_ARGS127(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS126(w,o,__VA_ARGS__)) +#define WRAP_ARGS128(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS127(w,o,__VA_ARGS__)) +#define WRAP_ARGS129(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS128(w,o,__VA_ARGS__)) +#define WRAP_ARGS130(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS129(w,o,__VA_ARGS__)) +#define WRAP_ARGS131(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS130(w,o,__VA_ARGS__)) +#define WRAP_ARGS132(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS131(w,o,__VA_ARGS__)) +#define WRAP_ARGS133(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS132(w,o,__VA_ARGS__)) +#define WRAP_ARGS134(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS133(w,o,__VA_ARGS__)) +#define WRAP_ARGS135(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS134(w,o,__VA_ARGS__)) +#define WRAP_ARGS136(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS135(w,o,__VA_ARGS__)) +#define WRAP_ARGS137(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS136(w,o,__VA_ARGS__)) +#define WRAP_ARGS138(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS137(w,o,__VA_ARGS__)) +#define WRAP_ARGS139(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS138(w,o,__VA_ARGS__)) +#define WRAP_ARGS140(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS139(w,o,__VA_ARGS__)) +#define WRAP_ARGS141(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS140(w,o,__VA_ARGS__)) +#define WRAP_ARGS142(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS141(w,o,__VA_ARGS__)) +#define WRAP_ARGS143(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS142(w,o,__VA_ARGS__)) +#define WRAP_ARGS144(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS143(w,o,__VA_ARGS__)) +#define WRAP_ARGS145(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS144(w,o,__VA_ARGS__)) +#define WRAP_ARGS146(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS145(w,o,__VA_ARGS__)) +#define WRAP_ARGS147(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS146(w,o,__VA_ARGS__)) +#define WRAP_ARGS148(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS147(w,o,__VA_ARGS__)) +#define WRAP_ARGS149(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS148(w,o,__VA_ARGS__)) +#define WRAP_ARGS150(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS149(w,o,__VA_ARGS__)) +#define WRAP_ARGS151(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS150(w,o,__VA_ARGS__)) +#define WRAP_ARGS152(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS151(w,o,__VA_ARGS__)) +#define WRAP_ARGS153(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS152(w,o,__VA_ARGS__)) +#define WRAP_ARGS154(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS153(w,o,__VA_ARGS__)) +#define WRAP_ARGS155(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS154(w,o,__VA_ARGS__)) +#define WRAP_ARGS156(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS155(w,o,__VA_ARGS__)) +#define WRAP_ARGS157(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS156(w,o,__VA_ARGS__)) +#define WRAP_ARGS158(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS157(w,o,__VA_ARGS__)) +#define WRAP_ARGS159(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS158(w,o,__VA_ARGS__)) +#define WRAP_ARGS160(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS159(w,o,__VA_ARGS__)) +#define WRAP_ARGS161(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS160(w,o,__VA_ARGS__)) +#define WRAP_ARGS162(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS161(w,o,__VA_ARGS__)) +#define WRAP_ARGS163(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS162(w,o,__VA_ARGS__)) +#define WRAP_ARGS164(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS163(w,o,__VA_ARGS__)) +#define WRAP_ARGS165(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS164(w,o,__VA_ARGS__)) +#define WRAP_ARGS166(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS165(w,o,__VA_ARGS__)) +#define WRAP_ARGS167(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS166(w,o,__VA_ARGS__)) +#define WRAP_ARGS168(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS167(w,o,__VA_ARGS__)) +#define WRAP_ARGS169(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS168(w,o,__VA_ARGS__)) +#define WRAP_ARGS170(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS169(w,o,__VA_ARGS__)) +#define WRAP_ARGS171(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS170(w,o,__VA_ARGS__)) +#define WRAP_ARGS172(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS171(w,o,__VA_ARGS__)) +#define WRAP_ARGS173(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS172(w,o,__VA_ARGS__)) +#define WRAP_ARGS174(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS173(w,o,__VA_ARGS__)) +#define WRAP_ARGS175(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS174(w,o,__VA_ARGS__)) +#define WRAP_ARGS176(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS175(w,o,__VA_ARGS__)) +#define WRAP_ARGS177(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS176(w,o,__VA_ARGS__)) +#define WRAP_ARGS178(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS177(w,o,__VA_ARGS__)) +#define WRAP_ARGS179(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS178(w,o,__VA_ARGS__)) +#define WRAP_ARGS180(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS179(w,o,__VA_ARGS__)) +#define WRAP_ARGS181(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS180(w,o,__VA_ARGS__)) +#define WRAP_ARGS182(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS181(w,o,__VA_ARGS__)) +#define WRAP_ARGS183(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS182(w,o,__VA_ARGS__)) +#define WRAP_ARGS184(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS183(w,o,__VA_ARGS__)) +#define WRAP_ARGS185(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS184(w,o,__VA_ARGS__)) +#define WRAP_ARGS186(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS185(w,o,__VA_ARGS__)) +#define WRAP_ARGS187(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS186(w,o,__VA_ARGS__)) +#define WRAP_ARGS188(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS187(w,o,__VA_ARGS__)) +#define WRAP_ARGS189(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS188(w,o,__VA_ARGS__)) +#define WRAP_ARGS190(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS189(w,o,__VA_ARGS__)) +#define WRAP_ARGS191(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS190(w,o,__VA_ARGS__)) +#define WRAP_ARGS192(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS191(w,o,__VA_ARGS__)) +#define WRAP_ARGS193(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS192(w,o,__VA_ARGS__)) +#define WRAP_ARGS194(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS193(w,o,__VA_ARGS__)) +#define WRAP_ARGS195(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS194(w,o,__VA_ARGS__)) +#define WRAP_ARGS196(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS195(w,o,__VA_ARGS__)) +#define WRAP_ARGS197(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS196(w,o,__VA_ARGS__)) +#define WRAP_ARGS198(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS197(w,o,__VA_ARGS__)) +#define WRAP_ARGS199(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS198(w,o,__VA_ARGS__)) +#define WRAP_ARGS200(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS199(w,o,__VA_ARGS__)) +#define WRAP_ARGS201(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS200(w,o,__VA_ARGS__)) +#define WRAP_ARGS202(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS201(w,o,__VA_ARGS__)) +#define WRAP_ARGS203(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS202(w,o,__VA_ARGS__)) +#define WRAP_ARGS204(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS203(w,o,__VA_ARGS__)) +#define WRAP_ARGS205(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS204(w,o,__VA_ARGS__)) +#define WRAP_ARGS206(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS205(w,o,__VA_ARGS__)) +#define WRAP_ARGS207(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS206(w,o,__VA_ARGS__)) +#define WRAP_ARGS208(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS207(w,o,__VA_ARGS__)) +#define WRAP_ARGS209(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS208(w,o,__VA_ARGS__)) +#define WRAP_ARGS210(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS209(w,o,__VA_ARGS__)) +#define WRAP_ARGS211(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS210(w,o,__VA_ARGS__)) +#define WRAP_ARGS212(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS211(w,o,__VA_ARGS__)) +#define WRAP_ARGS213(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS212(w,o,__VA_ARGS__)) +#define WRAP_ARGS214(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS213(w,o,__VA_ARGS__)) +#define WRAP_ARGS215(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS214(w,o,__VA_ARGS__)) +#define WRAP_ARGS216(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS215(w,o,__VA_ARGS__)) +#define WRAP_ARGS217(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS216(w,o,__VA_ARGS__)) +#define WRAP_ARGS218(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS217(w,o,__VA_ARGS__)) +#define WRAP_ARGS219(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS218(w,o,__VA_ARGS__)) +#define WRAP_ARGS220(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS219(w,o,__VA_ARGS__)) +#define WRAP_ARGS221(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS220(w,o,__VA_ARGS__)) +#define WRAP_ARGS222(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS221(w,o,__VA_ARGS__)) +#define WRAP_ARGS223(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS222(w,o,__VA_ARGS__)) +#define WRAP_ARGS224(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS223(w,o,__VA_ARGS__)) +#define WRAP_ARGS225(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS224(w,o,__VA_ARGS__)) +#define WRAP_ARGS226(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS225(w,o,__VA_ARGS__)) +#define WRAP_ARGS227(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS226(w,o,__VA_ARGS__)) +#define WRAP_ARGS228(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS227(w,o,__VA_ARGS__)) +#define WRAP_ARGS229(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS228(w,o,__VA_ARGS__)) +#define WRAP_ARGS230(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS229(w,o,__VA_ARGS__)) +#define WRAP_ARGS231(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS230(w,o,__VA_ARGS__)) +#define WRAP_ARGS232(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS231(w,o,__VA_ARGS__)) +#define WRAP_ARGS233(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS232(w,o,__VA_ARGS__)) +#define WRAP_ARGS234(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS233(w,o,__VA_ARGS__)) +#define WRAP_ARGS235(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS234(w,o,__VA_ARGS__)) +#define WRAP_ARGS236(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS235(w,o,__VA_ARGS__)) +#define WRAP_ARGS237(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS236(w,o,__VA_ARGS__)) +#define WRAP_ARGS238(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS237(w,o,__VA_ARGS__)) +#define WRAP_ARGS239(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS238(w,o,__VA_ARGS__)) +#define WRAP_ARGS240(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS239(w,o,__VA_ARGS__)) +#define WRAP_ARGS241(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS240(w,o,__VA_ARGS__)) +#define WRAP_ARGS242(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS241(w,o,__VA_ARGS__)) +#define WRAP_ARGS243(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS242(w,o,__VA_ARGS__)) +#define WRAP_ARGS244(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS243(w,o,__VA_ARGS__)) +#define WRAP_ARGS245(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS244(w,o,__VA_ARGS__)) +#define WRAP_ARGS246(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS245(w,o,__VA_ARGS__)) +#define WRAP_ARGS247(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS246(w,o,__VA_ARGS__)) +#define WRAP_ARGS248(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS247(w,o,__VA_ARGS__)) +#define WRAP_ARGS249(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS248(w,o,__VA_ARGS__)) +#define WRAP_ARGS250(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS249(w,o,__VA_ARGS__)) +#define WRAP_ARGS251(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS250(w,o,__VA_ARGS__)) +#define WRAP_ARGS252(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS251(w,o,__VA_ARGS__)) +#define WRAP_ARGS253(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS252(w,o,__VA_ARGS__)) +#define WRAP_ARGS254(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS253(w,o,__VA_ARGS__)) +#define WRAP_ARGS255(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS254(w,o,__VA_ARGS__)) +#define WRAP_ARGS256(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS255(w,o,__VA_ARGS__)) +#define WRAP_ARGS257(w,o,_1, ...) w(o, _1),YLT_MACRO_EXPAND(WRAP_ARGS256(w,o,__VA_ARGS__)) \ No newline at end of file diff --git a/include/ylt/reflection/member_macro.hpp b/include/ylt/reflection/internal/generate/member_macro.hpp similarity index 99% rename from include/ylt/reflection/member_macro.hpp rename to include/ylt/reflection/internal/generate/member_macro.hpp index 51a2072bb..57bbe4562 100644 --- a/include/ylt/reflection/member_macro.hpp +++ b/include/ylt/reflection/internal/generate/member_macro.hpp @@ -1,14 +1,16 @@ #pragma once +// clang-format off + /*The following boilerplate code was generated using a Python script: -macro = -"RFL_INTERNAL_OBJECT_IF_YOU_SEE_AN_ERROR_REFER_TO_DOCUMENTATION_ON_C_ARRAYS" +max_field_numbers = 256 +macro = "RFL_INTERNAL_OBJECT_IF_YOU_SEE_AN_ERROR_REFER_TO_DOCUMENTATION_ON_C_ARRAYS" with open("generated_code4.cpp", "w", encoding="utf-8") as codefile: codefile.write( "\n".join( [ f"{macro}({i}, {', '.join([f'f{j}' for j in range(i)])});" - for i in range(1, 256) + for i in range(1, max_field_numbers+1) ] ) ) @@ -2750,5 +2752,26 @@ RFL_INTERNAL_OBJECT_IF_YOU_SEE_AN_ERROR_REFER_TO_DOCUMENTATION_ON_C_ARRAYS( f225, f226, f227, f228, f229, f230, f231, f232, f233, f234, f235, f236, f237, f238, f239, f240, f241, f242, f243, f244, f245, f246, f247, f248, f249, f250, f251, f252, f253, f254); +RFL_INTERNAL_OBJECT_IF_YOU_SEE_AN_ERROR_REFER_TO_DOCUMENTATION_ON_C_ARRAYS( + 256, f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, + f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, + f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, + f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, + f61, f62, f63, f64, f65, f66, f67, f68, f69, f70, f71, f72, f73, f74, f75, + f76, f77, f78, f79, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f90, + f91, f92, f93, f94, f95, f96, f97, f98, f99, f100, f101, f102, f103, f104, + f105, f106, f107, f108, f109, f110, f111, f112, f113, f114, f115, f116, + f117, f118, f119, f120, f121, f122, f123, f124, f125, f126, f127, f128, + f129, f130, f131, f132, f133, f134, f135, f136, f137, f138, f139, f140, + f141, f142, f143, f144, f145, f146, f147, f148, f149, f150, f151, f152, + f153, f154, f155, f156, f157, f158, f159, f160, f161, f162, f163, f164, + f165, f166, f167, f168, f169, f170, f171, f172, f173, f174, f175, f176, + f177, f178, f179, f180, f181, f182, f183, f184, f185, f186, f187, f188, + f189, f190, f191, f192, f193, f194, f195, f196, f197, f198, f199, f200, + f201, f202, f203, f204, f205, f206, f207, f208, f209, f210, f211, f212, + f213, f214, f215, f216, f217, f218, f219, f220, f221, f222, f223, f224, + f225, f226, f227, f228, f229, f230, f231, f232, f233, f234, f235, f236, + f237, f238, f239, f240, f241, f242, f243, f244, f245, f246, f247, f248, + f249, f250, f251, f252, f253, f254, f255); #undef RFL_INTERNAL_OBJECT_IF_YOU_SEE_AN_ERROR_REFER_TO_DOCUMENTATION_ON_C_ARRAYS \ No newline at end of file diff --git a/include/ylt/reflection/member_ptr.hpp b/include/ylt/reflection/member_ptr.hpp index 1fa090e9d..d8da47f5a 100644 --- a/include/ylt/reflection/member_ptr.hpp +++ b/include/ylt/reflection/member_ptr.hpp @@ -13,18 +13,20 @@ struct object_tuple_view_helper { static_assert( sizeof(T) < 0, "\n\nThis error occurs for one of two reasons:\n\n" - "1) You have created a struct with more than 100 fields, which is " + "1) You have created a struct with more than 256 fields, which is " "unsupported. \n\n" - "2) Your struct is not an aggregate type.\n\n"); + "2) Your struct is not an aggregate type. You can make it aggregated, " + "or defined a YLT_REFL macro. \n\n"); } static constexpr auto tuple_view(T&) { static_assert( sizeof(T) < 0, "\n\nThis error occurs for one of two reasons:\n\n" - "1) You have created a struct with more than 100 fields, which is " + "1) You have created a struct with more than 256 fields, which is " "unsupported. \n\n" - "2) Your struct is not an aggregate type.\n\n"); + "2) Your struct is not an aggregate type. You can make it aggregated, " + "or defined a YLT_REFL macro. \n\n"); } template @@ -32,9 +34,10 @@ struct object_tuple_view_helper { static_assert( sizeof(T) < 0, "\n\nThis error occurs for one of two reasons:\n\n" - "1) You have created a struct with more than 100 fields, which is " + "1) You have created a struct with more than 256 fields, which is " "unsupported. \n\n" - "2) Your struct is not an aggregate type.\n\n"); + "2) Your struct is not an aggregate type. You can make it aggregated, " + "or defined a YLT_REFL macro. \n\n"); } }; @@ -81,7 +84,7 @@ inline constexpr remove_cvref_t& get_fake_object() noexcept { } // such file is generate macro file -#include "member_macro.hpp" +#include "internal/generate/member_macro.hpp" template inline constexpr auto tuple_view(T&& t) { diff --git a/include/ylt/struct_pack/calculate_size.hpp b/include/ylt/struct_pack/calculate_size.hpp index ea58f2f5d..d839aed11 100644 --- a/include/ylt/struct_pack/calculate_size.hpp +++ b/include/ylt/struct_pack/calculate_size.hpp @@ -148,7 +148,7 @@ constexpr size_info inline calculate_one_size(const T &item) { if constexpr (!user_defined_refl) static_assert(std::is_aggregate_v>, "struct_pack only support aggregated type, or you should " - "add macro STRUCT_PACK_REFL(Type,field1,field2...)"); + "add macro YLT_REFL(Type,field1,field2...)"); } if constexpr (is_trivial_serializable::value) { ret.total = sizeof(type); diff --git a/include/ylt/struct_pack/foreach_macro.h b/include/ylt/struct_pack/foreach_macro.h index dcbed8a2c..bad21f650 100644 --- a/include/ylt/struct_pack/foreach_macro.h +++ b/include/ylt/struct_pack/foreach_macro.h @@ -13,12 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #pragma once +#include "ylt/reflection/internal/arg_list_macro.hpp" // clang-format off -#define STRUCT_PACK_ARG_COUNT(...) STRUCT_PACK_MARCO_EXPAND(STRUCT_PACK_INTERNAL_ARG_COUNT(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 STRUCT_PACK_INTERNAL_ARG_COUNT(\ -_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 #define STRUCT_PACK_CONCAT_(l, r) l ## r #define STRUCT_PACK_CONCAT(l, r) STRUCT_PACK_CONCAT_(l, r) @@ -281,7 +279,7 @@ _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_2 STRUCT_PACK_CONCAT(STRUCT_PACK_MAKE_ARGS,Count)(Type) #define STRUCT_PACK_EXPAND_EACH_(sepatator,fun,...) \ - STRUCT_PACK_MARCO_EXPAND(STRUCT_PACK_CONCAT(STRUCT_PACK_DOARG,STRUCT_PACK_ARG_COUNT(__VA_ARGS__))(sepatator,fun,__VA_ARGS__)) + STRUCT_PACK_MARCO_EXPAND(STRUCT_PACK_CONCAT(STRUCT_PACK_DOARG,YLT_ARG_COUNT(__VA_ARGS__))(sepatator,fun,__VA_ARGS__)) #define STRUCT_PACK_EXPAND_EACH(sepatator,fun,...) \ STRUCT_PACK_EXPAND_EACH_(sepatator,fun,__VA_ARGS__) \ No newline at end of file diff --git a/include/ylt/struct_pack/packer.hpp b/include/ylt/struct_pack/packer.hpp index ccb14925c..57710737b 100644 --- a/include/ylt/struct_pack/packer.hpp +++ b/include/ylt/struct_pack/packer.hpp @@ -418,7 +418,7 @@ class packer { static_assert( std::is_aggregate_v>, "struct_pack only support aggregated type, or you should " - "add macro STRUCT_PACK_REFL(Type,field1,field2...)"); + "add macro YLT_REFL(Type,field1,field2...)"); if constexpr (is_trivial_serializable::value && is_little_endian_copyable) { write_wrapper(writer_, (char *)&item); diff --git a/include/ylt/struct_pack/reflection.hpp b/include/ylt/struct_pack/reflection.hpp index e60abcb9b..a4db6200b 100644 --- a/include/ylt/struct_pack/reflection.hpp +++ b/include/ylt/struct_pack/reflection.hpp @@ -28,6 +28,7 @@ #include #include #include "ylt/reflection/member_count.hpp" +#include "ylt/reflection/internal/arg_list_macro.hpp" #if __has_include() #include @@ -559,18 +560,10 @@ template #if __cpp_concepts >= 201907L template - concept user_defined_refl = std::is_same_v())),Type&>; + concept user_defined_refl = ylt::reflection::is_out_ylt_refl_v || ylt::reflection::is_inner_ylt_refl_v; #else - template - struct user_defined_refl_impl : std::false_type {}; - - template - struct user_defined_refl_impl())),T&>>>> - : std::true_type {}; - template - constexpr bool user_defined_refl = user_defined_refl_impl::value; + constexpr bool user_defined_refl = ylt::reflection::is_out_ylt_refl_v || ylt::reflection::is_inner_ylt_refl_v; #endif #if __cpp_concepts >= 201907L @@ -908,1777 +901,23 @@ constexpr bool trivially_copyable_container = template constexpr std::size_t members_count() { - using type = remove_cvref_t; - if constexpr (user_defined_refl) { - return decltype(STRUCT_PACK_FIELD_COUNT(std::declval()))::value; - } - else if constexpr (tuple_size) { - return std::tuple_size::value; - } - else { - return ylt::reflection::members_count_v; - } + return ylt::reflection::members_count_v; } - constexpr static auto MaxVisitMembers = 256; - - template - constexpr decltype(auto) STRUCT_PACK_INLINE visit_members_by_user_defined_refl(Object &&object, - Visitor &&visitor); - - template - constexpr decltype(auto) STRUCT_PACK_INLINE visit_members_by_structure_binding(Object &&object, - Visitor &&visitor); - template constexpr decltype(auto) STRUCT_PACK_INLINE visit_members(Object &&object, Visitor &&visitor) { using type = remove_cvref_t; - if constexpr (user_defined_refl) { - return visit_members_by_user_defined_refl(object,visitor); - } - else { - return visit_members_by_structure_binding(object,visitor); - } - } - template - constexpr decltype(auto) STRUCT_PACK_INLINE - visit_members_by_user_defined_refl(Object &&o, Visitor &&visitor) { - using type = remove_cvref_t; - constexpr auto Count = decltype(STRUCT_PACK_FIELD_COUNT(o))::value; - - static_assert(Count <= MaxVisitMembers, "exceed max visit members"); - if constexpr (Count >= 0) { - if constexpr (Count == 1) { - return visitor(_SPG0(o)); - } - else if constexpr (Count == 2) { - return visitor(_SPG0(o), _SPG1(o)); - } - else if constexpr (Count == 3) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o)); - } - else if constexpr (Count == 4) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o)); - } - else if constexpr (Count == 5) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o)); - } - else if constexpr (Count == 6) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o)); - } - else if constexpr (Count == 7) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o)); - } - else if constexpr (Count == 8) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o)); - } - else if constexpr (Count == 9) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o)); - } - else if constexpr (Count == 10) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o)); - } - else if constexpr (Count == 11) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o)); - } - else if constexpr (Count == 12) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o)); - } - else if constexpr (Count == 13) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o)); - } - else if constexpr (Count == 14) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o)); - } - else if constexpr (Count == 15) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o)); - } - else if constexpr (Count == 16) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o)); - } - else if constexpr (Count == 17) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o)); - } - else if constexpr (Count == 18) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o)); - } - else if constexpr (Count == 19) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o)); - } - else if constexpr (Count == 20) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o)); - } - else if constexpr (Count == 21) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o)); - } - else if constexpr (Count == 22) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o)); - } - else if constexpr (Count == 23) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o)); - } - else if constexpr (Count == 24) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o)); - } - else if constexpr (Count == 25) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o)); - } - else if constexpr (Count == 26) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o)); - } - else if constexpr (Count == 27) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o)); - } - else if constexpr (Count == 28) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o)); - } - else if constexpr (Count == 29) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o)); - } - else if constexpr (Count == 30) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o)); - } - else if constexpr (Count == 31) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o)); - } - else if constexpr (Count == 32) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o)); - } - else if constexpr (Count == 33) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o)); - } - else if constexpr (Count == 34) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o)); - } - else if constexpr (Count == 35) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o)); - } - else if constexpr (Count == 36) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o)); - } - else if constexpr (Count == 37) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o)); - } - else if constexpr (Count == 38) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o)); - } - else if constexpr (Count == 39) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o)); - } - else if constexpr (Count == 40) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o)); - } - else if constexpr (Count == 41) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o)); - } - else if constexpr (Count == 42) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o)); - } - else if constexpr (Count == 43) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o)); - } - else if constexpr (Count == 44) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o), _SPG43(o)); - } - else if constexpr (Count == 45) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o), _SPG43(o), _SPG44(o)); - } - else if constexpr (Count == 46) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o)); - } - else if constexpr (Count == 47) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o)); - } - else if constexpr (Count == 48) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o)); - } - else if constexpr (Count == 49) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o), _SPG43(o), _SPG44(o), - _SPG45(o), _SPG46(o), _SPG47(o), _SPG48(o)); - } - else if constexpr (Count == 50) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o), _SPG43(o), _SPG44(o), - _SPG45(o), _SPG46(o), _SPG47(o), _SPG48(o), _SPG49(o)); - } - else if constexpr (Count == 51) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o)); - } - else if constexpr (Count == 52) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o)); - } - else if constexpr (Count == 53) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o)); - } - else if constexpr (Count == 54) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o)); - } - else if constexpr (Count == 55) { - return visitor(_SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), - _SPG5(o), _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), - _SPG10(o), _SPG11(o), _SPG12(o), _SPG13(o), _SPG14(o), - _SPG15(o), _SPG16(o), _SPG17(o), _SPG18(o), _SPG19(o), - _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), _SPG24(o), - _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), - _SPG35(o), _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), - _SPG40(o), _SPG41(o), _SPG42(o), _SPG43(o), _SPG44(o), - _SPG45(o), _SPG46(o), _SPG47(o), _SPG48(o), _SPG49(o), - _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), _SPG54(o)); - } - else if constexpr (Count == 56) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o)); - } - else if constexpr (Count == 57) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o)); - } - else if constexpr (Count == 58) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o)); - } - else if constexpr (Count == 59) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o)); - } - else if constexpr (Count == 60) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o)); - } - else if constexpr (Count == 61) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o)); - } - else if constexpr (Count == 62) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o)); - } - else if constexpr (Count == 63) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o)); - } - else if constexpr (Count == 64) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o)); - } - else if constexpr (Count == 65) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o)); - } - else if constexpr (Count == 66) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o)); - } - else if constexpr (Count == 67) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o)); - } - else if constexpr (Count == 68) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o)); - } - else if constexpr (Count == 69) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o)); - } - else if constexpr (Count == 70) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o)); - } - else if constexpr (Count == 71) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o)); - } - else if constexpr (Count == 72) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o)); - } - else if constexpr (Count == 73) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o)); - } - else if constexpr (Count == 74) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o)); - } - else if constexpr (Count == 75) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o)); - } - else if constexpr (Count == 76) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o)); - } - else if constexpr (Count == 77) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o)); - } - else if constexpr (Count == 78) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o)); - } - else if constexpr (Count == 79) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o)); - } - else if constexpr (Count == 80) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o)); - } - else if constexpr (Count == 81) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o)); - } - else if constexpr (Count == 82) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o)); - } - else if constexpr (Count == 83) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o)); - } - else if constexpr (Count == 84) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o)); - } - else if constexpr (Count == 85) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o)); - } - else if constexpr (Count == 86) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o)); - } - else if constexpr (Count == 87) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o)); - } - else if constexpr (Count == 88) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o)); - } - else if constexpr (Count == 89) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o)); - } - else if constexpr (Count == 90) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o)); - } - else if constexpr (Count == 91) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o)); - } - else if constexpr (Count == 92) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o)); - } - else if constexpr (Count == 93) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o)); - } - else if constexpr (Count == 94) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o)); - } - else if constexpr (Count == 95) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o)); - } - else if constexpr (Count == 96) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o)); - } - else if constexpr (Count == 97) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o)); - } - else if constexpr (Count == 98) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o)); - } - else if constexpr (Count == 99) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o)); - } - else if constexpr (Count == 100) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o)); - } - else if constexpr (Count == 101) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o)); - } - else if constexpr (Count == 102) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o)); - } - else if constexpr (Count == 103) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o)); - } - else if constexpr (Count == 104) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o)); - } - else if constexpr (Count == 105) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o)); - } - else if constexpr (Count == 106) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o)); - } - else if constexpr (Count == 107) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o)); - } - else if constexpr (Count == 108) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o)); - } - else if constexpr (Count == 109) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o)); - } - else if constexpr (Count == 110) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o)); - } - else if constexpr (Count == 111) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o)); - } - else if constexpr (Count == 112) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o)); - } - else if constexpr (Count == 113) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o)); - } - else if constexpr (Count == 114) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o)); - } - else if constexpr (Count == 115) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o)); - } - else if constexpr (Count == 116) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o)); - } - else if constexpr (Count == 117) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o)); - } - else if constexpr (Count == 118) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o)); - } - else if constexpr (Count == 119) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o)); - } - else if constexpr (Count == 120) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o), _SPG119(o)); - } - else if constexpr (Count == 121) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o), _SPG119(o), _SPG120(o)); - } - else if constexpr (Count == 122) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o), _SPG119(o), _SPG120(o), _SPG121(o)); - } - else if constexpr (Count == 123) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o), _SPG119(o), _SPG120(o), _SPG121(o), - _SPG122(o)); - } - else if constexpr (Count == 124) { - return visitor( - _SPG0(o), _SPG1(o), _SPG2(o), _SPG3(o), _SPG4(o), _SPG5(o), - _SPG6(o), _SPG7(o), _SPG8(o), _SPG9(o), _SPG10(o), _SPG11(o), - _SPG12(o), _SPG13(o), _SPG14(o), _SPG15(o), _SPG16(o), _SPG17(o), - _SPG18(o), _SPG19(o), _SPG20(o), _SPG21(o), _SPG22(o), _SPG23(o), - _SPG24(o), _SPG25(o), _SPG26(o), _SPG27(o), _SPG28(o), _SPG29(o), - _SPG30(o), _SPG31(o), _SPG32(o), _SPG33(o), _SPG34(o), _SPG35(o), - _SPG36(o), _SPG37(o), _SPG38(o), _SPG39(o), _SPG40(o), _SPG41(o), - _SPG42(o), _SPG43(o), _SPG44(o), _SPG45(o), _SPG46(o), _SPG47(o), - _SPG48(o), _SPG49(o), _SPG50(o), _SPG51(o), _SPG52(o), _SPG53(o), - _SPG54(o), _SPG55(o), _SPG56(o), _SPG57(o), _SPG58(o), _SPG59(o), - _SPG60(o), _SPG61(o), _SPG62(o), _SPG63(o), _SPG64(o), _SPG65(o), - _SPG66(o), _SPG67(o), _SPG68(o), _SPG69(o), _SPG70(o), _SPG71(o), - _SPG72(o), _SPG73(o), _SPG74(o), _SPG75(o), _SPG76(o), _SPG77(o), - _SPG78(o), _SPG79(o), _SPG80(o), _SPG81(o), _SPG82(o), _SPG83(o), - _SPG84(o), _SPG85(o), _SPG86(o), _SPG87(o), _SPG88(o), _SPG89(o), - _SPG90(o), _SPG91(o), _SPG92(o), _SPG93(o), _SPG94(o), _SPG95(o), - _SPG96(o), _SPG97(o), _SPG98(o), _SPG99(o), _SPG100(o), _SPG101(o), - _SPG102(o), _SPG103(o), _SPG104(o), _SPG105(o), _SPG106(o), - _SPG107(o), _SPG108(o), _SPG109(o), _SPG110(o), _SPG111(o), - _SPG112(o), _SPG113(o), _SPG114(o), _SPG115(o), _SPG116(o), - _SPG117(o), _SPG118(o), _SPG119(o), _SPG120(o), _SPG121(o), - _SPG122(o), _SPG123(o)); - } - } - else { - static_assert(!sizeof(type), "empty struct/class is not allowed!"); - } - } - - template - constexpr decltype(auto) STRUCT_PACK_INLINE visit_members_by_structure_binding(Object &&object, - Visitor &&visitor) { - using type = remove_cvref_t; constexpr auto Count = struct_pack::members_count; if constexpr (Count == 0 && std::is_class_v && !std::is_same_v) { static_assert(!sizeof(type), "1. If the struct is empty, which is not allowed in struct_pack type system.\n" - "2. If the strut is not empty, it means struct_pack can't calculate your struct members' count. You can use macro STRUCT_PACK_REFL(Typename, field1, field2...)."); + "2. If the strut is not empty, it means struct_pack can't calculate your struct members' count. You can use macro YLT_REFL(Typename, field1, field2...)."); } - static_assert(Count <= MaxVisitMembers, "exceed max visit members"); // If you see any structured binding error in the follow line, it // means struct_pack can't calculate your struct's members count // correctly. - // The best way is use macro STRUCT_PACK_REFL(Typename, field1, field2...) + // The best way is use macro YLT_REFL(Typename, field1, field2...) // See the src/struct_pack/example/non_aggregated_type.cpp for more details. // // You can also to mark it manually. @@ -2715,49 +954,6 @@ constexpr bool checkable_reader_t = reader_t &&checkable_reader_t_impl::va #endif } // namespace struct_pack - - -#define STRUCT_PACK_RETURN_ELEMENT(Idx, X) \ -if constexpr (Idx == I) {\ - return c.X;\ -} - -#define STRUCT_PACK_GET_INDEX(Idx, Type) \ - inline auto &_SPG##Idx(Type &c) { \ - return STRUCT_PACK_GET() - 1 - Idx>(c); \ - } - -#define STRUCT_PACK_GET_INDEX_CONST(Idx, Type) \ - inline const auto &_SPG##Idx(const Type &c) { \ - return STRUCT_PACK_GET() - 1 - Idx>(c); \ - } - +// This marco is only for compatible with old version. Please instead it by YLT_REFL #define STRUCT_PACK_REFL(Type,...) \ -inline Type& STRUCT_PACK_REFL_FLAG(Type& t) {return t;} \ -template \ -constexpr std::size_t STRUCT_PACK_FIELD_COUNT_IMPL(); \ -template<> \ -constexpr std::size_t STRUCT_PACK_FIELD_COUNT_IMPL() {return STRUCT_PACK_ARG_COUNT(__VA_ARGS__);} \ -inline decltype(auto) STRUCT_PACK_FIELD_COUNT(const Type &){ \ - return std::integral_constant{}; \ -} \ -template auto& STRUCT_PACK_GET(Type& c) { \ - STRUCT_PACK_EXPAND_EACH(,STRUCT_PACK_RETURN_ELEMENT,__VA_ARGS__) \ - else { \ - static_assert(I < STRUCT_PACK_FIELD_COUNT_IMPL()); \ - } \ -} \ -template const auto& STRUCT_PACK_GET(const Type& c) { \ - STRUCT_PACK_EXPAND_EACH(,STRUCT_PACK_RETURN_ELEMENT,__VA_ARGS__) \ - else { \ - static_assert(I < STRUCT_PACK_FIELD_COUNT_IMPL()); \ - } \ -} \ -STRUCT_PACK_EXPAND_EACH(,STRUCT_PACK_GET_INDEX,STRUCT_PACK_MAKE_ARGS(Type,STRUCT_PACK_ARG_COUNT(__VA_ARGS__))) \ -STRUCT_PACK_EXPAND_EACH(,STRUCT_PACK_GET_INDEX_CONST,STRUCT_PACK_MAKE_ARGS(Type,STRUCT_PACK_ARG_COUNT(__VA_ARGS__))) \ - -#define STRUCT_PACK_FRIEND_DECL(Type) \ -template \ -friend auto& STRUCT_PACK_GET(Type& c); \ -template \ -friend const auto& STRUCT_PACK_GET(const Type& c); + YLT_REFL(Type,__VA_ARGS__) diff --git a/include/ylt/struct_pack/unpacker.hpp b/include/ylt/struct_pack/unpacker.hpp index 36848edc4..e9ae530d6 100644 --- a/include/ylt/struct_pack/unpacker.hpp +++ b/include/ylt/struct_pack/unpacker.hpp @@ -451,7 +451,7 @@ class unpacker { if constexpr (!user_defined_refl) static_assert(std::is_aggregate_v>, "struct_pack only support aggregated type, or you should " - "add macro STRUCT_PACK_REFL(Type,field1,field2...)"); + "add macro YLT_REFL(Type,field1,field2...)"); err_code = visit_members(t, [&](auto &&...items) CONSTEXPR_INLINE_LAMBDA { static_assert(I < sizeof...(items), "out of range"); return for_each(field, items...); @@ -1179,7 +1179,7 @@ class unpacker { static_assert( std::is_aggregate_v>, "struct_pack only support aggregated type, or you should " - "add macro STRUCT_PACK_REFL(Type,field1,field2...)"); + "add macro YLT_REFL(Type,field1,field2...)"); if constexpr (is_trivial_serializable::value && is_little_endian_copyable) { if constexpr (NotSkip) { diff --git a/src/struct_pack/examples/derived_class.cpp b/src/struct_pack/examples/derived_class.cpp index 4d708328f..e7e1dbbb6 100644 --- a/src/struct_pack/examples/derived_class.cpp +++ b/src/struct_pack/examples/derived_class.cpp @@ -38,19 +38,19 @@ struct obj1 : public base { // class std::string_view hello() override { return "obj1"; } }; -STRUCT_PACK_REFL(obj1, ID, name); +YLT_REFL(obj1, ID, name); struct obj2 : public base { std::array data; virtual uint32_t get_struct_pack_id() const override; std::string_view hello() override { return "obj2"; } }; -STRUCT_PACK_REFL(obj2, ID, data); +YLT_REFL(obj2, ID, data); struct obj3 : public obj1 { int age; virtual uint32_t get_struct_pack_id() const override; std::string_view hello() override { return "obj3"; } }; -STRUCT_PACK_REFL(obj3, ID, name, age); +YLT_REFL(obj3, ID, name, age); // the declartion for derived relation for struct_pack STRUCT_PACK_DERIVED_DECL(base, obj1, obj2, obj3); // the implement for derived relation for struct_pack @@ -87,25 +87,25 @@ struct base { virtual ~base(){}; virtual std::string_view hello() { return "base"; } }; -STRUCT_PACK_REFL(base, ID); +YLT_REFL(base, ID); struct obj1 : public base { std::string name; virtual uint32_t get_struct_pack_id() const override; std::string_view hello() override { return "obj1"; } }; -STRUCT_PACK_REFL(obj1, ID, name); +YLT_REFL(obj1, ID, name); struct obj2 : public base { std::array data; virtual uint32_t get_struct_pack_id() const override; std::string_view hello() override { return "obj2"; } }; -STRUCT_PACK_REFL(obj2, ID, data); +YLT_REFL(obj2, ID, data); struct obj3 : public obj1 { virtual uint32_t get_struct_pack_id() const override; static constexpr uint64_t struct_pack_id = 114514; std::string_view hello() override { return "obj3"; } }; -STRUCT_PACK_REFL(obj3, ID, name); +YLT_REFL(obj3, ID, name); STRUCT_PACK_DERIVED_DECL(base, obj1, obj2, obj3); STRUCT_PACK_DERIVED_IMPL(base, obj1, obj2, obj3); } // namespace base_class diff --git a/src/struct_pack/examples/non_aggregated_type.cpp b/src/struct_pack/examples/non_aggregated_type.cpp index 597d70d56..8d4916735 100644 --- a/src/struct_pack/examples/non_aggregated_type.cpp +++ b/src/struct_pack/examples/non_aggregated_type.cpp @@ -27,7 +27,7 @@ #include // 1. make sure your type has a default constructor -// 2. add marco STRUCT_PACK_REFL(Type, field1, field2...) in the same namespace +// 2. add marco YLT_REFL(Type, field1, field2...) in the same namespace namespace example { class person : std::vector { private: @@ -43,7 +43,7 @@ class person : std::vector { person(int age, const std::string& name) : age(age), name(name) {} }; -STRUCT_PACK_REFL(person, age, name); +YLT_REFL(person, age, name); } // namespace example // 3. if you want to use private field, add friend declartion marco @@ -60,9 +60,8 @@ class person { } person() = default; person(int age, const std::string& name) : age(age), name(name) {} - STRUCT_PACK_FRIEND_DECL(person); + YLT_REFL(person, age, name); }; -STRUCT_PACK_REFL(person, age, name); } // namespace example2 // 4. you can also add function which return class member reference as @@ -86,7 +85,7 @@ class person { std::string& name() { return name_; }; const std::string& name() const { return name_; }; }; -STRUCT_PACK_REFL(person, age(), name()); +YLT_REFL(person, age(), name()); } // namespace example3 // 5. Remember, the STURCT_PACK_REFL marco disable the trivial_serialize @@ -95,7 +94,7 @@ namespace example4 { struct point { int x, y, z; }; -STRUCT_PACK_REFL(point, x, y, z); +YLT_REFL(point, x, y, z); struct point2 { int x, y, z; }; diff --git a/src/struct_pack/tests/test_derived.cpp b/src/struct_pack/tests/test_derived.cpp index c0a434dc0..768f4a746 100644 --- a/src/struct_pack/tests/test_derived.cpp +++ b/src/struct_pack/tests/test_derived.cpp @@ -9,7 +9,7 @@ struct Base { friend bool operator==(const Base& a, const Base& b) { return a.id == b.id; } virtual ~Base(){}; }; -STRUCT_PACK_REFL(Base, id); +YLT_REFL(Base, id); struct foo : public Base { std::string hello = "1"; std::string hi = "2"; @@ -18,7 +18,7 @@ struct foo : public Base { return a.id == b.id && a.hello == b.hello && a.hi == b.hi; } }; -STRUCT_PACK_REFL(foo, id, hello, hi); +YLT_REFL(foo, id, hello, hi); struct foo2 : public Base { std::string hello = "1"; std::string hi = "2"; @@ -28,7 +28,7 @@ struct foo2 : public Base { } static constexpr int struct_pack_id = 114514; }; -STRUCT_PACK_REFL(foo2, id, hello, hi); +YLT_REFL(foo2, id, hello, hi); struct foo3 : public Base { std::string hello = "1"; std::string hi = "2"; @@ -37,7 +37,7 @@ struct foo3 : public Base { return a.id == b.id && a.hello == b.hello && a.hi == b.hi; } }; -STRUCT_PACK_REFL(foo3, id, hello, hi); +YLT_REFL(foo3, id, hello, hi); struct foo4 : public Base { std::string hello = "1"; std::string hi = "2"; @@ -47,7 +47,7 @@ struct foo4 : public Base { } }; constexpr int struct_pack_id(foo4*) { return 112233211; } -STRUCT_PACK_REFL(foo4, id, hello, hi); +YLT_REFL(foo4, id, hello, hi); struct bar : public Base { int oh = 1; int no = 2; @@ -56,7 +56,7 @@ struct bar : public Base { return a.id == b.id && a.oh == b.oh && a.no == b.no; } }; -STRUCT_PACK_REFL(bar, id, oh, no); +YLT_REFL(bar, id, oh, no); struct gua : Base { std::string a = "Hello"; int b = 1; @@ -65,7 +65,7 @@ struct gua : Base { return a.id == b.id && a.a == b.a && a.b == b.b; } }; -STRUCT_PACK_REFL(gua, id, a, b); +YLT_REFL(gua, id, a, b); struct_pack::expected, struct_pack::err_code> Base::deserialize(std::string_view sv) { @@ -183,7 +183,7 @@ struct derived1 : public base { virtual uint32_t get_struct_pack_id() const override; std::string get_name() const override { return "derived1"; } }; -STRUCT_PACK_REFL(derived1, b); +YLT_REFL(derived1, b); struct derived2 : public base { std::string c; @@ -192,7 +192,7 @@ struct derived2 : public base { std::string get_name() const override { return "derived2"; } }; -STRUCT_PACK_REFL(derived2, c, child); +YLT_REFL(derived2, c, child); STRUCT_PACK_DERIVED_IMPL(base, derived1, derived2); diff --git a/src/struct_pack/tests/test_derived.hpp b/src/struct_pack/tests/test_derived.hpp index fe2e587c6..7ffed95a8 100644 --- a/src/struct_pack/tests/test_derived.hpp +++ b/src/struct_pack/tests/test_derived.hpp @@ -14,7 +14,7 @@ struct base { int a = 1; virtual ~base(){}; }; -STRUCT_PACK_REFL(base, a); +YLT_REFL(base, a); struct derived1 : public base { virtual uint32_t get_struct_pack_id() const; @@ -24,28 +24,28 @@ struct derived1 : public base { int b = 2; }; -STRUCT_PACK_REFL(derived1, a, b); +YLT_REFL(derived1, a, b); struct derived2 : public base { virtual uint32_t get_struct_pack_id() const; virtual std::string get_name() const { return base::get_name() + c; } std::string c = "Hello"; }; -STRUCT_PACK_REFL(derived2, a, c); +YLT_REFL(derived2, a, c); struct derived3 : public base { virtual uint32_t get_struct_pack_id() const; virtual std::string get_name() const { return base::get_name() + d; } std::string d = "Oh no"; static constexpr std::size_t struct_pack_id = 0; }; -STRUCT_PACK_REFL(derived3, a, d); +YLT_REFL(derived3, a, d); struct derived4 : public derived3 { virtual uint32_t get_struct_pack_id() const; virtual std::string get_name() const { return derived3::get_name() + e; } std::string e = "!"; }; -STRUCT_PACK_REFL(derived4, a, d, e); +YLT_REFL(derived4, a, d, e); STRUCT_PACK_DERIVED_IMPL(base, derived1, derived2, derived3, derived4); } // namespace test2 @@ -68,14 +68,14 @@ struct derived1 : public base { int b = 2; }; -STRUCT_PACK_REFL(derived1, a, b); +YLT_REFL(derived1, a, b); struct derived2 : public base { virtual uint32_t get_struct_pack_id() const; virtual std::string get_name() const { return base::get_name() + c; } std::string c = "Hello"; }; -STRUCT_PACK_REFL(derived2, a, c); +YLT_REFL(derived2, a, c); struct derived3 : public base { virtual uint32_t get_struct_pack_id() const; virtual std::string get_name() const { return base::get_name() + d; } @@ -83,7 +83,7 @@ struct derived3 : public base { static constexpr std::size_t struct_pack_id = 0; }; -STRUCT_PACK_REFL(derived3, a, d); +YLT_REFL(derived3, a, d); struct derived4 : public derived3 { virtual uint32_t get_struct_pack_id() const; @@ -91,7 +91,7 @@ struct derived4 : public derived3 { std::string e = "!"; }; -STRUCT_PACK_REFL(derived4, a, d, e); +YLT_REFL(derived4, a, d, e); STRUCT_PACK_DERIVED_IMPL(base, derived1, derived2, derived3, derived4); diff --git a/src/struct_pack/tests/test_many_members.cpp b/src/struct_pack/tests/test_many_members.cpp index ea00c1526..eadea752e 100644 --- a/src/struct_pack/tests/test_many_members.cpp +++ b/src/struct_pack/tests/test_many_members.cpp @@ -262,6 +262,7 @@ struct many_members { int a127; std::string b127; int a128; + int a129; #endif }; struct many_members2 : public many_members {}; @@ -274,13 +275,13 @@ STRUCT_PACK_REFL(many_members2, a1, b1, a2, b2, a3, b3, a4, b4, a5, b5, a6, b6, a38, b38, a39, b39, a40, b40, a41, b41, a42, b42, a43, b43, a44, b44, a45, b45, a46, b46, a47, b47, a48, b48, a49, b49, a50, b50, a51, b51, a52, b52, a53, b53, a54, b54, a55, b55, - a56, b56, a57, b57, a58, b58, a59, b59, a60, b60); + a56, b56, a57, b57, a58, b58, a59, b59, a60, b60, a61, b61); TEST_CASE("test many members") { - int size = 384; + int size = 385; #ifdef _MSC_VER size = 188; #endif CHECK(struct_pack::get_type_literal().size() == size); - CHECK(struct_pack::get_type_literal().size() == 182); + CHECK(struct_pack::get_type_literal().size() == 185); } \ No newline at end of file diff --git a/src/struct_pack/tests/test_non_aggregated_type.cpp b/src/struct_pack/tests/test_non_aggregated_type.cpp index 457aabca4..555fc6938 100644 --- a/src/struct_pack/tests/test_non_aggregated_type.cpp +++ b/src/struct_pack/tests/test_non_aggregated_type.cpp @@ -22,7 +22,7 @@ #include "test_struct.hpp" // 1. make sure your type has a default constructor -// 2. add marco STRUCT_PACK_REFL(Type, field1, field2...) in the same namespace +// 2. add marco YLT_REFL(Type, field1, field2...) in the same namespace namespace example { class person : std::vector { private: @@ -38,7 +38,7 @@ class person : std::vector { person(int age, const std::string& name) : age(age), name(name) {} }; -STRUCT_PACK_REFL(person, age, name); +YLT_REFL(person, age, name); } // namespace example // 3. if you want to use private field, add friend declartion marco @@ -55,9 +55,8 @@ class person { } person() = default; person(int age, const std::string& name) : age(age), name(name) {} - STRUCT_PACK_FRIEND_DECL(person); + YLT_REFL(person, age, name); }; -STRUCT_PACK_REFL(person, age, name); } // namespace example2 // 4. you can also add function which return class member reference as @@ -81,7 +80,7 @@ class person { std::string& name() { return name_; }; const std::string& name() const { return name_; }; }; -STRUCT_PACK_REFL(person, age(), name()); +YLT_REFL(person, age(), name()); } // namespace example3 // 5. Remember, the STURCT_PACK_REFL marco disable the trivial_serialize @@ -90,7 +89,7 @@ namespace example4 { struct point { int x, y, z; }; -STRUCT_PACK_REFL(point, x, y, z); +YLT_REFL(point, x, y, z); struct point2 { int x, y, z; }; @@ -162,9 +161,8 @@ class complicated_object { j == o.j && k == o.k && m == o.m && n[0] == o.n[0] && n[1] == o.n[1] && this->o == o.o; } - STRUCT_PACK_FRIEND_DECL(complicated_object); + YLT_REFL(complicated_object, a, b, c, d, e, f, g, h, i, j, k, m, n, o); }; -STRUCT_PACK_REFL(complicated_object, a, b, c, d, e, f, g, h, i, j, k, m, n, o); } // namespace example6 TEST_CASE("test non aggregated type") { diff --git a/src/struct_pack/tests/test_struct.hpp b/src/struct_pack/tests/test_struct.hpp index 1e9c525c9..fe0d2070e 100644 --- a/src/struct_pack/tests/test_struct.hpp +++ b/src/struct_pack/tests/test_struct.hpp @@ -157,4 +157,4 @@ struct person_with_refl { std::string name; int age; }; -STRUCT_PACK_REFL(person_with_refl, name, age); \ No newline at end of file +YLT_REFL(person_with_refl, name, age); \ No newline at end of file diff --git a/website/docs/en/struct_pack/struct_pack_intro.md b/website/docs/en/struct_pack/struct_pack_intro.md index c8ea2b80c..2f1197dc5 100644 --- a/website/docs/en/struct_pack/struct_pack_intro.md +++ b/website/docs/en/struct_pack/struct_pack_intro.md @@ -175,7 +175,7 @@ assert(nested2==nested1); ### custom reflection -Sometimes user need support non-aggregated type, or adjust the order of each field, which can be supported by macro function `STRUCT_PACK_REFL(typename, fieldname1, fieldname2 ...)`. +Sometimes user need support non-aggregated type, or adjust the order of each field, which can be supported by macro function `YLT_REFL(typename, fieldname1, fieldname2 ...)`. ```cpp namespace test { @@ -192,15 +192,15 @@ class person : std::vector { person() = default; person(int age, const std::string& name) : age(age), name(name) {} }; -STRUCT_PACK_REFL(person, name, age); +YLT_REFL(person, name, age); } -The first argument of `STRUCT_PACK_REFL(typename, fieldname1, fieldname2 ...)` is the name of the type reflected, the others are the field names. +The first argument of `YLT_REFL(typename, fieldname1, fieldname2 ...)` is the name of the type reflected, the others are the field names. The macro must be defined in the same namespace of the reflected type. The macro allow struct_pack support non-aggregated type, allow user define constructor, derived from other type or add some field which don't serialize. ``` -Sometimes, user want to serialize/deserialize some private fields, which can be supported by macro function `STRUCT_PACK_FRIEND_DECL(typename)`. +Sometimes, user want to serialize/deserialize some private fields, which can be supported by define macro function `YLT_REFL(typename, members...)` inside of structure. ```cpp namespace example2 { class person { @@ -214,15 +214,17 @@ class person { } person() = default; person(int age, const std::string& name) : age(age), name(name) {} - STRUCT_PACK_FRIEND_DECL(person); + YLT_REFL(person, age, name); }; -STRUCT_PACK_REFL(person, age, name); + } // namespace example2 ``` -This macro must declared inside the struct, it regist struct_pack reflection function as friend function. +This macro must declared inside the struct, it regist struct_pack reflection function as static member function. + + -User can even register member function in macro function `STRUCT_PACK_REFL`, which greatly expands the flexibility of struct_pack. +User can even register member function which return left-reference as structure members, which greatly expands the flexibility of struct_pack. ```cpp @@ -244,7 +246,7 @@ class person { std::string& name() { return name_; }; const std::string& name() const { return name_; }; }; -STRUCT_PACK_REFL(person, age(), name()); +YLT_REFL(person, age(), name()); } // namespace example3 ``` The member function registed must return a reference, and this function must have a const version overload & non-const overload. @@ -472,17 +474,17 @@ struct obj1 : public base { const override; // user must declare this virtual function in derived // class }; -STRUCT_PACK_REFL(obj1, ID, name); +YLT_REFL(obj1, ID, name); struct obj2 : public base { std::array data; virtual uint32_t get_struct_pack_id() const override; }; -STRUCT_PACK_REFL(obj2, ID, data); +YLT_REFL(obj2, ID, data); struct obj3 : public obj1 { int age; virtual uint32_t get_struct_pack_id() const override; }; -STRUCT_PACK_REFL(obj3, ID, name, age); +YLT_REFL(obj3, ID, name, age); STRUCT_PACK_DERIVED_DECL(base, obj1, obj2, obj3); // declare the relationship bewteen base class and derived class. @@ -526,12 +528,12 @@ struct obj1 { std::string name; virtual uint32_t get_struct_pack_id() const; }; -STRUCT_PACK_REFL(obj1, name); +YLT_REFL(obj1, name); struct obj2 : public obj1 { virtual uint32_t get_struct_pack_id() const override; constexpr static std::size_t struct_pack_id = 114514; }; -STRUCT_PACK_REFL(obj2, name); +YLT_REFL(obj2, name); ``` When this field/function is added, struct_pack adds this ID to the type string, thus ensuring that the two types have different hash values, thus resolving ID conflicts/hash conflicts. diff --git a/website/docs/en/struct_pack/struct_pack_tips.md b/website/docs/en/struct_pack/struct_pack_tips.md index 0c6752417..e5e08a62b 100644 --- a/website/docs/en/struct_pack/struct_pack_tips.md +++ b/website/docs/en/struct_pack/struct_pack_tips.md @@ -110,4 +110,24 @@ Currently we do not allow the `DISABLE_ALL_META_INFO` configuration to be enable 1. The type to serialize should be legal struct_pack type.。See document:[struct_pack type system](https://alibaba.github.io/yalantinglibs/en/struct_pack/struct_pack_type_system.html)。 2. struct_pack support update protocol by add struct_pack::compatible field, which is forward backward compatibility. User should make sure the version number is increment for each update. It's not allow to delete/modify exist field. See : [document](https://alibaba.github.io/yalantinglibs/en/struct_pack/struct_pack_type_system.html#%E5%85%BC%E5%AE%B9%E7%B1%BB%E5%9E%8B) +3. Using the `YLT_REFL` macro, a maximum of 256(in msvc 124) fields are supported by default. Without using macros, the number of struct members should not exceed 256. +## How to Extend the Limit on Struct Fields + +Some users might need to handle structs with hundreds of fields, which may exceed the supported range of yalantinglibs. Due to compile-time and compiler constraints, the number of fields supported by default is limited. Below, we introduce how to modify the source code to increase the field limit. + +### Without Using Macros + +The default limit is 256 fields. If you need to extend this limit, please modify the file `member_macro.hpp`. At the top of this header file, there is a python script; you can change the number 256 in the code to the number of fields you need. Then run the script, and overwrite the `member_macro.hpp` with the generated C++ code. + +### Using the `YLT_REFL` Macro + +The default limit is 256 fields (124 fields for MSVC by default). The following issues need to be noted: + +#### Compiler Constraints + +If you are using the MSVC compiler, you need to use the parameter `/Zc:preprocessor` instead of `/Zc:preprocessor-`. Otherwise, we can only support up to 124 fields for reflection under MSVC. + +#### Modifying the `arg_list_macro_gen.hpp` File + +At the top of this header file, there is a python script; you can change the field limit in the script to the number of fields you need. Then run the script, and overwrite the `arg_list_macro_gen.hpp` with the generated code. diff --git a/website/docs/en/struct_pack/struct_pack_type_system.md b/website/docs/en/struct_pack/struct_pack_type_system.md index f46091ace..80eb635f6 100644 --- a/website/docs/en/struct_pack/struct_pack_type_system.md +++ b/website/docs/en/struct_pack/struct_pack_type_system.md @@ -216,7 +216,7 @@ The class needs to provide: `size()`,`flip()`,`set()`,`reset()`,`count()`,and th ## Struct -`struct_pack` supports `struct` type. Up to **255** fields are supported and nested fields are supported too. All members +`struct_pack` supports `struct` type. Up to **256** fields are supported(We can also extend it, see document of "struct pack tips") and nested fields are supported too. All members should be of valid `struct_pack` type. struct type could be `struct/class/std::tuple/tuplet::tuple/std::pair` @@ -224,7 +224,7 @@ struct type could be `struct/class/std::tuple/tuplet::tuple/std::pair` ### trivial struct -If there is a struct/class/std::pair/tuplet::tuple, and all the field of this type is a trivial type, and the type isn't registed by macro `STRUCT_PACK_REFL`, then this type is a trivial struct in struct_pack. +If there is a struct/class/std::pair/tuplet::tuple, and all the field of this type is a trivial type, and the type isn't registed by macro `YLT_REFL`, then this type is a trivial struct in struct_pack. A trivial type is : 1. fundamental type. @@ -258,7 +258,7 @@ void test() { } ``` -Remeber, the type registed by macro `STRUCT_PACK_REFL` is not trivial struct. +Remeber, the type registed by macro `YLT_REFL` is not trivial struct. For example: ```cpp struct foo { @@ -267,7 +267,7 @@ struct foo { struct bar { int a,b,c; }; -STRUCT_PACK_REFL(bar,a,b,c); +YLT_REFL(bar,a,b,c); static_assert(struct_pack::get_type_code()!=struct_pack::get_type_code()); ``` diff --git a/website/docs/zh/struct_pack/struct_pack_intro.md b/website/docs/zh/struct_pack/struct_pack_intro.md index f73a589a8..aa0031696 100644 --- a/website/docs/zh/struct_pack/struct_pack_intro.md +++ b/website/docs/zh/struct_pack/struct_pack_intro.md @@ -180,7 +180,7 @@ struct rect { ### 用户自定义反射 -有时候用户需要支持非聚合的结构体,或者自定义各字段序列化的顺序,这些可以通过宏函数`STRUCT_PACK_REFL(typename, fieldname1, fieldname2 ...)`来支持。 +有时候用户需要支持非聚合的结构体,或者自定义各字段序列化的顺序,这些可以通过宏函数`YLT_REFL(typename, fieldname1, fieldname2 ...)`来支持。 ```cpp namespace test { @@ -197,16 +197,16 @@ class person : std::vector { person() = default; person(int age, const std::string& name) : age(age), name(name) {} }; -STRUCT_PACK_REFL(person, name, age); +YLT_REFL(person, name, age); } ``` -`STRUCT_PACK_REFL(typename, fieldname1, fieldname2 ...)`填入的第一个参数是需要反射的类型名,随后是若干个字段名,代表反射信息的各个字段。 +`YLT_REFL(typename, fieldname1, fieldname2 ...)`填入的第一个参数是需要反射的类型名,随后是若干个字段名,代表反射信息的各个字段。 该宏必须定义在反射的类型所在的命名空间中。 如果该类型不具有默认构造函数,则无法使用函数`struct_pack::deserialize`,不过你依然可以使用`struct_pack::deserialize_to`来实现反序列化。 它使得struct_pack可以支持那些非聚合的结构体类型,允许用户自定义构造函数,继承其他类型,添加不序列化的字段等等。 -有时,用户需要序列化/反序列化那些private字段,这可以通过函数`STRUCT_PACK_FRIEND_DECL(typenmae)`;来支持。 +有时,用户需要序列化/反序列化那些private字段,此时我们只需要在结构体内定义宏`YLT_REFL(typename, fieldname1, fieldname2 ...)`就行了。 ```cpp namespace example2 { class person { @@ -220,15 +220,14 @@ class person { } person() = default; person(int age, const std::string& name) : age(age), name(name) {} - STRUCT_PACK_FRIEND_DECL(person); + YLT_REFL(person, age, name); }; -STRUCT_PACK_REFL(person, age, name); } // namespace example2 ``` -该宏必须声明在结构体内部,其原理是将struct_pack与反射有关的函数注册为友元函数。 +该宏必须声明在结构体内部,其原理是在类内生成反射相关的静态函数。 -用户甚至可以在`STRUCT_PACK_REFL`中注册成员函数,这极大的扩展了struct_pack的灵活性。 +用户甚至可以在`YLT_REFL`中,将返回左值引用的成员函数注册为结构体的字段,这极大的扩展了struct_pack的灵活性。 ```cpp namespace example3 { @@ -249,7 +248,7 @@ class person { std::string& name() { return name_; }; const std::string& name() const { return name_; }; }; -STRUCT_PACK_REFL(person, age(), name()); +YLT_REFL(person, age(), name()); } // namespace example3 注册的成员函数必须返回一个引用,并且该函数具有常量和非常量的重载。 @@ -498,17 +497,17 @@ struct obj1 : public base { virtual uint32_t get_struct_pack_id() const override; // 必须在派生类中声明该函数。 }; -STRUCT_PACK_REFL(obj1, ID, name); +YLT_REFL(obj1, ID, name); struct obj2 : public base { std::array data; virtual uint32_t get_struct_pack_id() const override; }; -STRUCT_PACK_REFL(obj2, ID, data); +YLT_REFL(obj2, ID, data); struct obj3 : public obj1 { int age; virtual uint32_t get_struct_pack_id() const override; }; -STRUCT_PACK_REFL(obj3, ID, name, age); +YLT_REFL(obj3, ID, name, age); STRUCT_PACK_DERIVED_DECL(base, obj1, obj2, obj3); // 声明基类和派生类之间的继承关系。 @@ -551,12 +550,12 @@ struct obj1 { std::string name; virtual uint32_t get_struct_pack_id() const; }; -STRUCT_PACK_REFL(obj1, name); +YLT_REFL(obj1, name); struct obj2 : public obj1 { virtual uint32_t get_struct_pack_id() const override; constexpr static std::size_t struct_pack_id = 114514; }; -STRUCT_PACK_REFL(obj2, name); +YLT_REFL(obj2, name); ``` 当添加了该字段/函数后,struct_pack会在类型字符串中加上该ID,从而保证两个类型之间具有不同的类型哈希值,从而解决ID冲突/哈希冲突。 diff --git a/website/docs/zh/struct_pack/struct_pack_tips.md b/website/docs/zh/struct_pack/struct_pack_tips.md index 5f6d5c1da..a0140c977 100644 --- a/website/docs/zh/struct_pack/struct_pack_tips.md +++ b/website/docs/zh/struct_pack/struct_pack_tips.md @@ -110,8 +110,29 @@ auto result = struct_pack::deserialize( 当同时配置了两者时,模板参数的优先级高于ADL。 目前我们不允许在具有compatible字段的情况下启用`DISABLE_ALL_META_INFO`配置。 -## 类型约束 +## 类型约束 1. 序列化的类型必须是struct_pack类型系统中的合法类型。详见:struct_pack的类型系统。See document:[struct_pack 类型系统](https://alibaba.github.io/yalantinglibs/zh/struct_pack/struct_pack_type_system.html)。 2. struct_pack允许新增struct_pack::compatible字段,并保证其前向/后向的兼容性,只要每次协议变更时填入的版本号大于上一次的版本号即可。如果删除/修改了已有字段,则无法保证兼容性。详见[文档](https://alibaba.github.io/yalantinglibs/zh/struct_pack/struct_pack_type_system.html#%E5%85%BC%E5%AE%B9%E7%B1%BB%E5%9E%8B) +3. 使用YLT_REFL宏,默认最多支持注册256(msvc 默认124)个字段。不使用宏,结构体成员不应超过256个。 + +## 如何扩展结构体字段上限 + +有些用户需要处理一些结构体包含上百个字段的极端情况,此时字段数目可能会超过yalantinglibs支持的范围。受编译时间和编译器限制,默认支持的字段数目受限。下面我们介绍如何通过修改源码来增加字段的上限。 + +### 不使用宏的情况 + +默认上限为256个字段,如果需要扩展字段上限,请修改文件`member_macro.hpp`,该头文件最上面有一份python代码,你可以将代码中的256改成你需要的字段数目。然后运行代码,将生成好的C++代码覆盖到member_macro.hpp中。 + +### 使用YLT_REFL宏的情况 + +默认上限为256个字段(MSVC默认为124个字段),我们需要注意以下问题: + +#### 编译器限制 + +如果您使用的是MSVC编译器,需要使用参数`/Zc:preprocessor` 而不是 `/Zc:preprocessor-`。否则MSVC下我们最多支持反射124个字段。 + +#### 修改arg_list_macro_gen.hpp文件 + +该头文件最上面有一份python代码,你可以将代码中的字段上限改成你需要的字段数目。然后运行代码,将生成好的代码覆盖到arg_list_macro_gen.hpp中。 diff --git a/website/docs/zh/struct_pack/struct_pack_type_system.md b/website/docs/zh/struct_pack/struct_pack_type_system.md index d37a1f788..23a29dee0 100644 --- a/website/docs/zh/struct_pack/struct_pack_type_system.md +++ b/website/docs/zh/struct_pack/struct_pack_type_system.md @@ -219,13 +219,13 @@ concept unique_ptr = requires(Type ptr) { ## 结构体 -struct_pack支持结构体类型。结构体内可以包含最多255个字段,并允许结构体嵌套。结构体中的任何成员都必须是struct_pack的合法类型。 +struct_pack支持结构体类型。默认支持最多256个字段,也可以扩展支持更多字段(见struct_pack提示章节),并允许结构体嵌套。结构体中的任何成员都必须是struct_pack的合法类型。 struct_pack的结构体类型可以为:struct/class/std::pair/tuplet::tuple/std::tuple ### 平凡结构体 -假如一个结构体类型是`struct/class/std::pair/tuplet::tuple`,且其所有的成员字段都是平凡字段,并且该类型未使用`STRUCT_PACK_REFL`宏注册,则该结构体被视为平凡结构体类型。 +假如一个结构体类型是`struct/class/std::pair/tuplet::tuple`,且其所有的成员字段都是平凡字段,并且该类型未使用`YLT_REFL`宏注册,则该结构体被视为平凡结构体类型。 平凡字段是下面几种类型中的一种: 1. 基本类型 @@ -259,7 +259,7 @@ void test() { } ``` -需要注意的是,通过`STRUCT_PACK_REFL`宏注册的类型一定不是平凡结构体。 +需要注意的是,通过`YLT_REFL`宏注册的类型一定不是平凡结构体。 例如: ```cpp struct foo { @@ -268,7 +268,7 @@ struct foo { struct bar { int a,b,c; }; -STRUCT_PACK_REFL(bar,a,b,c); +YLT_REFL(bar,a,b,c); static_assert(struct_pack::get_type_code()!=struct_pack::get_type_code()); ```