libGimbal 0.1.0
C17-Based Extended Standard Library and Cross-Language Runtime Framework
Loading...
Searching...
No Matches
gimbal_macro_composition.h
Go to the documentation of this file.
1/*! \file
2 * \brief Macro primitives for variadic function overloads and resolution
3 * \ingroup preprocessor
4 * \sa gimbal_sequences.h
5 *
6 * \author Falco Girgis
7 */
8
9#ifndef GIMBAL_MACRO_COMPOSITION_H
10#define GIMBAL_MACRO_COMPOSITION_H
11
13
14// Generic meta macro primitives and constructs
15#define GBL_IDENTITY(A) A
16#define GBL_COMMA ,
17
18#define GBL_VA_ARGS(...) ,##__VA_ARGS__
19#define GBL_VA_REQUIRE(...) ...
20
21#define GBL_STRINGIFY(a) GBL_STRINGIFY_(a)
22#define GBL_STRINGIFY_(a) #a
23#define GBL_STRINGIFY_MULTI(...) GBL_STRINGIFY(__VA_ARGS__)
24
25#define GBL_CAT(A, B) A##B
26#define GBL_GLUE(A, B) GBL_CAT(A, B)
27
28#define GBL_APPEND_SUFFIX(NAME, NUM) GBL_CAT(NAME##_, NUM)
29#define GBL_COMPOSE(NAME, ARGS) NAME ARGS
30
31#define GBL_MACRO_CALL(macro, ...) macro(__VA_ARGS__)
32#define GBL_MACRO_CALL_NULL(...)
33
34#define GBL_MACRO_CONDITIONAL_CALL_0(macro, ...)
36#define GBL_MACRO_CONDITIONAL_CALL_1(macro, ...)
37 GBL_MACRO_CALL(macro, __VA_ARGS__)
38
39#define GBL_MACRO_CONDITIONAL_CALL(enabled, ...)
40 GBL_CAT(GBL_MACRO_CONDITIONAL_CALL_,enabled)(__VA_ARGS__)
41
42#define GBL_NARG(...)
43 GBL_NARG_(__VA_ARGS__, GBL_RSEQ_N())
44#define GBL_NARG_(...)
45 GBL_ARG_N(__VA_ARGS__)
46#define GBL_ARG_N(
47 _1, _2, _3, _4, _5, _6, _7, _8, _9,_10,
48 _11,_12,_13,_14,_15,_16,_17,_18,_19,_20,
49 _21,_22,_23,_24,_25,_26,_27,_28,_29,_30,
50 _31,_32,_33,_34,_35,_36,_37,_38,_39,_40,
51 _41,_42,_43,_44,_45,_46,_47,_48,_49,_50,
52 _51,_52,_53,_54,_55,_56,_57,_58,_59,_60,
53 _61,_62,_63,_64,_65,_66,_67,_68,_69,_70,
54 _71,_72,_73,_74,_75,_76,_77,_78,_79,_80, N,...) N
55#define GBL_RSEQ_N()
56 80,
57 79,78,77,76,75,74,73,72,71,70,
58 69,68,67,66,65,64,63,62,61,60,
59 59,58,57,56,55,54,53,52,51,50,
60 49,48,47,46,45,44,43,42,41,40,
61 39,38,37,36,35,34,33,32,31,30,
62 29,28,27,26,25,24,23,22,21,20,
63 19,18,17,16,15,14,13,12,11,10,
64 9,8,7,6,5,4,3,2,1,0
65
66#define GBL_ARG_1(_1, ...) _1
67#define GBL_ARG_2(_1, _2, ...) _2
68#define GBL_ARG_3(_1, _2, _3, ...) _3
69#define GBL_ARG_4(_1, _2, _3, _4, ...) _4
70#define GBL_ARG_5(_1, _2, _3, _4, _5, ...) _5
71#define GBL_ARG_6(_1, _2, _3, _4, _5, _6, ...) _6
72#define GBL_ARG_7(_1, _2, _3, _4, _5, _6, _7, ...) _7
73#define GBL_ARG_8(_1, _2, _3, _4, _5, _6, _7, _8, ...) _8
74#define GBL_ARG_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) _9
75
76// Variadic function overloading
77#define GBL_VA_SLIDING_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, COUNT, ...) COUNT
78
79#define GBL_VA_OVERLOAD_SUFFIXER(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...)
80 GBL_COMPOSE(GBL_VA_SLIDING_ARG, (GBL_EVAL __VA_ARGS__ (), _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) )
81
82#define GBL_VA_OVERLOAD_SUFFIXER_ARGC(...)
83 GBL_VA_OVERLOAD_SUFFIXER(0, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, ##__VA_ARGS__)
84
85#define GBL_VA_OVERLOAD_SUFFIXER_1_N(...)
86 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, N, N, N, N, N, 1, ##__VA_ARGS__)
87
88#define GBL_VA_OVERLOAD_SUFFIXER_0_N(...)
89 GBL_VA_OVERLOAD_SUFFIXER(N, N, N, N, N, N, N, N, N, N, 0, ##__VA_ARGS__)
90
91#define GBL_VA_OVERLOAD_SUFFIXER_2_N(...)
92 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, N, N, N, N, 2, 1, ##__VA_ARGS__)
93
94#define GBL_VA_OVERLOAD_SUFFIXER_3_N(...)
95 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, N, N, N, 3, 2, 1, ##__VA_ARGS__)
96
97#define GBL_VA_OVERLOAD_SUFFIXER_4_N(...)
98 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, N, N, 4, 3, 2, 1, ##__VA_ARGS__)
99
100#define GBL_VA_OVERLOAD_SUFFIXER_5_N(...)
101 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, N, 5, 4, 3, 2, 1, ##__VA_ARGS__)
102
103#define GBL_VA_OVERLOAD_SUFFIXER_6_N(...)
104 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, N, 6, 5, 4, 3, 2, 1, ##__VA_ARGS__)
105
106#define GBL_VA_OVERLOAD_SUFFIXER_7_N(...)
107 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, N, 7, 6, 5, 4, 3, 2, 1, ##__VA_ARGS__)
108
109#define GBL_VA_OVERLOAD_SUFFIXER_8_N(...)
110 GBL_VA_OVERLOAD_SUFFIXER(0, N, N, 8, 7, 6, 5, 4, 3, 2, 1, ##__VA_ARGS__)
111
112#define GBL_VA_OVERLOAD_SUFFIXER_9_N(...)
113 GBL_VA_OVERLOAD_SUFFIXER(0, N, 9, 8, 7, 6, 5, 4, 3, 2, 1, ##__VA_ARGS__)
114
115#define GBL_VA_OVERLOAD_SELECT(BASE, SUFFIXER, ...)
116 GBL_APPEND_SUFFIX(BASE, SUFFIXER(__VA_ARGS__))
117
118#define GBL_VA_OVERLOAD_CALL(BASE, SUFFIXER, ...)
119 GBL_VA_OVERLOAD_SELECT(BASE, SUFFIXER, ## __VA_ARGS__)(__VA_ARGS__)
120
121#define GBL_VA_OVERLOAD_CALL_ARGC(BASE, ...) GBL_VA_OVERLOAD_CALL
122 (BASE, GBL_VA_OVERLOAD_SUFFIXER_ARGC, ## __VA_ARGS__)
123
124// Tuple processing
125#define GBL_TUPLE_FIRST(...) GBL_TUPLE_FIRST__(__VA_ARGS__,)
126#define GBL_TUPLE_FIRST__(X,...) X
127
128#define GBL_TUPLE_REST(X,...) __VA_ARGS__
129
130#define GBL_TUPLE_FOREACH(MACRO_,DATA_,TUPLE_) GBL_GLUE(GBL_TUPLE_FOREACH__,GBL_NARG TUPLE_)(MACRO_,DATA_,TUPLE_)
131
132#define GBL_TUPLE_FOREACH__1(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_)
133#define GBL_TUPLE_FOREACH__2(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__1(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
134#define GBL_TUPLE_FOREACH__3(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__2(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
135#define GBL_TUPLE_FOREACH__4(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__3(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
136#define GBL_TUPLE_FOREACH__5(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__4(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
137#define GBL_TUPLE_FOREACH__6(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__5(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
138#define GBL_TUPLE_FOREACH__7(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__6(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
139#define GBL_TUPLE_FOREACH__8(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__7(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
140#define GBL_TUPLE_FOREACH__9(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__8(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
141#define GBL_TUPLE_FOREACH__10(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__9(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
142#define GBL_TUPLE_FOREACH__11(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__10(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
143#define GBL_TUPLE_FOREACH__12(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__11(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
144#define GBL_TUPLE_FOREACH__13(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__12(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
145#define GBL_TUPLE_FOREACH__14(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__13(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
146#define GBL_TUPLE_FOREACH__15(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__14(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
147#define GBL_TUPLE_FOREACH__16(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__15(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
148#define GBL_TUPLE_FOREACH__17(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__16(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
149#define GBL_TUPLE_FOREACH__18(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__17(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
150#define GBL_TUPLE_FOREACH__19(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__18(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
151#define GBL_TUPLE_FOREACH__20(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__19(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
152#define GBL_TUPLE_FOREACH__21(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__20(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
153#define GBL_TUPLE_FOREACH__22(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__21(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
154#define GBL_TUPLE_FOREACH__23(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__22(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
155#define GBL_TUPLE_FOREACH__24(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__23(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
156#define GBL_TUPLE_FOREACH__25(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__24(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
157#define GBL_TUPLE_FOREACH__26(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__25(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
158#define GBL_TUPLE_FOREACH__27(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__26(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
159#define GBL_TUPLE_FOREACH__28(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__27(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
160#define GBL_TUPLE_FOREACH__29(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__28(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
161#define GBL_TUPLE_FOREACH__30(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__29(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
162#define GBL_TUPLE_FOREACH__31(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__30(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
163#define GBL_TUPLE_FOREACH__32(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__31(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
164#define GBL_TUPLE_FOREACH__33(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__32(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
165#define GBL_TUPLE_FOREACH__34(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__33(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
166#define GBL_TUPLE_FOREACH__35(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__34(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
167#define GBL_TUPLE_FOREACH__36(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__35(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
168#define GBL_TUPLE_FOREACH__37(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__36(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
169#define GBL_TUPLE_FOREACH__38(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__37(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
170#define GBL_TUPLE_FOREACH__39(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__38(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
171#define GBL_TUPLE_FOREACH__40(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__39(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
172#define GBL_TUPLE_FOREACH__41(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__40(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
173#define GBL_TUPLE_FOREACH__42(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__41(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
174#define GBL_TUPLE_FOREACH__43(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__42(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
175#define GBL_TUPLE_FOREACH__44(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__43(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
176#define GBL_TUPLE_FOREACH__45(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__44(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
177#define GBL_TUPLE_FOREACH__46(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__45(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
178#define GBL_TUPLE_FOREACH__47(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__46(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
179#define GBL_TUPLE_FOREACH__48(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__47(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
180#define GBL_TUPLE_FOREACH__49(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__48(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
181#define GBL_TUPLE_FOREACH__50(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__49(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
182#define GBL_TUPLE_FOREACH__51(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__50(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
183#define GBL_TUPLE_FOREACH__52(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__51(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
184#define GBL_TUPLE_FOREACH__53(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__52(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
185#define GBL_TUPLE_FOREACH__54(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__53(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
186#define GBL_TUPLE_FOREACH__55(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__54(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
187#define GBL_TUPLE_FOREACH__56(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__55(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
188#define GBL_TUPLE_FOREACH__57(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__56(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
189#define GBL_TUPLE_FOREACH__58(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__57(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
190#define GBL_TUPLE_FOREACH__59(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__58(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
191#define GBL_TUPLE_FOREACH__60(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__59(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
192#define GBL_TUPLE_FOREACH__61(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__60(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
193#define GBL_TUPLE_FOREACH__62(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__61(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
194#define GBL_TUPLE_FOREACH__63(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__62(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
195#define GBL_TUPLE_FOREACH__64(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__63(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
196#define GBL_TUPLE_FOREACH__65(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__64(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
197#define GBL_TUPLE_FOREACH__66(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__65(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
198#define GBL_TUPLE_FOREACH__67(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__66(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
199#define GBL_TUPLE_FOREACH__68(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__67(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
200#define GBL_TUPLE_FOREACH__69(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__68(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
201#define GBL_TUPLE_FOREACH__70(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__69(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
202#define GBL_TUPLE_FOREACH__71(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__70(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
203#define GBL_TUPLE_FOREACH__72(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__71(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
204#define GBL_TUPLE_FOREACH__73(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__72(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
205#define GBL_TUPLE_FOREACH__74(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__73(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
206#define GBL_TUPLE_FOREACH__75(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__74(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
207#define GBL_TUPLE_FOREACH__76(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__75(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
208#define GBL_TUPLE_FOREACH__77(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__76(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
209#define GBL_TUPLE_FOREACH__78(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__77(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
210#define GBL_TUPLE_FOREACH__79(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__78(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
211#define GBL_TUPLE_FOREACH__80(MACRO_,DATA_,TUPLE_) MACRO_(DATA_,GBL_TUPLE_FIRST TUPLE_) GBL_TUPLE_FOREACH__79(MACRO_,DATA_,(GBL_TUPLE_REST TUPLE_))
212
213#endif // GIMBAL_MACRO_COMPOSITION_H
#define GBL_TUPLE_FOREACH__1(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__23(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__74(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__68(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__48(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__31(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__72(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__54(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__52(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__70(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__76(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__14(MACRO_, DATA_, TUPLE_)
#define GBL_VA_SLIDING_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, COUNT,...)
#define GBL_TUPLE_FOREACH__64(MACRO_, DATA_, TUPLE_)
#define GBL_MACRO_CALL_NULL(...)
#define GBL_VA_OVERLOAD_SELECT(BASE, SUFFIXER,...)
#define GBL_TUPLE_FIRST__(X,...)
#define GBL_TUPLE_FOREACH__50(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__36(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__17(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__62(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__32(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__5(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__15(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__67(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__4(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__27(MACRO_, DATA_, TUPLE_)
#define GBL_VA_OVERLOAD_SUFFIXER(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10,...)
#define GBL_COMPOSE(NAME, ARGS)
#define GBL_TUPLE_FOREACH__47(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__13(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__49(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_REST(X,...)
#define GBL_TUPLE_FOREACH__55(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__16(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__40(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__42(MACRO_, DATA_, TUPLE_)
#define GBL_STRINGIFY_(a)
#define GBL_NARG_(...)
#define GBL_TUPLE_FOREACH__56(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__28(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__44(MACRO_, DATA_, TUPLE_)
#define GBL_STRINGIFY(a)
#define GBL_TUPLE_FOREACH__73(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__22(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__60(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__9(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__34(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__57(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FIRST(...)
#define GBL_TUPLE_FOREACH__33(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__12(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__18(MACRO_, DATA_, TUPLE_)
#define GBL_GLUE(A, B)
#define GBL_NARG(...)
#define GBL_TUPLE_FOREACH__21(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__6(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__35(MACRO_, DATA_, TUPLE_)
#define GBL_CAT(A, B)
#define GBL_TUPLE_FOREACH__59(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__26(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__8(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__30(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__10(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__25(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__75(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__7(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__3(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__19(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__20(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__46(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__61(MACRO_, DATA_, TUPLE_)
#define GBL_RSEQ_N()
#define GBL_TUPLE_FOREACH__65(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__24(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__37(MACRO_, DATA_, TUPLE_)
#define GBL_MACRO_CALL(macro,...)
#define GBL_TUPLE_FOREACH__78(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__51(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__43(MACRO_, DATA_, TUPLE_)
#define GBL_APPEND_SUFFIX(NAME, NUM)
#define GBL_TUPLE_FOREACH__58(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__63(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__69(MACRO_, DATA_, TUPLE_)
#define GBL_VA_OVERLOAD_SUFFIXER_ARGC(...)
#define GBL_TUPLE_FOREACH__45(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__66(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__39(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__41(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__38(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__79(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__11(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__71(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__53(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__77(MACRO_, DATA_, TUPLE_)
#define GBL_ARG_N(_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, N,...)
#define GBL_TUPLE_FOREACH__2(MACRO_, DATA_, TUPLE_)
#define GBL_TUPLE_FOREACH__29(MACRO_, DATA_, TUPLE_)
#define GBL_EVAL(...)