34 #define P00_PRE1(_0, ...) _0
50 #define P99_SELS(N, ...) P99_PASTE2(P00_PRE, N)(__VA_ARGS__)
52 #define P00_SKP0(...) __VA_ARGS__
53 #define P00_SKP1(_0, ...) __VA_ARGS__
59 #define P99_SKP(N, ...) P99_PASTE2(P00_SKP, N)(__VA_ARGS__)
67 #define P99_SUB(N, L, ...) P00_SUB(L, P99_SKP(N, __VA_ARGS__))
68 #define P00_SUB(L, ...) P99_SELS(L, __VA_ARGS__)
76 #define P99_CHS(N, ...) P00_CHS(P99_SKP(N, __VA_ARGS__))
77 #define P00_CHS(...) P00_CHS_(__VA_ARGS__,)
78 #define P00_CHS_(X, ...) X
90 #define P99_DUPL(...) P99_PASTE2(P00_DUPL_0_, P99_IS_LT(P99_NARG(__VA_ARGS__), 2))(__VA_ARGS__)
92 #define P00_DUPL_0_0(...) P00_DUPL(__VA_ARGS__)
93 #define P00_DUPL_0_1(...)
95 #define P00_DUPL_1(...) __VA_ARGS__
97 #define P00_DUPL(N, ...) P00_DUPL_ ## N(__VA_ARGS__)
108 P00_DOCUMENT_NUMBER_ARGUMENT(
P99_REP, 0)
109 P00_DOCUMENT_MULTIPLE_ARGUMENT(
P99_REP, 1)
110 P00_DOCUMENT_MULTIPLE_ARGUMENT(
P99_REP, 2)
111 #define P99_REP(...) P99_PASTE2(P00_REP_0_, P99_IS_LT(P99_NARG(__VA_ARGS__), 2))(__VA_ARGS__)
113 #define P00_REP_0_0(...) P00_REP(__VA_ARGS__)
114 #define P00_REP_0_1(...)
116 #define P00_REP_1(...) __VA_ARGS__
118 #define P00_REP(N, ...) P00_REP_ ## N(__VA_ARGS__)
120 #define P99_BRACKETS(...) P99_PASTE2(P00_BRACKETS_, P99_IS_LT(P99_NARG(__VA_ARGS__), 1))(P99_NARG(__VA_ARGS__), __VA_ARGS__)
122 #define P00_BRACKETS_0(...) P00_BRACKET(__VA_ARGS__)
123 #define P00_BRACKETS_1(...)
125 #define P00_BRACKET_1(...) [__VA_ARGS__]
127 #define P00_BRACKET(N, ...) P00_BRACKET_ ## N(__VA_ARGS__)
129 #define P99_PARENS(...) P99_PASTE2(P00_PARENS_, P99_IS_LT(P99_NARG(__VA_ARGS__), 1))(P99_NARG(__VA_ARGS__), __VA_ARGS__)
131 #define P00_PARENS_0(...) P00_PAREN(__VA_ARGS__)
132 #define P00_PARENS_1(...)
134 #define P00_PAREN_1(...) [__VA_ARGS__]
136 #define P00_PAREN(N, ...) P00_PAREN_ ## N(__VA_ARGS__)
138 #define P99_BRACES(...) P99_PASTE2(P00_BRACES_, P99_IS_LT(P99_NARG(__VA_ARGS__), 1))(P99_NARG(__VA_ARGS__), __VA_ARGS__)
140 #define P00_BRACES_0(...) P00_BRACE(__VA_ARGS__)
141 #define P00_BRACES_1(...)
143 #define P00_BRACE_1(...) [__VA_ARGS__]
145 #define P00_BRACE(N, ...) P00_BRACE_ ## N(__VA_ARGS__)
147 #define P00_MAP_1(MAC, SEP, ...) MAC(__VA_ARGS__)
148 #define P00_MAP_0(...)
150 #define P00_MAP_0_(N, MAC, SEP, ...) P00_MAP_ ## N(MAC, SEP, __VA_ARGS__)
152 #define P00_MAP_(...) P00_MAP_0_(__VA_ARGS__)