1818#ifndef __X_TO_STRUCT_HPP
1919#define __X_TO_STRUCT_HPP
2020
21+ #include " config.h"
22+
2123#include < string>
2224#include < set>
2325#include < stdexcept>
2426
2527#include " util.h"
2628#include " xreader.h"
2729
30+ #ifdef XTOSTRUCT_JSON
2831#include " json_reader.h"
2932#include " json_writer.h"
33+ #endif
3034
35+ #ifdef XTOSTRUCT_XML
3136#include " xml_reader.h"
3237#include " xml_writer.h"
38+ #endif
3339
3440#ifdef XTOSTRUCT_BSON
3541#include " bson_reader.h"
@@ -55,6 +61,8 @@ namespace x2struct {
5561class X {
5662public:
5763 // string to struct
64+
65+ #ifdef XTOSTRUCT_JSON
5866 template <typename TYPE>
5967 static bool loadjson (const std::string&str, TYPE&t, bool isfile=true ) {
6068 JsonReader reader (str, isfile);
@@ -72,7 +80,9 @@ class X {
7280 writer.convert (root.c_str (), t);
7381 return writer.toStr ();
7482 }
83+ #endif
7584
85+ #ifdef XTOSTRUCT_XML
7686 template <typename TYPE>
7787 static bool loadxml (const std::string&str, TYPE&t, bool isfile=true ) {
7888 XmlReader reader (str, isfile);
@@ -85,6 +95,7 @@ class X {
8595 writer.convert (root.c_str (), t);
8696 return writer.toStr ();
8797 }
98+ #endif
8899
89100 // bson
90101 #ifdef XTOSTRUCT_BSON
@@ -148,7 +159,7 @@ public: \
148159 return __x_has_string.find (name)!=__x_has_string.end (); \
149160 } \
150161 template <typename DOC> \
151- bool __x_condition (DOC& obj, const std::string&name) { \
162+ bool __x_condition (DOC& obj, const std::string&name) const { \
152163 (void )obj;(void )name; \
153164 return true ; \
154165 } \
@@ -222,8 +233,6 @@ public: \
222233
223234// lenght should equal X_STRUCT_N
224235#define X_DEC_LIST _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
225- // expand macro depend on parameters number
226- #define X_STRUCT_N (ACTION,_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,N,...) ACTION##N
227236
228237/*
229238 work with X_STRUCT_N to expand macro
@@ -240,9 +249,14 @@ public: \
240249*/
241250
242251// wrap X_STRUCT_N. so we can use X_DEC_LIST
252+ // expand macro depend on parameters number
253+ #ifndef _MSC_VER
254+ // thx https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly
255+ #define X_STRUCT_N (ACTION,_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,N,...) ACTION##N
243256#define X_STRUCT_WRAP_L1 (ACT, LIST, ...) X_STRUCT_N(X_STRUCT_L1, __VA_ARGS__, LIST)(ACT, __VA_ARGS__)
244257#define X_STRUCT_WRAP_L2 (ACT, LIST, ...) X_STRUCT_N(X_STRUCT_L2, __VA_ARGS__, LIST)(ACT, __VA_ARGS__)
245258
259+
246260#define X_STRUCT_L1_DEF (ACT, M ) X_STRUCT_L1_##ACT##M
247261#define X_STRUCT_L1_1 (ACT, M ) X_STRUCT_L1_DEF(ACT, M)
248262#define X_STRUCT_L1_2 (ACT, M,...) X_STRUCT_L1_DEF(ACT, M) X_STRUCT_L1_1(ACT, __VA_ARGS__)
@@ -311,6 +325,85 @@ public: \
311325#define X_STRUCT_L2_31 (ACT, M,...) X_STRUCT_L2_DEF(ACT, M) X_STRUCT_L2_30(ACT, __VA_ARGS__)
312326#define X_STRUCT_L2_32 (ACT, M,...) X_STRUCT_L2_DEF(ACT, M) X_STRUCT_L2_31(ACT, __VA_ARGS__)
313327
328+
329+ #else
330+ // MSVC .... too bad
331+ #define X_MSVC_COUNT_N (ACTION, _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,N, ...) ACTION##N
332+ #define X_MSVC_EXPAND (...) __VA_ARGS__
333+ #define X_STRUCT_N (ACTION, ...) X_MSVC_EXPAND(X_MSVC_COUNT_N(ACTION, __VA_ARGS__,_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))
334+ #define X_STRUCT_WRAP_L1 (ACT, LIST, ...) X_STRUCT_N(X_STRUCT_L1, __VA_ARGS__, LIST)X_MSVC_EXPAND((ACT, __VA_ARGS__))
335+ #define X_STRUCT_WRAP_L2 (ACT, LIST, ...) X_STRUCT_N(X_STRUCT_L2, __VA_ARGS__, LIST)X_MSVC_EXPAND((ACT, __VA_ARGS__))
336+
337+ #define X_STRUCT_L1_DEF (ACT, M ) X_STRUCT_L1_##ACT##M
338+ #define X_STRUCT_L1_1 (ACT,M1 ) X_STRUCT_L1_DEF(ACT, M1)
339+ #define X_STRUCT_L1_2 (ACT,M1,M2 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_1(ACT,M2)
340+ #define X_STRUCT_L1_3 (ACT,M1,M2,M3 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_2(ACT,M2,M3)
341+ #define X_STRUCT_L1_4 (ACT,M1,M2,M3,M4 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_3(ACT,M2,M3,M4)
342+ #define X_STRUCT_L1_5 (ACT,M1,M2,M3,M4,M5 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_4(ACT,M2,M3,M4,M5)
343+ #define X_STRUCT_L1_6 (ACT,M1,M2,M3,M4,M5,M6 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_5(ACT,M2,M3,M4,M5,M6)
344+ #define X_STRUCT_L1_7 (ACT,M1,M2,M3,M4,M5,M6,M7 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_6(ACT,M2,M3,M4,M5,M6,M7)
345+ #define X_STRUCT_L1_8 (ACT,M1,M2,M3,M4,M5,M6,M7,M8 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_7(ACT,M2,M3,M4,M5,M6,M7,M8)
346+ #define X_STRUCT_L1_9 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_8(ACT,M2,M3,M4,M5,M6,M7,M8,M9)
347+ #define X_STRUCT_L1_10 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_9(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10)
348+ #define X_STRUCT_L1_11 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_10(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11)
349+ #define X_STRUCT_L1_12 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_11(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)
350+ #define X_STRUCT_L1_13 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_12(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13)
351+ #define X_STRUCT_L1_14 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_13(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14)
352+ #define X_STRUCT_L1_15 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_14(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15)
353+ #define X_STRUCT_L1_16 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_15(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16)
354+ #define X_STRUCT_L1_17 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_16(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17)
355+ #define X_STRUCT_L1_18 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_17(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18)
356+ #define X_STRUCT_L1_19 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_18(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19)
357+ #define X_STRUCT_L1_20 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_19(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20)
358+ #define X_STRUCT_L1_21 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_20(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21)
359+ #define X_STRUCT_L1_22 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_21(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22)
360+ #define X_STRUCT_L1_23 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_22(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23)
361+ #define X_STRUCT_L1_24 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_23(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24)
362+ #define X_STRUCT_L1_25 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_24(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25)
363+ #define X_STRUCT_L1_26 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_25(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26)
364+ #define X_STRUCT_L1_27 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_26(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27)
365+ #define X_STRUCT_L1_28 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_27(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28)
366+ #define X_STRUCT_L1_29 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_28(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29)
367+ #define X_STRUCT_L1_30 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_29(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30)
368+ #define X_STRUCT_L1_31 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_30(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31)
369+ #define X_STRUCT_L1_32 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31,M32 ) X_STRUCT_L1_DEF(ACT, M1) X_STRUCT_L1_31(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31,M32)
370+
371+ #define X_STRUCT_L2_DEF (ACT, M ) X_STRUCT_ACT_##ACT(M)
372+ #define X_STRUCT_L2_1 (ACT,M1 ) X_STRUCT_L2_DEF(ACT, M1)
373+ #define X_STRUCT_L2_2 (ACT,M1,M2 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_1(ACT,M2)
374+ #define X_STRUCT_L2_3 (ACT,M1,M2,M3 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_2(ACT,M2,M3)
375+ #define X_STRUCT_L2_4 (ACT,M1,M2,M3,M4 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_3(ACT,M2,M3,M4)
376+ #define X_STRUCT_L2_5 (ACT,M1,M2,M3,M4,M5 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_4(ACT,M2,M3,M4,M5)
377+ #define X_STRUCT_L2_6 (ACT,M1,M2,M3,M4,M5,M6 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_5(ACT,M2,M3,M4,M5,M6)
378+ #define X_STRUCT_L2_7 (ACT,M1,M2,M3,M4,M5,M6,M7 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_6(ACT,M2,M3,M4,M5,M6,M7)
379+ #define X_STRUCT_L2_8 (ACT,M1,M2,M3,M4,M5,M6,M7,M8 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_7(ACT,M2,M3,M4,M5,M6,M7,M8)
380+ #define X_STRUCT_L2_9 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_8(ACT,M2,M3,M4,M5,M6,M7,M8,M9)
381+ #define X_STRUCT_L2_10 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_9(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10)
382+ #define X_STRUCT_L2_11 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_10(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11)
383+ #define X_STRUCT_L2_12 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_11(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)
384+ #define X_STRUCT_L2_13 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_12(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13)
385+ #define X_STRUCT_L2_14 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_13(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14)
386+ #define X_STRUCT_L2_15 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_14(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15)
387+ #define X_STRUCT_L2_16 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_15(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16)
388+ #define X_STRUCT_L2_17 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_16(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17)
389+ #define X_STRUCT_L2_18 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_17(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18)
390+ #define X_STRUCT_L2_19 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_18(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19)
391+ #define X_STRUCT_L2_20 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_19(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20)
392+ #define X_STRUCT_L2_21 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_20(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21)
393+ #define X_STRUCT_L2_22 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_21(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22)
394+ #define X_STRUCT_L2_23 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_22(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23)
395+ #define X_STRUCT_L2_24 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_23(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24)
396+ #define X_STRUCT_L2_25 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_24(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25)
397+ #define X_STRUCT_L2_26 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_25(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26)
398+ #define X_STRUCT_L2_27 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_26(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27)
399+ #define X_STRUCT_L2_28 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_27(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28)
400+ #define X_STRUCT_L2_29 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_28(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29)
401+ #define X_STRUCT_L2_30 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_29(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30)
402+ #define X_STRUCT_L2_31 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_30(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31)
403+ #define X_STRUCT_L2_32 (ACT,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31,M32 ) X_STRUCT_L2_DEF(ACT, M1) X_STRUCT_L2_31(ACT,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M30,M31,M32)
404+ #endif
405+
406+
314407// L1 action define. O M A
315408// string to struct
316409#define X_STRUCT_L1_TOX_O (...) X_STRUCT_WRAP_L2(TOX_O, X_DEC_LIST, __VA_ARGS__)
0 commit comments