OLD | NEW |
| (Empty) |
1 // Copyright 2010 The RE2 Authors. All Rights Reserved. | |
2 // Use of this source code is governed by a BSD-style | |
3 // license that can be found in the LICENSE file. | |
4 | |
5 #ifndef RE2_VARIADIC_FUNCTION_H_ | |
6 #define RE2_VARIADIC_FUNCTION_H_ | |
7 | |
8 namespace re2 { | |
9 | |
10 template <typename Result, typename Param0, typename Param1, typename Arg, | |
11 Result (*Func)(Param0, Param1, const Arg* const [], int count)> | |
12 class VariadicFunction2 { | |
13 public: | |
14 Result operator()(Param0 p0, Param1 p1) const { | |
15 return Func(p0, p1, 0, 0); | |
16 } | |
17 | |
18 Result operator()(Param0 p0, Param1 p1, const Arg& a0) const { | |
19 const Arg* const args[] = { &a0 }; | |
20 return Func(p0, p1, args, 1); | |
21 } | |
22 | |
23 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1) const { | |
24 const Arg* const args[] = { &a0, &a1 }; | |
25 return Func(p0, p1, args, 2); | |
26 } | |
27 | |
28 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
29 const Arg& a2) const { | |
30 const Arg* const args[] = { &a0, &a1, &a2 }; | |
31 return Func(p0, p1, args, 3); | |
32 } | |
33 | |
34 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
35 const Arg& a2, const Arg& a3) const { | |
36 const Arg* const args[] = { &a0, &a1, &a2, &a3 }; | |
37 return Func(p0, p1, args, 4); | |
38 } | |
39 | |
40 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
41 const Arg& a2, const Arg& a3, const Arg& a4) const { | |
42 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4 }; | |
43 return Func(p0, p1, args, 5); | |
44 } | |
45 | |
46 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
47 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5) const { | |
48 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5 }; | |
49 return Func(p0, p1, args, 6); | |
50 } | |
51 | |
52 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
53 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
54 const Arg& a6) const { | |
55 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6 }; | |
56 return Func(p0, p1, args, 7); | |
57 } | |
58 | |
59 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
60 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
61 const Arg& a6, const Arg& a7) const { | |
62 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7 }; | |
63 return Func(p0, p1, args, 8); | |
64 } | |
65 | |
66 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
67 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
68 const Arg& a6, const Arg& a7, const Arg& a8) const { | |
69 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8 }; | |
70 return Func(p0, p1, args, 9); | |
71 } | |
72 | |
73 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
74 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
75 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9) const { | |
76 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
77 &a9 }; | |
78 return Func(p0, p1, args, 10); | |
79 } | |
80 | |
81 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
82 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
83 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
84 const Arg& a10) const { | |
85 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
86 &a9, &a10 }; | |
87 return Func(p0, p1, args, 11); | |
88 } | |
89 | |
90 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
91 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
92 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
93 const Arg& a10, const Arg& a11) const { | |
94 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
95 &a9, &a10, &a11 }; | |
96 return Func(p0, p1, args, 12); | |
97 } | |
98 | |
99 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
100 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
101 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
102 const Arg& a10, const Arg& a11, const Arg& a12) const { | |
103 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
104 &a9, &a10, &a11, &a12 }; | |
105 return Func(p0, p1, args, 13); | |
106 } | |
107 | |
108 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
109 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
110 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
111 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13) const { | |
112 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
113 &a9, &a10, &a11, &a12, &a13 }; | |
114 return Func(p0, p1, args, 14); | |
115 } | |
116 | |
117 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
118 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
119 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
120 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
121 const Arg& a14) const { | |
122 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
123 &a9, &a10, &a11, &a12, &a13, &a14 }; | |
124 return Func(p0, p1, args, 15); | |
125 } | |
126 | |
127 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
128 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
129 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
130 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
131 const Arg& a14, const Arg& a15) const { | |
132 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
133 &a9, &a10, &a11, &a12, &a13, &a14, &a15 }; | |
134 return Func(p0, p1, args, 16); | |
135 } | |
136 | |
137 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
138 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
139 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
140 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
141 const Arg& a14, const Arg& a15, const Arg& a16) const { | |
142 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
143 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16 }; | |
144 return Func(p0, p1, args, 17); | |
145 } | |
146 | |
147 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
148 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
149 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
150 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
151 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17) const { | |
152 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
153 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17 }; | |
154 return Func(p0, p1, args, 18); | |
155 } | |
156 | |
157 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
158 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
159 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
160 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
161 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
162 const Arg& a18) const { | |
163 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
164 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18 }; | |
165 return Func(p0, p1, args, 19); | |
166 } | |
167 | |
168 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
169 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
170 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
171 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
172 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
173 const Arg& a18, const Arg& a19) const { | |
174 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
175 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19 }; | |
176 return Func(p0, p1, args, 20); | |
177 } | |
178 | |
179 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
180 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
181 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
182 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
183 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
184 const Arg& a18, const Arg& a19, const Arg& a20) const { | |
185 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
186 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, | |
187 &a20 }; | |
188 return Func(p0, p1, args, 21); | |
189 } | |
190 | |
191 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
192 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
193 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
194 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
195 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
196 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21) const { | |
197 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
198 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
199 &a21 }; | |
200 return Func(p0, p1, args, 22); | |
201 } | |
202 | |
203 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
204 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
205 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
206 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
207 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
208 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
209 const Arg& a22) const { | |
210 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
211 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
212 &a21, &a22 }; | |
213 return Func(p0, p1, args, 23); | |
214 } | |
215 | |
216 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
217 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
218 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
219 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
220 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
221 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
222 const Arg& a22, const Arg& a23) const { | |
223 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
224 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
225 &a21, &a22, &a23 }; | |
226 return Func(p0, p1, args, 24); | |
227 } | |
228 | |
229 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
230 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
231 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
232 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
233 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
234 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
235 const Arg& a22, const Arg& a23, const Arg& a24) const { | |
236 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
237 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
238 &a21, &a22, &a23, &a24 }; | |
239 return Func(p0, p1, args, 25); | |
240 } | |
241 | |
242 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
243 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
244 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
245 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
246 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
247 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
248 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25) const { | |
249 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
250 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
251 &a21, &a22, &a23, &a24, &a25 }; | |
252 return Func(p0, p1, args, 26); | |
253 } | |
254 | |
255 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
256 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
257 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
258 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
259 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
260 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
261 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
262 const Arg& a26) const { | |
263 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
264 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
265 &a21, &a22, &a23, &a24, &a25, &a26 }; | |
266 return Func(p0, p1, args, 27); | |
267 } | |
268 | |
269 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
270 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
271 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
272 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
273 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
274 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
275 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
276 const Arg& a26, const Arg& a27) const { | |
277 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
278 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
279 &a21, &a22, &a23, &a24, &a25, &a26, &a27 }; | |
280 return Func(p0, p1, args, 28); | |
281 } | |
282 | |
283 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
284 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
285 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
286 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
287 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
288 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
289 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
290 const Arg& a26, const Arg& a27, const Arg& a28) const { | |
291 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
292 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
293 &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28 }; | |
294 return Func(p0, p1, args, 29); | |
295 } | |
296 | |
297 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
298 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
299 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
300 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
301 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
302 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
303 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
304 const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29) const { | |
305 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
306 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
307 &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29 }; | |
308 return Func(p0, p1, args, 30); | |
309 } | |
310 | |
311 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
312 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
313 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
314 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
315 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
316 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
317 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
318 const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29, | |
319 const Arg& a30) const { | |
320 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
321 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
322 &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29, &a30 }; | |
323 return Func(p0, p1, args, 31); | |
324 } | |
325 | |
326 Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1, | |
327 const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5, | |
328 const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9, | |
329 const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13, | |
330 const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17, | |
331 const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21, | |
332 const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25, | |
333 const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29, | |
334 const Arg& a30, const Arg& a31) const { | |
335 const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, | |
336 &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20, | |
337 &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29, &a30, &a31 }; | |
338 return Func(p0, p1, args, 32); | |
339 } | |
340 }; | |
341 | |
342 } // namespace re2 | |
343 | |
344 #endif // RE2_VARIADIC_FUNCTION_H_ | |
OLD | NEW |