argGetter.hpp
Go to the documentation of this file.
1
2#pragma once
3
4// argument getter:
5// this macro can pick designated indexing argument among varidics.
6//
7// VARG2?:
8// BY_GET_VARG2_... are created for assuming varidic arguments
9// are paired. for instance,
10//
11// MyMacro(int, value1, float, value2, char, value3, double, value4...)
12//
13// As you can see, even the macro can't distinguish whether those macro
14// arguments are a set of two, macro developer's want to.
15// Might can be used in this situation.
16//
17// usage:
18// VARG2 macro assumes that your macro's arguments were paired with
19// two arguments as one. like,
20//
21// MyMacro( int, value1, float, value2, char, value3...
22// X_1 Y_1 X_2 Y_2 X_3 Y_3
23// so, at example above, BY_GET_VARG2_X_2 will be substitued
24// to 'float'.
25//
26// argument getter defines:
27// Yeah, I know. This is looks somewhat stupid.
28// if you have better idea, please let me know. I beg you.
29#define BY_GET_VARG_1(_1, ...) _1
30#define BY_GET_VARG_2(_1, _2, ...) _2
31#define BY_GET_VARG_3(_1, _2, _3, ...) _3
32#define BY_GET_VARG_4(_1, _2, _3, _4, ...) _4
33#define BY_GET_VARG_5(_1, _2, _3, _4, _5, ...) _5
34#define BY_GET_VARG_6(_1, _2, _3, _4, _5, _6, ...) _6
35#define BY_GET_VARG_7(_1, _2, _3, _4, _5, _6, _7, ...) _7
36#define BY_GET_VARG_8(_1, _2, _3, _4, _5, _6, _7, _8, ...) _8
37#define BY_GET_VARG_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) _9
38#define BY_GET_VARG_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10
39#define BY_GET_VARG_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
40#define BY_GET_VARG_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _12
41#define BY_GET_VARG_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) _13
42#define BY_GET_VARG_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _14
43#define BY_GET_VARG_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) _15
44#define BY_GET_VARG_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _16
45#define BY_GET_VARG_17(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _17
46#define BY_GET_VARG_18(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _18
47#define BY_GET_VARG_19(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) _19
48#define BY_GET_VARG_20(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, ...) \
49 _20
50#define BY_GET_VARG_21(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
51 ...) \
52 _21
53#define BY_GET_VARG_22(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
54 _22, ...) \
55 _22
56#define BY_GET_VARG_23(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
57 _22, _23, ...) \
58 _23
59#define BY_GET_VARG_24(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
60 _22, _23, _24, ...) \
61 _24
62#define BY_GET_VARG_25(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
63 _22, _23, _24, _25, ...) \
64 _25
65#define BY_GET_VARG_26(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
66 _22, _23, _24, _25, _26, ...) \
67 _26
68#define BY_GET_VARG_27(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
69 _22, _23, _24, _25, _26, _27, ...) \
70 _27
71#define BY_GET_VARG_28(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
72 _22, _23, _24, _25, _26, _27, _28, ...) \
73 _28
74#define BY_GET_VARG_29(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
75 _22, _23, _24, _25, _26, _27, _28, _29, ...) \
76 _29
77#define BY_GET_VARG_30(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
78 _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
79 _30
80#define BY_GET_VARG_31(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
81 _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, ...) \
82 _31
83#define BY_GET_VARG_32(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, \
84 _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
85 _32
86
87#define BY_GET_VARG2_X_1(_1, _2, ...) _1
88#define BY_GET_VARG2_X_2(_1, _2, _3, _4, ...) _3
89#define BY_GET_VARG2_X_3(_1, _2, _3, _4, _5, _6, ...) _5
90#define BY_GET_VARG2_X_4(_1, _2, _3, _4, _5, _6, _7, _8, ...) _7
91#define BY_GET_VARG2_X_5(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _9
92#define BY_GET_VARG2_X_6(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _11
93#define BY_GET_VARG2_X_7(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _13
94#define BY_GET_VARG2_X_8(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _15
95#define BY_GET_VARG2_X_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _17
96#define BY_GET_VARG2_X_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
97 ...) \
98 _19
99#define BY_GET_VARG2_X_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
100 _21, _22, ...) \
101 _21
102#define BY_GET_VARG2_X_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
103 _21, _22, _23, _24, ...) \
104 _23
105#define BY_GET_VARG2_X_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
106 _21, _22, _23, _24, _25, _26, ...) \
107 _25
108#define BY_GET_VARG2_X_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
109 _21, _22, _23, _24, _25, _26, _27, _28, ...) \
110 _27
111#define BY_GET_VARG2_X_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
112 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
113 _29
114#define BY_GET_VARG2_X_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
115 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
116 _31
117
118#define BY_GET_VARG2_Y_1(_1, _2, ...) _2
119#define BY_GET_VARG2_Y_2(_1, _2, _3, _4, ...) _5
120#define BY_GET_VARG2_Y_3(_1, _2, _3, _4, _5, _6, ...) _6
121#define BY_GET_VARG2_Y_4(_1, _2, c, _4, _5, _6, _7, _8, ...) _8
122#define BY_GET_VARG2_Y_5(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10
123#define BY_GET_VARG2_Y_6(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _12
124#define BY_GET_VARG2_Y_7(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _14
125#define BY_GET_VARG2_Y_8(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _16
126#define BY_GET_VARG2_Y_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _18
127#define BY_GET_VARG2_Y_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
128 ...) \
129 _20
130#define BY_GET_VARG2_Y_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
131 _21, _22, ...) \
132 _22
133#define BY_GET_VARG2_Y_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
134 _21, _22, _23, _24, ...) \
135 _24
136#define BY_GET_VARG2_Y_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
137 _21, _22, _23, _24, _25, _26, ...) \
138 _26
139#define BY_GET_VARG2_Y_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
140 _21, _22, _23, _24, _25, _26, _27, _28, ...) \
141 _28
142#define BY_GET_VARG2_Y_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
143 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
144 _30
145#define BY_GET_VARG2_Y_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
146 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
147 _32