Loading...
Searching...
No Matches
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,
12// value4...)
13//
14// As you can see, even the macro can't distinguish whether those
15// macro arguments are a set of two, macro developer's want to.
16// Might can be used in this situation.
17//
18// usage:
19// VARG2 macro assumes that your macro's arguments were paired
20// with two arguments as one. like,
21//
22// MyMacro( int, value1, float, value2, char,
23// value3...
24// X_1 Y_1 X_2 Y_2 X_3 Y_3
25// so, at example above, BY_GET_VARG2_X_2 will be substitued
26// to 'float'.
27//
28// argument getter defines:
29// Yeah, I know. This is looks somewhat stupid.
30// if you have better idea, please let me know. I beg you.
31#define BY_GET_VARG_1(_1, ...) _1
32#define BY_GET_VARG_2(_1, _2, ...) _2
33#define BY_GET_VARG_3(_1, _2, _3, ...) _3
34#define BY_GET_VARG_4(_1, _2, _3, _4, ...) _4
35#define BY_GET_VARG_5(_1, _2, _3, _4, _5, ...) _5
36#define BY_GET_VARG_6(_1, _2, _3, _4, _5, _6, ...) _6
37#define BY_GET_VARG_7(_1, _2, _3, _4, _5, _6, _7, ...) _7
38#define BY_GET_VARG_8(_1, _2, _3, _4, _5, _6, _7, _8, ...) _8
39#define BY_GET_VARG_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) _9
40#define BY_GET_VARG_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10
41#define BY_GET_VARG_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
42#define BY_GET_VARG_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _12
43#define BY_GET_VARG_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) _13
44#define BY_GET_VARG_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _14
45#define BY_GET_VARG_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) _15
46#define BY_GET_VARG_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _16
47#define BY_GET_VARG_17(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _17
48#define BY_GET_VARG_18(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _18
49#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
50#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, ...) \
51 _20
52#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, \
53 ...) \
54 _21
55#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, \
56 _22, ...) \
57 _22
58#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, \
59 _22, _23, ...) \
60 _23
61#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, \
62 _22, _23, _24, ...) \
63 _24
64#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, \
65 _22, _23, _24, _25, ...) \
66 _25
67#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, \
68 _22, _23, _24, _25, _26, ...) \
69 _26
70#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, \
71 _22, _23, _24, _25, _26, _27, ...) \
72 _27
73#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, \
74 _22, _23, _24, _25, _26, _27, _28, ...) \
75 _28
76#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, \
77 _22, _23, _24, _25, _26, _27, _28, _29, ...) \
78 _29
79#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, \
80 _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
81 _30
82#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, \
83 _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, ...) \
84 _31
85#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, \
86 _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
87 _32
88
89#define BY_GET_VARG2_X_1(_1, _2, ...) _1
90#define BY_GET_VARG2_X_2(_1, _2, _3, _4, ...) _3
91#define BY_GET_VARG2_X_3(_1, _2, _3, _4, _5, _6, ...) _5
92#define BY_GET_VARG2_X_4(_1, _2, _3, _4, _5, _6, _7, _8, ...) _7
93#define BY_GET_VARG2_X_5(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _9
94#define BY_GET_VARG2_X_6(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _11
95#define BY_GET_VARG2_X_7(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _13
96#define BY_GET_VARG2_X_8(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _15
97#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
98#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, \
99 ...) \
100 _19
101#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, \
102 _21, _22, ...) \
103 _21
104#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, \
105 _21, _22, _23, _24, ...) \
106 _23
107#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, \
108 _21, _22, _23, _24, _25, _26, ...) \
109 _25
110#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, \
111 _21, _22, _23, _24, _25, _26, _27, _28, ...) \
112 _27
113#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, \
114 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
115 _29
116#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, \
117 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
118 _31
119
120#define BY_GET_VARG2_Y_1(_1, _2, ...) _2
121#define BY_GET_VARG2_Y_2(_1, _2, _3, _4, ...) _5
122#define BY_GET_VARG2_Y_3(_1, _2, _3, _4, _5, _6, ...) _6
123#define BY_GET_VARG2_Y_4(_1, _2, c, _4, _5, _6, _7, _8, ...) _8
124#define BY_GET_VARG2_Y_5(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10
125#define BY_GET_VARG2_Y_6(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _12
126#define BY_GET_VARG2_Y_7(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _14
127#define BY_GET_VARG2_Y_8(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _16
128#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
129#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, \
130 ...) \
131 _20
132#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, \
133 _21, _22, ...) \
134 _22
135#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, \
136 _21, _22, _23, _24, ...) \
137 _24
138#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, \
139 _21, _22, _23, _24, _25, _26, ...) \
140 _26
141#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, \
142 _21, _22, _23, _24, _25, _26, _27, _28, ...) \
143 _28
144#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, \
145 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) \
146 _30
147#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, \
148 _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) \
149 _32
to Top