Line data Source code
1 : // This file was GENERATED by command:
2 : // pump.py gtest-param-util-generated.h.pump
3 : // DO NOT EDIT BY HAND!!!
4 :
5 : // Copyright 2008 Google Inc.
6 : // All Rights Reserved.
7 : //
8 : // Redistribution and use in source and binary forms, with or without
9 : // modification, are permitted provided that the following conditions are
10 : // met:
11 : //
12 : // * Redistributions of source code must retain the above copyright
13 : // notice, this list of conditions and the following disclaimer.
14 : // * Redistributions in binary form must reproduce the above
15 : // copyright notice, this list of conditions and the following disclaimer
16 : // in the documentation and/or other materials provided with the
17 : // distribution.
18 : // * Neither the name of Google Inc. nor the names of its
19 : // contributors may be used to endorse or promote products derived from
20 : // this software without specific prior written permission.
21 : //
22 : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 : // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 : // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 : // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 : // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 : // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 : // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 : // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 : // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 : // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 : //
34 : // Author: vladl@google.com (Vlad Losev)
35 :
36 : // Type and function utilities for implementing parameterized tests.
37 : // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
38 : //
39 : // Currently Google Test supports at most 50 arguments in Values,
40 : // and at most 10 arguments in Combine. Please contact
41 : // googletestframework@googlegroups.com if you need more.
42 : // Please note that the number of arguments to Combine is limited
43 : // by the maximum arity of the implementation of tr1::tuple which is
44 : // currently set at 10.
45 :
46 : #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47 : #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48 :
49 : // scripts/fuse_gtest.py depends on gtest's own header being #included
50 : // *unconditionally*. Therefore these #includes cannot be moved
51 : // inside #if GTEST_HAS_PARAM_TEST.
52 : #include "gtest/internal/gtest-param-util.h"
53 : #include "gtest/internal/gtest-port.h"
54 :
55 : #if GTEST_HAS_PARAM_TEST
56 :
57 : namespace testing {
58 :
59 : // Forward declarations of ValuesIn(), which is implemented in
60 : // include/gtest/gtest-param-test.h.
61 : template <typename ForwardIterator>
62 : internal::ParamGenerator<
63 : typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
64 : ValuesIn(ForwardIterator begin, ForwardIterator end);
65 :
66 : template <typename T, size_t N>
67 : internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
68 :
69 : template <class Container>
70 : internal::ParamGenerator<typename Container::value_type> ValuesIn(
71 : const Container& container);
72 :
73 : namespace internal {
74 :
75 : // Used in the Values() function to provide polymorphic capabilities.
76 : template <typename T1>
77 : class ValueArray1 {
78 : public:
79 12 : explicit ValueArray1(T1 v1) : v1_(v1) {}
80 :
81 : template <typename T>
82 12 : operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
83 :
84 : private:
85 : // No implementation - assignment is unsupported.
86 : void operator=(const ValueArray1& other);
87 :
88 : const T1 v1_;
89 : };
90 :
91 : template <typename T1, typename T2>
92 : class ValueArray2 {
93 : public:
94 27 : ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
95 :
96 : template <typename T>
97 27 : operator ParamGenerator<T>() const {
98 27 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
99 27 : return ValuesIn(array);
100 : }
101 :
102 : private:
103 : // No implementation - assignment is unsupported.
104 : void operator=(const ValueArray2& other);
105 :
106 : const T1 v1_;
107 : const T2 v2_;
108 : };
109 :
110 : template <typename T1, typename T2, typename T3>
111 : class ValueArray3 {
112 : public:
113 : ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
114 :
115 : template <typename T>
116 : operator ParamGenerator<T>() const {
117 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
118 : static_cast<T>(v3_)};
119 : return ValuesIn(array);
120 : }
121 :
122 : private:
123 : // No implementation - assignment is unsupported.
124 : void operator=(const ValueArray3& other);
125 :
126 : const T1 v1_;
127 : const T2 v2_;
128 : const T3 v3_;
129 : };
130 :
131 : template <typename T1, typename T2, typename T3, typename T4>
132 : class ValueArray4 {
133 : public:
134 11 : ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
135 11 : v4_(v4) {}
136 :
137 : template <typename T>
138 11 : operator ParamGenerator<T>() const {
139 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
140 11 : static_cast<T>(v3_), static_cast<T>(v4_)};
141 11 : return ValuesIn(array);
142 : }
143 :
144 : private:
145 : // No implementation - assignment is unsupported.
146 : void operator=(const ValueArray4& other);
147 :
148 : const T1 v1_;
149 : const T2 v2_;
150 : const T3 v3_;
151 : const T4 v4_;
152 : };
153 :
154 : template <typename T1, typename T2, typename T3, typename T4, typename T5>
155 : class ValueArray5 {
156 : public:
157 : ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
158 : v4_(v4), v5_(v5) {}
159 :
160 : template <typename T>
161 : operator ParamGenerator<T>() const {
162 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
163 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
164 : return ValuesIn(array);
165 : }
166 :
167 : private:
168 : // No implementation - assignment is unsupported.
169 : void operator=(const ValueArray5& other);
170 :
171 : const T1 v1_;
172 : const T2 v2_;
173 : const T3 v3_;
174 : const T4 v4_;
175 : const T5 v5_;
176 : };
177 :
178 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
179 : typename T6>
180 : class ValueArray6 {
181 : public:
182 : ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
183 : v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
184 :
185 : template <typename T>
186 : operator ParamGenerator<T>() const {
187 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
188 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
189 : static_cast<T>(v6_)};
190 : return ValuesIn(array);
191 : }
192 :
193 : private:
194 : // No implementation - assignment is unsupported.
195 : void operator=(const ValueArray6& other);
196 :
197 : const T1 v1_;
198 : const T2 v2_;
199 : const T3 v3_;
200 : const T4 v4_;
201 : const T5 v5_;
202 : const T6 v6_;
203 : };
204 :
205 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
206 : typename T6, typename T7>
207 : class ValueArray7 {
208 : public:
209 : ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
210 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
211 :
212 : template <typename T>
213 : operator ParamGenerator<T>() const {
214 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
215 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
216 : static_cast<T>(v6_), static_cast<T>(v7_)};
217 : return ValuesIn(array);
218 : }
219 :
220 : private:
221 : // No implementation - assignment is unsupported.
222 : void operator=(const ValueArray7& other);
223 :
224 : const T1 v1_;
225 : const T2 v2_;
226 : const T3 v3_;
227 : const T4 v4_;
228 : const T5 v5_;
229 : const T6 v6_;
230 : const T7 v7_;
231 : };
232 :
233 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
234 : typename T6, typename T7, typename T8>
235 : class ValueArray8 {
236 : public:
237 : ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
238 : T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
239 : v8_(v8) {}
240 :
241 : template <typename T>
242 : operator ParamGenerator<T>() const {
243 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
244 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
245 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
246 : return ValuesIn(array);
247 : }
248 :
249 : private:
250 : // No implementation - assignment is unsupported.
251 : void operator=(const ValueArray8& other);
252 :
253 : const T1 v1_;
254 : const T2 v2_;
255 : const T3 v3_;
256 : const T4 v4_;
257 : const T5 v5_;
258 : const T6 v6_;
259 : const T7 v7_;
260 : const T8 v8_;
261 : };
262 :
263 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
264 : typename T6, typename T7, typename T8, typename T9>
265 : class ValueArray9 {
266 : public:
267 : ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
268 : T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
269 : v8_(v8), v9_(v9) {}
270 :
271 : template <typename T>
272 : operator ParamGenerator<T>() const {
273 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
274 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
275 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
276 : static_cast<T>(v9_)};
277 : return ValuesIn(array);
278 : }
279 :
280 : private:
281 : // No implementation - assignment is unsupported.
282 : void operator=(const ValueArray9& other);
283 :
284 : const T1 v1_;
285 : const T2 v2_;
286 : const T3 v3_;
287 : const T4 v4_;
288 : const T5 v5_;
289 : const T6 v6_;
290 : const T7 v7_;
291 : const T8 v8_;
292 : const T9 v9_;
293 : };
294 :
295 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
296 : typename T6, typename T7, typename T8, typename T9, typename T10>
297 : class ValueArray10 {
298 : public:
299 : ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
300 : T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
301 : v8_(v8), v9_(v9), v10_(v10) {}
302 :
303 : template <typename T>
304 : operator ParamGenerator<T>() const {
305 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
306 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
307 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
308 : static_cast<T>(v9_), static_cast<T>(v10_)};
309 : return ValuesIn(array);
310 : }
311 :
312 : private:
313 : // No implementation - assignment is unsupported.
314 : void operator=(const ValueArray10& other);
315 :
316 : const T1 v1_;
317 : const T2 v2_;
318 : const T3 v3_;
319 : const T4 v4_;
320 : const T5 v5_;
321 : const T6 v6_;
322 : const T7 v7_;
323 : const T8 v8_;
324 : const T9 v9_;
325 : const T10 v10_;
326 : };
327 :
328 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
329 : typename T6, typename T7, typename T8, typename T9, typename T10,
330 : typename T11>
331 : class ValueArray11 {
332 : public:
333 : ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
334 : T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
335 : v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
336 :
337 : template <typename T>
338 : operator ParamGenerator<T>() const {
339 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
340 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
341 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
342 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
343 : return ValuesIn(array);
344 : }
345 :
346 : private:
347 : // No implementation - assignment is unsupported.
348 : void operator=(const ValueArray11& other);
349 :
350 : const T1 v1_;
351 : const T2 v2_;
352 : const T3 v3_;
353 : const T4 v4_;
354 : const T5 v5_;
355 : const T6 v6_;
356 : const T7 v7_;
357 : const T8 v8_;
358 : const T9 v9_;
359 : const T10 v10_;
360 : const T11 v11_;
361 : };
362 :
363 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
364 : typename T6, typename T7, typename T8, typename T9, typename T10,
365 : typename T11, typename T12>
366 : class ValueArray12 {
367 : public:
368 : ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
369 : T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
370 : v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
371 :
372 : template <typename T>
373 : operator ParamGenerator<T>() const {
374 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
375 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
376 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
377 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
378 : static_cast<T>(v12_)};
379 : return ValuesIn(array);
380 : }
381 :
382 : private:
383 : // No implementation - assignment is unsupported.
384 : void operator=(const ValueArray12& other);
385 :
386 : const T1 v1_;
387 : const T2 v2_;
388 : const T3 v3_;
389 : const T4 v4_;
390 : const T5 v5_;
391 : const T6 v6_;
392 : const T7 v7_;
393 : const T8 v8_;
394 : const T9 v9_;
395 : const T10 v10_;
396 : const T11 v11_;
397 : const T12 v12_;
398 : };
399 :
400 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
401 : typename T6, typename T7, typename T8, typename T9, typename T10,
402 : typename T11, typename T12, typename T13>
403 : class ValueArray13 {
404 : public:
405 : ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
406 : T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
407 : v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
408 : v12_(v12), v13_(v13) {}
409 :
410 : template <typename T>
411 : operator ParamGenerator<T>() const {
412 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
413 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
414 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
415 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
416 : static_cast<T>(v12_), static_cast<T>(v13_)};
417 : return ValuesIn(array);
418 : }
419 :
420 : private:
421 : // No implementation - assignment is unsupported.
422 : void operator=(const ValueArray13& other);
423 :
424 : const T1 v1_;
425 : const T2 v2_;
426 : const T3 v3_;
427 : const T4 v4_;
428 : const T5 v5_;
429 : const T6 v6_;
430 : const T7 v7_;
431 : const T8 v8_;
432 : const T9 v9_;
433 : const T10 v10_;
434 : const T11 v11_;
435 : const T12 v12_;
436 : const T13 v13_;
437 : };
438 :
439 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
440 : typename T6, typename T7, typename T8, typename T9, typename T10,
441 : typename T11, typename T12, typename T13, typename T14>
442 : class ValueArray14 {
443 : public:
444 : ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
445 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
446 : v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
447 : v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
448 :
449 : template <typename T>
450 : operator ParamGenerator<T>() const {
451 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
452 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
453 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
454 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
455 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
456 : return ValuesIn(array);
457 : }
458 :
459 : private:
460 : // No implementation - assignment is unsupported.
461 : void operator=(const ValueArray14& other);
462 :
463 : const T1 v1_;
464 : const T2 v2_;
465 : const T3 v3_;
466 : const T4 v4_;
467 : const T5 v5_;
468 : const T6 v6_;
469 : const T7 v7_;
470 : const T8 v8_;
471 : const T9 v9_;
472 : const T10 v10_;
473 : const T11 v11_;
474 : const T12 v12_;
475 : const T13 v13_;
476 : const T14 v14_;
477 : };
478 :
479 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
480 : typename T6, typename T7, typename T8, typename T9, typename T10,
481 : typename T11, typename T12, typename T13, typename T14, typename T15>
482 : class ValueArray15 {
483 : public:
484 : ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
485 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
486 : v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
487 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
488 :
489 : template <typename T>
490 : operator ParamGenerator<T>() const {
491 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
492 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
493 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
494 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
495 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
496 : static_cast<T>(v15_)};
497 : return ValuesIn(array);
498 : }
499 :
500 : private:
501 : // No implementation - assignment is unsupported.
502 : void operator=(const ValueArray15& other);
503 :
504 : const T1 v1_;
505 : const T2 v2_;
506 : const T3 v3_;
507 : const T4 v4_;
508 : const T5 v5_;
509 : const T6 v6_;
510 : const T7 v7_;
511 : const T8 v8_;
512 : const T9 v9_;
513 : const T10 v10_;
514 : const T11 v11_;
515 : const T12 v12_;
516 : const T13 v13_;
517 : const T14 v14_;
518 : const T15 v15_;
519 : };
520 :
521 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
522 : typename T6, typename T7, typename T8, typename T9, typename T10,
523 : typename T11, typename T12, typename T13, typename T14, typename T15,
524 : typename T16>
525 : class ValueArray16 {
526 : public:
527 : ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
528 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
529 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
530 : v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
531 : v16_(v16) {}
532 :
533 : template <typename T>
534 : operator ParamGenerator<T>() const {
535 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
536 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
537 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
538 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
539 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
540 : static_cast<T>(v15_), static_cast<T>(v16_)};
541 : return ValuesIn(array);
542 : }
543 :
544 : private:
545 : // No implementation - assignment is unsupported.
546 : void operator=(const ValueArray16& other);
547 :
548 : const T1 v1_;
549 : const T2 v2_;
550 : const T3 v3_;
551 : const T4 v4_;
552 : const T5 v5_;
553 : const T6 v6_;
554 : const T7 v7_;
555 : const T8 v8_;
556 : const T9 v9_;
557 : const T10 v10_;
558 : const T11 v11_;
559 : const T12 v12_;
560 : const T13 v13_;
561 : const T14 v14_;
562 : const T15 v15_;
563 : const T16 v16_;
564 : };
565 :
566 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
567 : typename T6, typename T7, typename T8, typename T9, typename T10,
568 : typename T11, typename T12, typename T13, typename T14, typename T15,
569 : typename T16, typename T17>
570 : class ValueArray17 {
571 : public:
572 : ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
573 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
574 : T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
575 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
576 : v15_(v15), v16_(v16), v17_(v17) {}
577 :
578 : template <typename T>
579 : operator ParamGenerator<T>() const {
580 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
581 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
582 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
583 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
584 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
585 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
586 : return ValuesIn(array);
587 : }
588 :
589 : private:
590 : // No implementation - assignment is unsupported.
591 : void operator=(const ValueArray17& other);
592 :
593 : const T1 v1_;
594 : const T2 v2_;
595 : const T3 v3_;
596 : const T4 v4_;
597 : const T5 v5_;
598 : const T6 v6_;
599 : const T7 v7_;
600 : const T8 v8_;
601 : const T9 v9_;
602 : const T10 v10_;
603 : const T11 v11_;
604 : const T12 v12_;
605 : const T13 v13_;
606 : const T14 v14_;
607 : const T15 v15_;
608 : const T16 v16_;
609 : const T17 v17_;
610 : };
611 :
612 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
613 : typename T6, typename T7, typename T8, typename T9, typename T10,
614 : typename T11, typename T12, typename T13, typename T14, typename T15,
615 : typename T16, typename T17, typename T18>
616 : class ValueArray18 {
617 : public:
618 : ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
619 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
620 : T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
621 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
622 : v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
623 :
624 : template <typename T>
625 : operator ParamGenerator<T>() const {
626 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
627 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
628 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
629 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
630 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
631 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
632 : static_cast<T>(v18_)};
633 : return ValuesIn(array);
634 : }
635 :
636 : private:
637 : // No implementation - assignment is unsupported.
638 : void operator=(const ValueArray18& other);
639 :
640 : const T1 v1_;
641 : const T2 v2_;
642 : const T3 v3_;
643 : const T4 v4_;
644 : const T5 v5_;
645 : const T6 v6_;
646 : const T7 v7_;
647 : const T8 v8_;
648 : const T9 v9_;
649 : const T10 v10_;
650 : const T11 v11_;
651 : const T12 v12_;
652 : const T13 v13_;
653 : const T14 v14_;
654 : const T15 v15_;
655 : const T16 v16_;
656 : const T17 v17_;
657 : const T18 v18_;
658 : };
659 :
660 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
661 : typename T6, typename T7, typename T8, typename T9, typename T10,
662 : typename T11, typename T12, typename T13, typename T14, typename T15,
663 : typename T16, typename T17, typename T18, typename T19>
664 : class ValueArray19 {
665 : public:
666 : ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
667 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
668 : T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
669 : v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
670 : v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
671 :
672 : template <typename T>
673 : operator ParamGenerator<T>() const {
674 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
675 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
676 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
677 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
678 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
679 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
680 : static_cast<T>(v18_), static_cast<T>(v19_)};
681 : return ValuesIn(array);
682 : }
683 :
684 : private:
685 : // No implementation - assignment is unsupported.
686 : void operator=(const ValueArray19& other);
687 :
688 : const T1 v1_;
689 : const T2 v2_;
690 : const T3 v3_;
691 : const T4 v4_;
692 : const T5 v5_;
693 : const T6 v6_;
694 : const T7 v7_;
695 : const T8 v8_;
696 : const T9 v9_;
697 : const T10 v10_;
698 : const T11 v11_;
699 : const T12 v12_;
700 : const T13 v13_;
701 : const T14 v14_;
702 : const T15 v15_;
703 : const T16 v16_;
704 : const T17 v17_;
705 : const T18 v18_;
706 : const T19 v19_;
707 : };
708 :
709 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
710 : typename T6, typename T7, typename T8, typename T9, typename T10,
711 : typename T11, typename T12, typename T13, typename T14, typename T15,
712 : typename T16, typename T17, typename T18, typename T19, typename T20>
713 : class ValueArray20 {
714 : public:
715 : ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
716 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
717 : T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
718 : v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
719 : v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
720 : v19_(v19), v20_(v20) {}
721 :
722 : template <typename T>
723 : operator ParamGenerator<T>() const {
724 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
725 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
726 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
727 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
728 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
729 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
730 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
731 : return ValuesIn(array);
732 : }
733 :
734 : private:
735 : // No implementation - assignment is unsupported.
736 : void operator=(const ValueArray20& other);
737 :
738 : const T1 v1_;
739 : const T2 v2_;
740 : const T3 v3_;
741 : const T4 v4_;
742 : const T5 v5_;
743 : const T6 v6_;
744 : const T7 v7_;
745 : const T8 v8_;
746 : const T9 v9_;
747 : const T10 v10_;
748 : const T11 v11_;
749 : const T12 v12_;
750 : const T13 v13_;
751 : const T14 v14_;
752 : const T15 v15_;
753 : const T16 v16_;
754 : const T17 v17_;
755 : const T18 v18_;
756 : const T19 v19_;
757 : const T20 v20_;
758 : };
759 :
760 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
761 : typename T6, typename T7, typename T8, typename T9, typename T10,
762 : typename T11, typename T12, typename T13, typename T14, typename T15,
763 : typename T16, typename T17, typename T18, typename T19, typename T20,
764 : typename T21>
765 : class ValueArray21 {
766 : public:
767 : ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
768 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
769 : T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
770 : v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
771 : v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
772 : v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
773 :
774 : template <typename T>
775 : operator ParamGenerator<T>() const {
776 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
777 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
778 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
779 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
780 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
781 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
782 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
783 : static_cast<T>(v21_)};
784 : return ValuesIn(array);
785 : }
786 :
787 : private:
788 : // No implementation - assignment is unsupported.
789 : void operator=(const ValueArray21& other);
790 :
791 : const T1 v1_;
792 : const T2 v2_;
793 : const T3 v3_;
794 : const T4 v4_;
795 : const T5 v5_;
796 : const T6 v6_;
797 : const T7 v7_;
798 : const T8 v8_;
799 : const T9 v9_;
800 : const T10 v10_;
801 : const T11 v11_;
802 : const T12 v12_;
803 : const T13 v13_;
804 : const T14 v14_;
805 : const T15 v15_;
806 : const T16 v16_;
807 : const T17 v17_;
808 : const T18 v18_;
809 : const T19 v19_;
810 : const T20 v20_;
811 : const T21 v21_;
812 : };
813 :
814 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
815 : typename T6, typename T7, typename T8, typename T9, typename T10,
816 : typename T11, typename T12, typename T13, typename T14, typename T15,
817 : typename T16, typename T17, typename T18, typename T19, typename T20,
818 : typename T21, typename T22>
819 : class ValueArray22 {
820 : public:
821 : ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
822 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
823 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
824 : v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
825 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
826 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
827 :
828 : template <typename T>
829 : operator ParamGenerator<T>() const {
830 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
831 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
832 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
833 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
834 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
835 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
836 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
837 : static_cast<T>(v21_), static_cast<T>(v22_)};
838 : return ValuesIn(array);
839 : }
840 :
841 : private:
842 : // No implementation - assignment is unsupported.
843 : void operator=(const ValueArray22& other);
844 :
845 : const T1 v1_;
846 : const T2 v2_;
847 : const T3 v3_;
848 : const T4 v4_;
849 : const T5 v5_;
850 : const T6 v6_;
851 : const T7 v7_;
852 : const T8 v8_;
853 : const T9 v9_;
854 : const T10 v10_;
855 : const T11 v11_;
856 : const T12 v12_;
857 : const T13 v13_;
858 : const T14 v14_;
859 : const T15 v15_;
860 : const T16 v16_;
861 : const T17 v17_;
862 : const T18 v18_;
863 : const T19 v19_;
864 : const T20 v20_;
865 : const T21 v21_;
866 : const T22 v22_;
867 : };
868 :
869 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
870 : typename T6, typename T7, typename T8, typename T9, typename T10,
871 : typename T11, typename T12, typename T13, typename T14, typename T15,
872 : typename T16, typename T17, typename T18, typename T19, typename T20,
873 : typename T21, typename T22, typename T23>
874 : class ValueArray23 {
875 : public:
876 : ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
877 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
878 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
879 : v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
880 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
881 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
882 : v23_(v23) {}
883 :
884 : template <typename T>
885 : operator ParamGenerator<T>() const {
886 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
887 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
888 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
889 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
890 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
891 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
892 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
893 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
894 : return ValuesIn(array);
895 : }
896 :
897 : private:
898 : // No implementation - assignment is unsupported.
899 : void operator=(const ValueArray23& other);
900 :
901 : const T1 v1_;
902 : const T2 v2_;
903 : const T3 v3_;
904 : const T4 v4_;
905 : const T5 v5_;
906 : const T6 v6_;
907 : const T7 v7_;
908 : const T8 v8_;
909 : const T9 v9_;
910 : const T10 v10_;
911 : const T11 v11_;
912 : const T12 v12_;
913 : const T13 v13_;
914 : const T14 v14_;
915 : const T15 v15_;
916 : const T16 v16_;
917 : const T17 v17_;
918 : const T18 v18_;
919 : const T19 v19_;
920 : const T20 v20_;
921 : const T21 v21_;
922 : const T22 v22_;
923 : const T23 v23_;
924 : };
925 :
926 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
927 : typename T6, typename T7, typename T8, typename T9, typename T10,
928 : typename T11, typename T12, typename T13, typename T14, typename T15,
929 : typename T16, typename T17, typename T18, typename T19, typename T20,
930 : typename T21, typename T22, typename T23, typename T24>
931 : class ValueArray24 {
932 : public:
933 : ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
934 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
935 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
936 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
937 : v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
938 : v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
939 : v22_(v22), v23_(v23), v24_(v24) {}
940 :
941 : template <typename T>
942 : operator ParamGenerator<T>() const {
943 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
944 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
945 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
946 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
947 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
948 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
949 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
950 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
951 : static_cast<T>(v24_)};
952 : return ValuesIn(array);
953 : }
954 :
955 : private:
956 : // No implementation - assignment is unsupported.
957 : void operator=(const ValueArray24& other);
958 :
959 : const T1 v1_;
960 : const T2 v2_;
961 : const T3 v3_;
962 : const T4 v4_;
963 : const T5 v5_;
964 : const T6 v6_;
965 : const T7 v7_;
966 : const T8 v8_;
967 : const T9 v9_;
968 : const T10 v10_;
969 : const T11 v11_;
970 : const T12 v12_;
971 : const T13 v13_;
972 : const T14 v14_;
973 : const T15 v15_;
974 : const T16 v16_;
975 : const T17 v17_;
976 : const T18 v18_;
977 : const T19 v19_;
978 : const T20 v20_;
979 : const T21 v21_;
980 : const T22 v22_;
981 : const T23 v23_;
982 : const T24 v24_;
983 : };
984 :
985 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
986 : typename T6, typename T7, typename T8, typename T9, typename T10,
987 : typename T11, typename T12, typename T13, typename T14, typename T15,
988 : typename T16, typename T17, typename T18, typename T19, typename T20,
989 : typename T21, typename T22, typename T23, typename T24, typename T25>
990 : class ValueArray25 {
991 : public:
992 : ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
993 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
994 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
995 : T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
996 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
997 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
998 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
999 :
1000 : template <typename T>
1001 : operator ParamGenerator<T>() const {
1002 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1003 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1004 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1005 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1006 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1007 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1008 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1009 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1010 : static_cast<T>(v24_), static_cast<T>(v25_)};
1011 : return ValuesIn(array);
1012 : }
1013 :
1014 : private:
1015 : // No implementation - assignment is unsupported.
1016 : void operator=(const ValueArray25& other);
1017 :
1018 : const T1 v1_;
1019 : const T2 v2_;
1020 : const T3 v3_;
1021 : const T4 v4_;
1022 : const T5 v5_;
1023 : const T6 v6_;
1024 : const T7 v7_;
1025 : const T8 v8_;
1026 : const T9 v9_;
1027 : const T10 v10_;
1028 : const T11 v11_;
1029 : const T12 v12_;
1030 : const T13 v13_;
1031 : const T14 v14_;
1032 : const T15 v15_;
1033 : const T16 v16_;
1034 : const T17 v17_;
1035 : const T18 v18_;
1036 : const T19 v19_;
1037 : const T20 v20_;
1038 : const T21 v21_;
1039 : const T22 v22_;
1040 : const T23 v23_;
1041 : const T24 v24_;
1042 : const T25 v25_;
1043 : };
1044 :
1045 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1046 : typename T6, typename T7, typename T8, typename T9, typename T10,
1047 : typename T11, typename T12, typename T13, typename T14, typename T15,
1048 : typename T16, typename T17, typename T18, typename T19, typename T20,
1049 : typename T21, typename T22, typename T23, typename T24, typename T25,
1050 : typename T26>
1051 : class ValueArray26 {
1052 : public:
1053 : ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1054 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1055 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1056 : T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1057 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1058 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1059 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
1060 :
1061 : template <typename T>
1062 : operator ParamGenerator<T>() const {
1063 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1064 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1065 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1066 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1067 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1068 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1069 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1070 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1071 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
1072 : return ValuesIn(array);
1073 : }
1074 :
1075 : private:
1076 : // No implementation - assignment is unsupported.
1077 : void operator=(const ValueArray26& other);
1078 :
1079 : const T1 v1_;
1080 : const T2 v2_;
1081 : const T3 v3_;
1082 : const T4 v4_;
1083 : const T5 v5_;
1084 : const T6 v6_;
1085 : const T7 v7_;
1086 : const T8 v8_;
1087 : const T9 v9_;
1088 : const T10 v10_;
1089 : const T11 v11_;
1090 : const T12 v12_;
1091 : const T13 v13_;
1092 : const T14 v14_;
1093 : const T15 v15_;
1094 : const T16 v16_;
1095 : const T17 v17_;
1096 : const T18 v18_;
1097 : const T19 v19_;
1098 : const T20 v20_;
1099 : const T21 v21_;
1100 : const T22 v22_;
1101 : const T23 v23_;
1102 : const T24 v24_;
1103 : const T25 v25_;
1104 : const T26 v26_;
1105 : };
1106 :
1107 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1108 : typename T6, typename T7, typename T8, typename T9, typename T10,
1109 : typename T11, typename T12, typename T13, typename T14, typename T15,
1110 : typename T16, typename T17, typename T18, typename T19, typename T20,
1111 : typename T21, typename T22, typename T23, typename T24, typename T25,
1112 : typename T26, typename T27>
1113 : class ValueArray27 {
1114 : public:
1115 : ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1116 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1117 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1118 : T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1119 : v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1120 : v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1121 : v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1122 : v26_(v26), v27_(v27) {}
1123 :
1124 : template <typename T>
1125 : operator ParamGenerator<T>() const {
1126 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1127 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1128 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1129 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1130 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1131 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1132 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1133 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1134 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1135 : static_cast<T>(v27_)};
1136 : return ValuesIn(array);
1137 : }
1138 :
1139 : private:
1140 : // No implementation - assignment is unsupported.
1141 : void operator=(const ValueArray27& other);
1142 :
1143 : const T1 v1_;
1144 : const T2 v2_;
1145 : const T3 v3_;
1146 : const T4 v4_;
1147 : const T5 v5_;
1148 : const T6 v6_;
1149 : const T7 v7_;
1150 : const T8 v8_;
1151 : const T9 v9_;
1152 : const T10 v10_;
1153 : const T11 v11_;
1154 : const T12 v12_;
1155 : const T13 v13_;
1156 : const T14 v14_;
1157 : const T15 v15_;
1158 : const T16 v16_;
1159 : const T17 v17_;
1160 : const T18 v18_;
1161 : const T19 v19_;
1162 : const T20 v20_;
1163 : const T21 v21_;
1164 : const T22 v22_;
1165 : const T23 v23_;
1166 : const T24 v24_;
1167 : const T25 v25_;
1168 : const T26 v26_;
1169 : const T27 v27_;
1170 : };
1171 :
1172 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1173 : typename T6, typename T7, typename T8, typename T9, typename T10,
1174 : typename T11, typename T12, typename T13, typename T14, typename T15,
1175 : typename T16, typename T17, typename T18, typename T19, typename T20,
1176 : typename T21, typename T22, typename T23, typename T24, typename T25,
1177 : typename T26, typename T27, typename T28>
1178 : class ValueArray28 {
1179 : public:
1180 : ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1181 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1182 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1183 : T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1184 : v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1185 : v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1186 : v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1187 : v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1188 :
1189 : template <typename T>
1190 : operator ParamGenerator<T>() const {
1191 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1192 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1193 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1194 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1195 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1196 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1197 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1198 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1199 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1200 : static_cast<T>(v27_), static_cast<T>(v28_)};
1201 : return ValuesIn(array);
1202 : }
1203 :
1204 : private:
1205 : // No implementation - assignment is unsupported.
1206 : void operator=(const ValueArray28& other);
1207 :
1208 : const T1 v1_;
1209 : const T2 v2_;
1210 : const T3 v3_;
1211 : const T4 v4_;
1212 : const T5 v5_;
1213 : const T6 v6_;
1214 : const T7 v7_;
1215 : const T8 v8_;
1216 : const T9 v9_;
1217 : const T10 v10_;
1218 : const T11 v11_;
1219 : const T12 v12_;
1220 : const T13 v13_;
1221 : const T14 v14_;
1222 : const T15 v15_;
1223 : const T16 v16_;
1224 : const T17 v17_;
1225 : const T18 v18_;
1226 : const T19 v19_;
1227 : const T20 v20_;
1228 : const T21 v21_;
1229 : const T22 v22_;
1230 : const T23 v23_;
1231 : const T24 v24_;
1232 : const T25 v25_;
1233 : const T26 v26_;
1234 : const T27 v27_;
1235 : const T28 v28_;
1236 : };
1237 :
1238 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1239 : typename T6, typename T7, typename T8, typename T9, typename T10,
1240 : typename T11, typename T12, typename T13, typename T14, typename T15,
1241 : typename T16, typename T17, typename T18, typename T19, typename T20,
1242 : typename T21, typename T22, typename T23, typename T24, typename T25,
1243 : typename T26, typename T27, typename T28, typename T29>
1244 : class ValueArray29 {
1245 : public:
1246 : ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1247 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1248 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1249 : T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1250 : v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1251 : v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1252 : v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1253 : v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1254 :
1255 : template <typename T>
1256 : operator ParamGenerator<T>() const {
1257 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1258 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1259 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1260 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1261 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1262 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1263 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1264 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1265 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1266 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
1267 : return ValuesIn(array);
1268 : }
1269 :
1270 : private:
1271 : // No implementation - assignment is unsupported.
1272 : void operator=(const ValueArray29& other);
1273 :
1274 : const T1 v1_;
1275 : const T2 v2_;
1276 : const T3 v3_;
1277 : const T4 v4_;
1278 : const T5 v5_;
1279 : const T6 v6_;
1280 : const T7 v7_;
1281 : const T8 v8_;
1282 : const T9 v9_;
1283 : const T10 v10_;
1284 : const T11 v11_;
1285 : const T12 v12_;
1286 : const T13 v13_;
1287 : const T14 v14_;
1288 : const T15 v15_;
1289 : const T16 v16_;
1290 : const T17 v17_;
1291 : const T18 v18_;
1292 : const T19 v19_;
1293 : const T20 v20_;
1294 : const T21 v21_;
1295 : const T22 v22_;
1296 : const T23 v23_;
1297 : const T24 v24_;
1298 : const T25 v25_;
1299 : const T26 v26_;
1300 : const T27 v27_;
1301 : const T28 v28_;
1302 : const T29 v29_;
1303 : };
1304 :
1305 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1306 : typename T6, typename T7, typename T8, typename T9, typename T10,
1307 : typename T11, typename T12, typename T13, typename T14, typename T15,
1308 : typename T16, typename T17, typename T18, typename T19, typename T20,
1309 : typename T21, typename T22, typename T23, typename T24, typename T25,
1310 : typename T26, typename T27, typename T28, typename T29, typename T30>
1311 : class ValueArray30 {
1312 : public:
1313 : ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1314 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1315 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1316 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1317 : v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1318 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1319 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1320 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1321 : v29_(v29), v30_(v30) {}
1322 :
1323 : template <typename T>
1324 : operator ParamGenerator<T>() const {
1325 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1326 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1327 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1328 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1329 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1330 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1331 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1332 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1333 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1334 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1335 : static_cast<T>(v30_)};
1336 : return ValuesIn(array);
1337 : }
1338 :
1339 : private:
1340 : // No implementation - assignment is unsupported.
1341 : void operator=(const ValueArray30& other);
1342 :
1343 : const T1 v1_;
1344 : const T2 v2_;
1345 : const T3 v3_;
1346 : const T4 v4_;
1347 : const T5 v5_;
1348 : const T6 v6_;
1349 : const T7 v7_;
1350 : const T8 v8_;
1351 : const T9 v9_;
1352 : const T10 v10_;
1353 : const T11 v11_;
1354 : const T12 v12_;
1355 : const T13 v13_;
1356 : const T14 v14_;
1357 : const T15 v15_;
1358 : const T16 v16_;
1359 : const T17 v17_;
1360 : const T18 v18_;
1361 : const T19 v19_;
1362 : const T20 v20_;
1363 : const T21 v21_;
1364 : const T22 v22_;
1365 : const T23 v23_;
1366 : const T24 v24_;
1367 : const T25 v25_;
1368 : const T26 v26_;
1369 : const T27 v27_;
1370 : const T28 v28_;
1371 : const T29 v29_;
1372 : const T30 v30_;
1373 : };
1374 :
1375 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1376 : typename T6, typename T7, typename T8, typename T9, typename T10,
1377 : typename T11, typename T12, typename T13, typename T14, typename T15,
1378 : typename T16, typename T17, typename T18, typename T19, typename T20,
1379 : typename T21, typename T22, typename T23, typename T24, typename T25,
1380 : typename T26, typename T27, typename T28, typename T29, typename T30,
1381 : typename T31>
1382 : class ValueArray31 {
1383 : public:
1384 : ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1385 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1386 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1387 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1388 : v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1389 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1390 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1391 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1392 : v29_(v29), v30_(v30), v31_(v31) {}
1393 :
1394 : template <typename T>
1395 : operator ParamGenerator<T>() const {
1396 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1397 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1398 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1399 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1400 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1401 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1402 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1403 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1404 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1405 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1406 : static_cast<T>(v30_), static_cast<T>(v31_)};
1407 : return ValuesIn(array);
1408 : }
1409 :
1410 : private:
1411 : // No implementation - assignment is unsupported.
1412 : void operator=(const ValueArray31& other);
1413 :
1414 : const T1 v1_;
1415 : const T2 v2_;
1416 : const T3 v3_;
1417 : const T4 v4_;
1418 : const T5 v5_;
1419 : const T6 v6_;
1420 : const T7 v7_;
1421 : const T8 v8_;
1422 : const T9 v9_;
1423 : const T10 v10_;
1424 : const T11 v11_;
1425 : const T12 v12_;
1426 : const T13 v13_;
1427 : const T14 v14_;
1428 : const T15 v15_;
1429 : const T16 v16_;
1430 : const T17 v17_;
1431 : const T18 v18_;
1432 : const T19 v19_;
1433 : const T20 v20_;
1434 : const T21 v21_;
1435 : const T22 v22_;
1436 : const T23 v23_;
1437 : const T24 v24_;
1438 : const T25 v25_;
1439 : const T26 v26_;
1440 : const T27 v27_;
1441 : const T28 v28_;
1442 : const T29 v29_;
1443 : const T30 v30_;
1444 : const T31 v31_;
1445 : };
1446 :
1447 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1448 : typename T6, typename T7, typename T8, typename T9, typename T10,
1449 : typename T11, typename T12, typename T13, typename T14, typename T15,
1450 : typename T16, typename T17, typename T18, typename T19, typename T20,
1451 : typename T21, typename T22, typename T23, typename T24, typename T25,
1452 : typename T26, typename T27, typename T28, typename T29, typename T30,
1453 : typename T31, typename T32>
1454 : class ValueArray32 {
1455 : public:
1456 : ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1457 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1458 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1459 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1460 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1461 : v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1462 : v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1463 : v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1464 : v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1465 :
1466 : template <typename T>
1467 : operator ParamGenerator<T>() const {
1468 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1469 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1470 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1471 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1472 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1473 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1474 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1475 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1476 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1477 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1478 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
1479 : return ValuesIn(array);
1480 : }
1481 :
1482 : private:
1483 : // No implementation - assignment is unsupported.
1484 : void operator=(const ValueArray32& other);
1485 :
1486 : const T1 v1_;
1487 : const T2 v2_;
1488 : const T3 v3_;
1489 : const T4 v4_;
1490 : const T5 v5_;
1491 : const T6 v6_;
1492 : const T7 v7_;
1493 : const T8 v8_;
1494 : const T9 v9_;
1495 : const T10 v10_;
1496 : const T11 v11_;
1497 : const T12 v12_;
1498 : const T13 v13_;
1499 : const T14 v14_;
1500 : const T15 v15_;
1501 : const T16 v16_;
1502 : const T17 v17_;
1503 : const T18 v18_;
1504 : const T19 v19_;
1505 : const T20 v20_;
1506 : const T21 v21_;
1507 : const T22 v22_;
1508 : const T23 v23_;
1509 : const T24 v24_;
1510 : const T25 v25_;
1511 : const T26 v26_;
1512 : const T27 v27_;
1513 : const T28 v28_;
1514 : const T29 v29_;
1515 : const T30 v30_;
1516 : const T31 v31_;
1517 : const T32 v32_;
1518 : };
1519 :
1520 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1521 : typename T6, typename T7, typename T8, typename T9, typename T10,
1522 : typename T11, typename T12, typename T13, typename T14, typename T15,
1523 : typename T16, typename T17, typename T18, typename T19, typename T20,
1524 : typename T21, typename T22, typename T23, typename T24, typename T25,
1525 : typename T26, typename T27, typename T28, typename T29, typename T30,
1526 : typename T31, typename T32, typename T33>
1527 : class ValueArray33 {
1528 : public:
1529 : ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1530 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1531 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1532 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1533 : T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1534 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1535 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1536 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1537 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1538 : v33_(v33) {}
1539 :
1540 : template <typename T>
1541 : operator ParamGenerator<T>() const {
1542 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1543 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1544 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1545 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1546 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1547 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1548 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1549 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1550 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1551 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1552 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1553 : static_cast<T>(v33_)};
1554 : return ValuesIn(array);
1555 : }
1556 :
1557 : private:
1558 : // No implementation - assignment is unsupported.
1559 : void operator=(const ValueArray33& other);
1560 :
1561 : const T1 v1_;
1562 : const T2 v2_;
1563 : const T3 v3_;
1564 : const T4 v4_;
1565 : const T5 v5_;
1566 : const T6 v6_;
1567 : const T7 v7_;
1568 : const T8 v8_;
1569 : const T9 v9_;
1570 : const T10 v10_;
1571 : const T11 v11_;
1572 : const T12 v12_;
1573 : const T13 v13_;
1574 : const T14 v14_;
1575 : const T15 v15_;
1576 : const T16 v16_;
1577 : const T17 v17_;
1578 : const T18 v18_;
1579 : const T19 v19_;
1580 : const T20 v20_;
1581 : const T21 v21_;
1582 : const T22 v22_;
1583 : const T23 v23_;
1584 : const T24 v24_;
1585 : const T25 v25_;
1586 : const T26 v26_;
1587 : const T27 v27_;
1588 : const T28 v28_;
1589 : const T29 v29_;
1590 : const T30 v30_;
1591 : const T31 v31_;
1592 : const T32 v32_;
1593 : const T33 v33_;
1594 : };
1595 :
1596 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1597 : typename T6, typename T7, typename T8, typename T9, typename T10,
1598 : typename T11, typename T12, typename T13, typename T14, typename T15,
1599 : typename T16, typename T17, typename T18, typename T19, typename T20,
1600 : typename T21, typename T22, typename T23, typename T24, typename T25,
1601 : typename T26, typename T27, typename T28, typename T29, typename T30,
1602 : typename T31, typename T32, typename T33, typename T34>
1603 : class ValueArray34 {
1604 : public:
1605 : ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1606 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1607 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1608 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1609 : T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1610 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1611 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1612 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1613 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1614 : v33_(v33), v34_(v34) {}
1615 :
1616 : template <typename T>
1617 : operator ParamGenerator<T>() const {
1618 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1619 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1620 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1621 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1622 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1623 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1624 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1625 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1626 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1627 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1628 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1629 : static_cast<T>(v33_), static_cast<T>(v34_)};
1630 : return ValuesIn(array);
1631 : }
1632 :
1633 : private:
1634 : // No implementation - assignment is unsupported.
1635 : void operator=(const ValueArray34& other);
1636 :
1637 : const T1 v1_;
1638 : const T2 v2_;
1639 : const T3 v3_;
1640 : const T4 v4_;
1641 : const T5 v5_;
1642 : const T6 v6_;
1643 : const T7 v7_;
1644 : const T8 v8_;
1645 : const T9 v9_;
1646 : const T10 v10_;
1647 : const T11 v11_;
1648 : const T12 v12_;
1649 : const T13 v13_;
1650 : const T14 v14_;
1651 : const T15 v15_;
1652 : const T16 v16_;
1653 : const T17 v17_;
1654 : const T18 v18_;
1655 : const T19 v19_;
1656 : const T20 v20_;
1657 : const T21 v21_;
1658 : const T22 v22_;
1659 : const T23 v23_;
1660 : const T24 v24_;
1661 : const T25 v25_;
1662 : const T26 v26_;
1663 : const T27 v27_;
1664 : const T28 v28_;
1665 : const T29 v29_;
1666 : const T30 v30_;
1667 : const T31 v31_;
1668 : const T32 v32_;
1669 : const T33 v33_;
1670 : const T34 v34_;
1671 : };
1672 :
1673 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1674 : typename T6, typename T7, typename T8, typename T9, typename T10,
1675 : typename T11, typename T12, typename T13, typename T14, typename T15,
1676 : typename T16, typename T17, typename T18, typename T19, typename T20,
1677 : typename T21, typename T22, typename T23, typename T24, typename T25,
1678 : typename T26, typename T27, typename T28, typename T29, typename T30,
1679 : typename T31, typename T32, typename T33, typename T34, typename T35>
1680 : class ValueArray35 {
1681 : public:
1682 : ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1683 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1684 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1685 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1686 : T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1687 : v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1688 : v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1689 : v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1690 : v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1691 : v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1692 :
1693 : template <typename T>
1694 : operator ParamGenerator<T>() const {
1695 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1696 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1697 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1698 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1699 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1700 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1701 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1702 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1703 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1704 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1705 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1706 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
1707 : return ValuesIn(array);
1708 : }
1709 :
1710 : private:
1711 : // No implementation - assignment is unsupported.
1712 : void operator=(const ValueArray35& other);
1713 :
1714 : const T1 v1_;
1715 : const T2 v2_;
1716 : const T3 v3_;
1717 : const T4 v4_;
1718 : const T5 v5_;
1719 : const T6 v6_;
1720 : const T7 v7_;
1721 : const T8 v8_;
1722 : const T9 v9_;
1723 : const T10 v10_;
1724 : const T11 v11_;
1725 : const T12 v12_;
1726 : const T13 v13_;
1727 : const T14 v14_;
1728 : const T15 v15_;
1729 : const T16 v16_;
1730 : const T17 v17_;
1731 : const T18 v18_;
1732 : const T19 v19_;
1733 : const T20 v20_;
1734 : const T21 v21_;
1735 : const T22 v22_;
1736 : const T23 v23_;
1737 : const T24 v24_;
1738 : const T25 v25_;
1739 : const T26 v26_;
1740 : const T27 v27_;
1741 : const T28 v28_;
1742 : const T29 v29_;
1743 : const T30 v30_;
1744 : const T31 v31_;
1745 : const T32 v32_;
1746 : const T33 v33_;
1747 : const T34 v34_;
1748 : const T35 v35_;
1749 : };
1750 :
1751 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1752 : typename T6, typename T7, typename T8, typename T9, typename T10,
1753 : typename T11, typename T12, typename T13, typename T14, typename T15,
1754 : typename T16, typename T17, typename T18, typename T19, typename T20,
1755 : typename T21, typename T22, typename T23, typename T24, typename T25,
1756 : typename T26, typename T27, typename T28, typename T29, typename T30,
1757 : typename T31, typename T32, typename T33, typename T34, typename T35,
1758 : typename T36>
1759 : class ValueArray36 {
1760 : public:
1761 : ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1762 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1763 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1764 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1765 : T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1766 : v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1767 : v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1768 : v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1769 : v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1770 : v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1771 :
1772 : template <typename T>
1773 : operator ParamGenerator<T>() const {
1774 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1775 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1776 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1777 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1778 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1779 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1780 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1781 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1782 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1783 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1784 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1785 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1786 : static_cast<T>(v36_)};
1787 : return ValuesIn(array);
1788 : }
1789 :
1790 : private:
1791 : // No implementation - assignment is unsupported.
1792 : void operator=(const ValueArray36& other);
1793 :
1794 : const T1 v1_;
1795 : const T2 v2_;
1796 : const T3 v3_;
1797 : const T4 v4_;
1798 : const T5 v5_;
1799 : const T6 v6_;
1800 : const T7 v7_;
1801 : const T8 v8_;
1802 : const T9 v9_;
1803 : const T10 v10_;
1804 : const T11 v11_;
1805 : const T12 v12_;
1806 : const T13 v13_;
1807 : const T14 v14_;
1808 : const T15 v15_;
1809 : const T16 v16_;
1810 : const T17 v17_;
1811 : const T18 v18_;
1812 : const T19 v19_;
1813 : const T20 v20_;
1814 : const T21 v21_;
1815 : const T22 v22_;
1816 : const T23 v23_;
1817 : const T24 v24_;
1818 : const T25 v25_;
1819 : const T26 v26_;
1820 : const T27 v27_;
1821 : const T28 v28_;
1822 : const T29 v29_;
1823 : const T30 v30_;
1824 : const T31 v31_;
1825 : const T32 v32_;
1826 : const T33 v33_;
1827 : const T34 v34_;
1828 : const T35 v35_;
1829 : const T36 v36_;
1830 : };
1831 :
1832 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1833 : typename T6, typename T7, typename T8, typename T9, typename T10,
1834 : typename T11, typename T12, typename T13, typename T14, typename T15,
1835 : typename T16, typename T17, typename T18, typename T19, typename T20,
1836 : typename T21, typename T22, typename T23, typename T24, typename T25,
1837 : typename T26, typename T27, typename T28, typename T29, typename T30,
1838 : typename T31, typename T32, typename T33, typename T34, typename T35,
1839 : typename T36, typename T37>
1840 : class ValueArray37 {
1841 : public:
1842 : ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1843 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1844 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1845 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1846 : T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1847 : v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1848 : v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1849 : v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1850 : v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1851 : v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1852 : v36_(v36), v37_(v37) {}
1853 :
1854 : template <typename T>
1855 : operator ParamGenerator<T>() const {
1856 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1857 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1858 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1859 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1860 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1861 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1862 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1863 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1864 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1865 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1866 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1867 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1868 : static_cast<T>(v36_), static_cast<T>(v37_)};
1869 : return ValuesIn(array);
1870 : }
1871 :
1872 : private:
1873 : // No implementation - assignment is unsupported.
1874 : void operator=(const ValueArray37& other);
1875 :
1876 : const T1 v1_;
1877 : const T2 v2_;
1878 : const T3 v3_;
1879 : const T4 v4_;
1880 : const T5 v5_;
1881 : const T6 v6_;
1882 : const T7 v7_;
1883 : const T8 v8_;
1884 : const T9 v9_;
1885 : const T10 v10_;
1886 : const T11 v11_;
1887 : const T12 v12_;
1888 : const T13 v13_;
1889 : const T14 v14_;
1890 : const T15 v15_;
1891 : const T16 v16_;
1892 : const T17 v17_;
1893 : const T18 v18_;
1894 : const T19 v19_;
1895 : const T20 v20_;
1896 : const T21 v21_;
1897 : const T22 v22_;
1898 : const T23 v23_;
1899 : const T24 v24_;
1900 : const T25 v25_;
1901 : const T26 v26_;
1902 : const T27 v27_;
1903 : const T28 v28_;
1904 : const T29 v29_;
1905 : const T30 v30_;
1906 : const T31 v31_;
1907 : const T32 v32_;
1908 : const T33 v33_;
1909 : const T34 v34_;
1910 : const T35 v35_;
1911 : const T36 v36_;
1912 : const T37 v37_;
1913 : };
1914 :
1915 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
1916 : typename T6, typename T7, typename T8, typename T9, typename T10,
1917 : typename T11, typename T12, typename T13, typename T14, typename T15,
1918 : typename T16, typename T17, typename T18, typename T19, typename T20,
1919 : typename T21, typename T22, typename T23, typename T24, typename T25,
1920 : typename T26, typename T27, typename T28, typename T29, typename T30,
1921 : typename T31, typename T32, typename T33, typename T34, typename T35,
1922 : typename T36, typename T37, typename T38>
1923 : class ValueArray38 {
1924 : public:
1925 : ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1926 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1927 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1928 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1929 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1930 : v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1931 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1932 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1933 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1934 : v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1935 : v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1936 :
1937 : template <typename T>
1938 : operator ParamGenerator<T>() const {
1939 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1940 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1941 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1942 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1943 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1944 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1945 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1946 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1947 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1948 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1949 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1950 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1951 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
1952 : return ValuesIn(array);
1953 : }
1954 :
1955 : private:
1956 : // No implementation - assignment is unsupported.
1957 : void operator=(const ValueArray38& other);
1958 :
1959 : const T1 v1_;
1960 : const T2 v2_;
1961 : const T3 v3_;
1962 : const T4 v4_;
1963 : const T5 v5_;
1964 : const T6 v6_;
1965 : const T7 v7_;
1966 : const T8 v8_;
1967 : const T9 v9_;
1968 : const T10 v10_;
1969 : const T11 v11_;
1970 : const T12 v12_;
1971 : const T13 v13_;
1972 : const T14 v14_;
1973 : const T15 v15_;
1974 : const T16 v16_;
1975 : const T17 v17_;
1976 : const T18 v18_;
1977 : const T19 v19_;
1978 : const T20 v20_;
1979 : const T21 v21_;
1980 : const T22 v22_;
1981 : const T23 v23_;
1982 : const T24 v24_;
1983 : const T25 v25_;
1984 : const T26 v26_;
1985 : const T27 v27_;
1986 : const T28 v28_;
1987 : const T29 v29_;
1988 : const T30 v30_;
1989 : const T31 v31_;
1990 : const T32 v32_;
1991 : const T33 v33_;
1992 : const T34 v34_;
1993 : const T35 v35_;
1994 : const T36 v36_;
1995 : const T37 v37_;
1996 : const T38 v38_;
1997 : };
1998 :
1999 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2000 : typename T6, typename T7, typename T8, typename T9, typename T10,
2001 : typename T11, typename T12, typename T13, typename T14, typename T15,
2002 : typename T16, typename T17, typename T18, typename T19, typename T20,
2003 : typename T21, typename T22, typename T23, typename T24, typename T25,
2004 : typename T26, typename T27, typename T28, typename T29, typename T30,
2005 : typename T31, typename T32, typename T33, typename T34, typename T35,
2006 : typename T36, typename T37, typename T38, typename T39>
2007 : class ValueArray39 {
2008 : public:
2009 : ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2010 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2011 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2012 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2013 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
2014 : v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2015 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2016 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2017 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2018 : v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2019 : v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
2020 :
2021 : template <typename T>
2022 : operator ParamGenerator<T>() const {
2023 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2024 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2025 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2026 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2027 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2028 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2029 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2030 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2031 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2032 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2033 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2034 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2035 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2036 : static_cast<T>(v39_)};
2037 : return ValuesIn(array);
2038 : }
2039 :
2040 : private:
2041 : // No implementation - assignment is unsupported.
2042 : void operator=(const ValueArray39& other);
2043 :
2044 : const T1 v1_;
2045 : const T2 v2_;
2046 : const T3 v3_;
2047 : const T4 v4_;
2048 : const T5 v5_;
2049 : const T6 v6_;
2050 : const T7 v7_;
2051 : const T8 v8_;
2052 : const T9 v9_;
2053 : const T10 v10_;
2054 : const T11 v11_;
2055 : const T12 v12_;
2056 : const T13 v13_;
2057 : const T14 v14_;
2058 : const T15 v15_;
2059 : const T16 v16_;
2060 : const T17 v17_;
2061 : const T18 v18_;
2062 : const T19 v19_;
2063 : const T20 v20_;
2064 : const T21 v21_;
2065 : const T22 v22_;
2066 : const T23 v23_;
2067 : const T24 v24_;
2068 : const T25 v25_;
2069 : const T26 v26_;
2070 : const T27 v27_;
2071 : const T28 v28_;
2072 : const T29 v29_;
2073 : const T30 v30_;
2074 : const T31 v31_;
2075 : const T32 v32_;
2076 : const T33 v33_;
2077 : const T34 v34_;
2078 : const T35 v35_;
2079 : const T36 v36_;
2080 : const T37 v37_;
2081 : const T38 v38_;
2082 : const T39 v39_;
2083 : };
2084 :
2085 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2086 : typename T6, typename T7, typename T8, typename T9, typename T10,
2087 : typename T11, typename T12, typename T13, typename T14, typename T15,
2088 : typename T16, typename T17, typename T18, typename T19, typename T20,
2089 : typename T21, typename T22, typename T23, typename T24, typename T25,
2090 : typename T26, typename T27, typename T28, typename T29, typename T30,
2091 : typename T31, typename T32, typename T33, typename T34, typename T35,
2092 : typename T36, typename T37, typename T38, typename T39, typename T40>
2093 : class ValueArray40 {
2094 : public:
2095 : ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2096 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2097 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2098 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2099 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
2100 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2101 : v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2102 : v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2103 : v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2104 : v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2105 : v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2106 : v40_(v40) {}
2107 :
2108 : template <typename T>
2109 : operator ParamGenerator<T>() const {
2110 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2111 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2112 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2113 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2114 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2115 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2116 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2117 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2118 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2119 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2120 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2121 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2122 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2123 : static_cast<T>(v39_), static_cast<T>(v40_)};
2124 : return ValuesIn(array);
2125 : }
2126 :
2127 : private:
2128 : // No implementation - assignment is unsupported.
2129 : void operator=(const ValueArray40& other);
2130 :
2131 : const T1 v1_;
2132 : const T2 v2_;
2133 : const T3 v3_;
2134 : const T4 v4_;
2135 : const T5 v5_;
2136 : const T6 v6_;
2137 : const T7 v7_;
2138 : const T8 v8_;
2139 : const T9 v9_;
2140 : const T10 v10_;
2141 : const T11 v11_;
2142 : const T12 v12_;
2143 : const T13 v13_;
2144 : const T14 v14_;
2145 : const T15 v15_;
2146 : const T16 v16_;
2147 : const T17 v17_;
2148 : const T18 v18_;
2149 : const T19 v19_;
2150 : const T20 v20_;
2151 : const T21 v21_;
2152 : const T22 v22_;
2153 : const T23 v23_;
2154 : const T24 v24_;
2155 : const T25 v25_;
2156 : const T26 v26_;
2157 : const T27 v27_;
2158 : const T28 v28_;
2159 : const T29 v29_;
2160 : const T30 v30_;
2161 : const T31 v31_;
2162 : const T32 v32_;
2163 : const T33 v33_;
2164 : const T34 v34_;
2165 : const T35 v35_;
2166 : const T36 v36_;
2167 : const T37 v37_;
2168 : const T38 v38_;
2169 : const T39 v39_;
2170 : const T40 v40_;
2171 : };
2172 :
2173 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2174 : typename T6, typename T7, typename T8, typename T9, typename T10,
2175 : typename T11, typename T12, typename T13, typename T14, typename T15,
2176 : typename T16, typename T17, typename T18, typename T19, typename T20,
2177 : typename T21, typename T22, typename T23, typename T24, typename T25,
2178 : typename T26, typename T27, typename T28, typename T29, typename T30,
2179 : typename T31, typename T32, typename T33, typename T34, typename T35,
2180 : typename T36, typename T37, typename T38, typename T39, typename T40,
2181 : typename T41>
2182 : class ValueArray41 {
2183 : public:
2184 : ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2185 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2186 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2187 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2188 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
2189 : T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2190 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2191 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2192 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2193 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2194 : v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2195 : v39_(v39), v40_(v40), v41_(v41) {}
2196 :
2197 : template <typename T>
2198 : operator ParamGenerator<T>() const {
2199 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2200 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2201 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2202 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2203 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2204 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2205 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2206 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2207 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2208 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2209 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2210 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2211 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2212 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
2213 : return ValuesIn(array);
2214 : }
2215 :
2216 : private:
2217 : // No implementation - assignment is unsupported.
2218 : void operator=(const ValueArray41& other);
2219 :
2220 : const T1 v1_;
2221 : const T2 v2_;
2222 : const T3 v3_;
2223 : const T4 v4_;
2224 : const T5 v5_;
2225 : const T6 v6_;
2226 : const T7 v7_;
2227 : const T8 v8_;
2228 : const T9 v9_;
2229 : const T10 v10_;
2230 : const T11 v11_;
2231 : const T12 v12_;
2232 : const T13 v13_;
2233 : const T14 v14_;
2234 : const T15 v15_;
2235 : const T16 v16_;
2236 : const T17 v17_;
2237 : const T18 v18_;
2238 : const T19 v19_;
2239 : const T20 v20_;
2240 : const T21 v21_;
2241 : const T22 v22_;
2242 : const T23 v23_;
2243 : const T24 v24_;
2244 : const T25 v25_;
2245 : const T26 v26_;
2246 : const T27 v27_;
2247 : const T28 v28_;
2248 : const T29 v29_;
2249 : const T30 v30_;
2250 : const T31 v31_;
2251 : const T32 v32_;
2252 : const T33 v33_;
2253 : const T34 v34_;
2254 : const T35 v35_;
2255 : const T36 v36_;
2256 : const T37 v37_;
2257 : const T38 v38_;
2258 : const T39 v39_;
2259 : const T40 v40_;
2260 : const T41 v41_;
2261 : };
2262 :
2263 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2264 : typename T6, typename T7, typename T8, typename T9, typename T10,
2265 : typename T11, typename T12, typename T13, typename T14, typename T15,
2266 : typename T16, typename T17, typename T18, typename T19, typename T20,
2267 : typename T21, typename T22, typename T23, typename T24, typename T25,
2268 : typename T26, typename T27, typename T28, typename T29, typename T30,
2269 : typename T31, typename T32, typename T33, typename T34, typename T35,
2270 : typename T36, typename T37, typename T38, typename T39, typename T40,
2271 : typename T41, typename T42>
2272 : class ValueArray42 {
2273 : public:
2274 : ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2275 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2276 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2277 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2278 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2279 : T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2280 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2281 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2282 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2283 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2284 : v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2285 : v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2286 :
2287 : template <typename T>
2288 : operator ParamGenerator<T>() const {
2289 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2290 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2291 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2292 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2293 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2294 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2295 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2296 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2297 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2298 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2299 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2300 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2301 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2302 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2303 : static_cast<T>(v42_)};
2304 : return ValuesIn(array);
2305 : }
2306 :
2307 : private:
2308 : // No implementation - assignment is unsupported.
2309 : void operator=(const ValueArray42& other);
2310 :
2311 : const T1 v1_;
2312 : const T2 v2_;
2313 : const T3 v3_;
2314 : const T4 v4_;
2315 : const T5 v5_;
2316 : const T6 v6_;
2317 : const T7 v7_;
2318 : const T8 v8_;
2319 : const T9 v9_;
2320 : const T10 v10_;
2321 : const T11 v11_;
2322 : const T12 v12_;
2323 : const T13 v13_;
2324 : const T14 v14_;
2325 : const T15 v15_;
2326 : const T16 v16_;
2327 : const T17 v17_;
2328 : const T18 v18_;
2329 : const T19 v19_;
2330 : const T20 v20_;
2331 : const T21 v21_;
2332 : const T22 v22_;
2333 : const T23 v23_;
2334 : const T24 v24_;
2335 : const T25 v25_;
2336 : const T26 v26_;
2337 : const T27 v27_;
2338 : const T28 v28_;
2339 : const T29 v29_;
2340 : const T30 v30_;
2341 : const T31 v31_;
2342 : const T32 v32_;
2343 : const T33 v33_;
2344 : const T34 v34_;
2345 : const T35 v35_;
2346 : const T36 v36_;
2347 : const T37 v37_;
2348 : const T38 v38_;
2349 : const T39 v39_;
2350 : const T40 v40_;
2351 : const T41 v41_;
2352 : const T42 v42_;
2353 : };
2354 :
2355 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2356 : typename T6, typename T7, typename T8, typename T9, typename T10,
2357 : typename T11, typename T12, typename T13, typename T14, typename T15,
2358 : typename T16, typename T17, typename T18, typename T19, typename T20,
2359 : typename T21, typename T22, typename T23, typename T24, typename T25,
2360 : typename T26, typename T27, typename T28, typename T29, typename T30,
2361 : typename T31, typename T32, typename T33, typename T34, typename T35,
2362 : typename T36, typename T37, typename T38, typename T39, typename T40,
2363 : typename T41, typename T42, typename T43>
2364 : class ValueArray43 {
2365 : public:
2366 : ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2367 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2368 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2369 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2370 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2371 : T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2372 : v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2373 : v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2374 : v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2375 : v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2376 : v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2377 : v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2378 :
2379 : template <typename T>
2380 : operator ParamGenerator<T>() const {
2381 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2382 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2383 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2384 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2385 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2386 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2387 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2388 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2389 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2390 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2391 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2392 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2393 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2394 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2395 : static_cast<T>(v42_), static_cast<T>(v43_)};
2396 : return ValuesIn(array);
2397 : }
2398 :
2399 : private:
2400 : // No implementation - assignment is unsupported.
2401 : void operator=(const ValueArray43& other);
2402 :
2403 : const T1 v1_;
2404 : const T2 v2_;
2405 : const T3 v3_;
2406 : const T4 v4_;
2407 : const T5 v5_;
2408 : const T6 v6_;
2409 : const T7 v7_;
2410 : const T8 v8_;
2411 : const T9 v9_;
2412 : const T10 v10_;
2413 : const T11 v11_;
2414 : const T12 v12_;
2415 : const T13 v13_;
2416 : const T14 v14_;
2417 : const T15 v15_;
2418 : const T16 v16_;
2419 : const T17 v17_;
2420 : const T18 v18_;
2421 : const T19 v19_;
2422 : const T20 v20_;
2423 : const T21 v21_;
2424 : const T22 v22_;
2425 : const T23 v23_;
2426 : const T24 v24_;
2427 : const T25 v25_;
2428 : const T26 v26_;
2429 : const T27 v27_;
2430 : const T28 v28_;
2431 : const T29 v29_;
2432 : const T30 v30_;
2433 : const T31 v31_;
2434 : const T32 v32_;
2435 : const T33 v33_;
2436 : const T34 v34_;
2437 : const T35 v35_;
2438 : const T36 v36_;
2439 : const T37 v37_;
2440 : const T38 v38_;
2441 : const T39 v39_;
2442 : const T40 v40_;
2443 : const T41 v41_;
2444 : const T42 v42_;
2445 : const T43 v43_;
2446 : };
2447 :
2448 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2449 : typename T6, typename T7, typename T8, typename T9, typename T10,
2450 : typename T11, typename T12, typename T13, typename T14, typename T15,
2451 : typename T16, typename T17, typename T18, typename T19, typename T20,
2452 : typename T21, typename T22, typename T23, typename T24, typename T25,
2453 : typename T26, typename T27, typename T28, typename T29, typename T30,
2454 : typename T31, typename T32, typename T33, typename T34, typename T35,
2455 : typename T36, typename T37, typename T38, typename T39, typename T40,
2456 : typename T41, typename T42, typename T43, typename T44>
2457 : class ValueArray44 {
2458 : public:
2459 : ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2460 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2461 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2462 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2463 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2464 : T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2465 : v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2466 : v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2467 : v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2468 : v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2469 : v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2470 : v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2471 : v43_(v43), v44_(v44) {}
2472 :
2473 : template <typename T>
2474 : operator ParamGenerator<T>() const {
2475 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2476 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2477 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2478 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2479 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2480 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2481 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2482 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2483 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2484 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2485 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2486 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2487 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2488 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2489 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
2490 : return ValuesIn(array);
2491 : }
2492 :
2493 : private:
2494 : // No implementation - assignment is unsupported.
2495 : void operator=(const ValueArray44& other);
2496 :
2497 : const T1 v1_;
2498 : const T2 v2_;
2499 : const T3 v3_;
2500 : const T4 v4_;
2501 : const T5 v5_;
2502 : const T6 v6_;
2503 : const T7 v7_;
2504 : const T8 v8_;
2505 : const T9 v9_;
2506 : const T10 v10_;
2507 : const T11 v11_;
2508 : const T12 v12_;
2509 : const T13 v13_;
2510 : const T14 v14_;
2511 : const T15 v15_;
2512 : const T16 v16_;
2513 : const T17 v17_;
2514 : const T18 v18_;
2515 : const T19 v19_;
2516 : const T20 v20_;
2517 : const T21 v21_;
2518 : const T22 v22_;
2519 : const T23 v23_;
2520 : const T24 v24_;
2521 : const T25 v25_;
2522 : const T26 v26_;
2523 : const T27 v27_;
2524 : const T28 v28_;
2525 : const T29 v29_;
2526 : const T30 v30_;
2527 : const T31 v31_;
2528 : const T32 v32_;
2529 : const T33 v33_;
2530 : const T34 v34_;
2531 : const T35 v35_;
2532 : const T36 v36_;
2533 : const T37 v37_;
2534 : const T38 v38_;
2535 : const T39 v39_;
2536 : const T40 v40_;
2537 : const T41 v41_;
2538 : const T42 v42_;
2539 : const T43 v43_;
2540 : const T44 v44_;
2541 : };
2542 :
2543 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2544 : typename T6, typename T7, typename T8, typename T9, typename T10,
2545 : typename T11, typename T12, typename T13, typename T14, typename T15,
2546 : typename T16, typename T17, typename T18, typename T19, typename T20,
2547 : typename T21, typename T22, typename T23, typename T24, typename T25,
2548 : typename T26, typename T27, typename T28, typename T29, typename T30,
2549 : typename T31, typename T32, typename T33, typename T34, typename T35,
2550 : typename T36, typename T37, typename T38, typename T39, typename T40,
2551 : typename T41, typename T42, typename T43, typename T44, typename T45>
2552 : class ValueArray45 {
2553 : public:
2554 : ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2555 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2556 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2557 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2558 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2559 : T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2560 : v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2561 : v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2562 : v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2563 : v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2564 : v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2565 : v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2566 : v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2567 :
2568 : template <typename T>
2569 : operator ParamGenerator<T>() const {
2570 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2571 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2572 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2573 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2574 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2575 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2576 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2577 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2578 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2579 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2580 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2581 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2582 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2583 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2584 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2585 : static_cast<T>(v45_)};
2586 : return ValuesIn(array);
2587 : }
2588 :
2589 : private:
2590 : // No implementation - assignment is unsupported.
2591 : void operator=(const ValueArray45& other);
2592 :
2593 : const T1 v1_;
2594 : const T2 v2_;
2595 : const T3 v3_;
2596 : const T4 v4_;
2597 : const T5 v5_;
2598 : const T6 v6_;
2599 : const T7 v7_;
2600 : const T8 v8_;
2601 : const T9 v9_;
2602 : const T10 v10_;
2603 : const T11 v11_;
2604 : const T12 v12_;
2605 : const T13 v13_;
2606 : const T14 v14_;
2607 : const T15 v15_;
2608 : const T16 v16_;
2609 : const T17 v17_;
2610 : const T18 v18_;
2611 : const T19 v19_;
2612 : const T20 v20_;
2613 : const T21 v21_;
2614 : const T22 v22_;
2615 : const T23 v23_;
2616 : const T24 v24_;
2617 : const T25 v25_;
2618 : const T26 v26_;
2619 : const T27 v27_;
2620 : const T28 v28_;
2621 : const T29 v29_;
2622 : const T30 v30_;
2623 : const T31 v31_;
2624 : const T32 v32_;
2625 : const T33 v33_;
2626 : const T34 v34_;
2627 : const T35 v35_;
2628 : const T36 v36_;
2629 : const T37 v37_;
2630 : const T38 v38_;
2631 : const T39 v39_;
2632 : const T40 v40_;
2633 : const T41 v41_;
2634 : const T42 v42_;
2635 : const T43 v43_;
2636 : const T44 v44_;
2637 : const T45 v45_;
2638 : };
2639 :
2640 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2641 : typename T6, typename T7, typename T8, typename T9, typename T10,
2642 : typename T11, typename T12, typename T13, typename T14, typename T15,
2643 : typename T16, typename T17, typename T18, typename T19, typename T20,
2644 : typename T21, typename T22, typename T23, typename T24, typename T25,
2645 : typename T26, typename T27, typename T28, typename T29, typename T30,
2646 : typename T31, typename T32, typename T33, typename T34, typename T35,
2647 : typename T36, typename T37, typename T38, typename T39, typename T40,
2648 : typename T41, typename T42, typename T43, typename T44, typename T45,
2649 : typename T46>
2650 : class ValueArray46 {
2651 : public:
2652 : ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2653 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2654 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2655 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2656 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2657 : T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2658 : v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2659 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2660 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2661 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2662 : v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2663 : v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2664 : v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2665 :
2666 : template <typename T>
2667 : operator ParamGenerator<T>() const {
2668 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2669 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2670 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2671 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2672 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2673 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2674 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2675 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2676 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2677 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2678 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2679 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2680 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2681 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2682 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2683 : static_cast<T>(v45_), static_cast<T>(v46_)};
2684 : return ValuesIn(array);
2685 : }
2686 :
2687 : private:
2688 : // No implementation - assignment is unsupported.
2689 : void operator=(const ValueArray46& other);
2690 :
2691 : const T1 v1_;
2692 : const T2 v2_;
2693 : const T3 v3_;
2694 : const T4 v4_;
2695 : const T5 v5_;
2696 : const T6 v6_;
2697 : const T7 v7_;
2698 : const T8 v8_;
2699 : const T9 v9_;
2700 : const T10 v10_;
2701 : const T11 v11_;
2702 : const T12 v12_;
2703 : const T13 v13_;
2704 : const T14 v14_;
2705 : const T15 v15_;
2706 : const T16 v16_;
2707 : const T17 v17_;
2708 : const T18 v18_;
2709 : const T19 v19_;
2710 : const T20 v20_;
2711 : const T21 v21_;
2712 : const T22 v22_;
2713 : const T23 v23_;
2714 : const T24 v24_;
2715 : const T25 v25_;
2716 : const T26 v26_;
2717 : const T27 v27_;
2718 : const T28 v28_;
2719 : const T29 v29_;
2720 : const T30 v30_;
2721 : const T31 v31_;
2722 : const T32 v32_;
2723 : const T33 v33_;
2724 : const T34 v34_;
2725 : const T35 v35_;
2726 : const T36 v36_;
2727 : const T37 v37_;
2728 : const T38 v38_;
2729 : const T39 v39_;
2730 : const T40 v40_;
2731 : const T41 v41_;
2732 : const T42 v42_;
2733 : const T43 v43_;
2734 : const T44 v44_;
2735 : const T45 v45_;
2736 : const T46 v46_;
2737 : };
2738 :
2739 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2740 : typename T6, typename T7, typename T8, typename T9, typename T10,
2741 : typename T11, typename T12, typename T13, typename T14, typename T15,
2742 : typename T16, typename T17, typename T18, typename T19, typename T20,
2743 : typename T21, typename T22, typename T23, typename T24, typename T25,
2744 : typename T26, typename T27, typename T28, typename T29, typename T30,
2745 : typename T31, typename T32, typename T33, typename T34, typename T35,
2746 : typename T36, typename T37, typename T38, typename T39, typename T40,
2747 : typename T41, typename T42, typename T43, typename T44, typename T45,
2748 : typename T46, typename T47>
2749 : class ValueArray47 {
2750 : public:
2751 : ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2752 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2753 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2754 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2755 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2756 : T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2757 : v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2758 : v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2759 : v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2760 : v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2761 : v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2762 : v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2763 : v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2764 : v47_(v47) {}
2765 :
2766 : template <typename T>
2767 : operator ParamGenerator<T>() const {
2768 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2769 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2770 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2771 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2772 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2773 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2774 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2775 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2776 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2777 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2778 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2779 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2780 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2781 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2782 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2783 : static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
2784 : return ValuesIn(array);
2785 : }
2786 :
2787 : private:
2788 : // No implementation - assignment is unsupported.
2789 : void operator=(const ValueArray47& other);
2790 :
2791 : const T1 v1_;
2792 : const T2 v2_;
2793 : const T3 v3_;
2794 : const T4 v4_;
2795 : const T5 v5_;
2796 : const T6 v6_;
2797 : const T7 v7_;
2798 : const T8 v8_;
2799 : const T9 v9_;
2800 : const T10 v10_;
2801 : const T11 v11_;
2802 : const T12 v12_;
2803 : const T13 v13_;
2804 : const T14 v14_;
2805 : const T15 v15_;
2806 : const T16 v16_;
2807 : const T17 v17_;
2808 : const T18 v18_;
2809 : const T19 v19_;
2810 : const T20 v20_;
2811 : const T21 v21_;
2812 : const T22 v22_;
2813 : const T23 v23_;
2814 : const T24 v24_;
2815 : const T25 v25_;
2816 : const T26 v26_;
2817 : const T27 v27_;
2818 : const T28 v28_;
2819 : const T29 v29_;
2820 : const T30 v30_;
2821 : const T31 v31_;
2822 : const T32 v32_;
2823 : const T33 v33_;
2824 : const T34 v34_;
2825 : const T35 v35_;
2826 : const T36 v36_;
2827 : const T37 v37_;
2828 : const T38 v38_;
2829 : const T39 v39_;
2830 : const T40 v40_;
2831 : const T41 v41_;
2832 : const T42 v42_;
2833 : const T43 v43_;
2834 : const T44 v44_;
2835 : const T45 v45_;
2836 : const T46 v46_;
2837 : const T47 v47_;
2838 : };
2839 :
2840 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2841 : typename T6, typename T7, typename T8, typename T9, typename T10,
2842 : typename T11, typename T12, typename T13, typename T14, typename T15,
2843 : typename T16, typename T17, typename T18, typename T19, typename T20,
2844 : typename T21, typename T22, typename T23, typename T24, typename T25,
2845 : typename T26, typename T27, typename T28, typename T29, typename T30,
2846 : typename T31, typename T32, typename T33, typename T34, typename T35,
2847 : typename T36, typename T37, typename T38, typename T39, typename T40,
2848 : typename T41, typename T42, typename T43, typename T44, typename T45,
2849 : typename T46, typename T47, typename T48>
2850 : class ValueArray48 {
2851 : public:
2852 : ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2853 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2854 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2855 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2856 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2857 : T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2858 : v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2859 : v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2860 : v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2861 : v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2862 : v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2863 : v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2864 : v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2865 : v46_(v46), v47_(v47), v48_(v48) {}
2866 :
2867 : template <typename T>
2868 : operator ParamGenerator<T>() const {
2869 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2870 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2871 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2872 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2873 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2874 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2875 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2876 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2877 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2878 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2879 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2880 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2881 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2882 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2883 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2884 : static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2885 : static_cast<T>(v48_)};
2886 : return ValuesIn(array);
2887 : }
2888 :
2889 : private:
2890 : // No implementation - assignment is unsupported.
2891 : void operator=(const ValueArray48& other);
2892 :
2893 : const T1 v1_;
2894 : const T2 v2_;
2895 : const T3 v3_;
2896 : const T4 v4_;
2897 : const T5 v5_;
2898 : const T6 v6_;
2899 : const T7 v7_;
2900 : const T8 v8_;
2901 : const T9 v9_;
2902 : const T10 v10_;
2903 : const T11 v11_;
2904 : const T12 v12_;
2905 : const T13 v13_;
2906 : const T14 v14_;
2907 : const T15 v15_;
2908 : const T16 v16_;
2909 : const T17 v17_;
2910 : const T18 v18_;
2911 : const T19 v19_;
2912 : const T20 v20_;
2913 : const T21 v21_;
2914 : const T22 v22_;
2915 : const T23 v23_;
2916 : const T24 v24_;
2917 : const T25 v25_;
2918 : const T26 v26_;
2919 : const T27 v27_;
2920 : const T28 v28_;
2921 : const T29 v29_;
2922 : const T30 v30_;
2923 : const T31 v31_;
2924 : const T32 v32_;
2925 : const T33 v33_;
2926 : const T34 v34_;
2927 : const T35 v35_;
2928 : const T36 v36_;
2929 : const T37 v37_;
2930 : const T38 v38_;
2931 : const T39 v39_;
2932 : const T40 v40_;
2933 : const T41 v41_;
2934 : const T42 v42_;
2935 : const T43 v43_;
2936 : const T44 v44_;
2937 : const T45 v45_;
2938 : const T46 v46_;
2939 : const T47 v47_;
2940 : const T48 v48_;
2941 : };
2942 :
2943 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
2944 : typename T6, typename T7, typename T8, typename T9, typename T10,
2945 : typename T11, typename T12, typename T13, typename T14, typename T15,
2946 : typename T16, typename T17, typename T18, typename T19, typename T20,
2947 : typename T21, typename T22, typename T23, typename T24, typename T25,
2948 : typename T26, typename T27, typename T28, typename T29, typename T30,
2949 : typename T31, typename T32, typename T33, typename T34, typename T35,
2950 : typename T36, typename T37, typename T38, typename T39, typename T40,
2951 : typename T41, typename T42, typename T43, typename T44, typename T45,
2952 : typename T46, typename T47, typename T48, typename T49>
2953 : class ValueArray49 {
2954 : public:
2955 : ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2956 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2957 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2958 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2959 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2960 : T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2961 : T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2962 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2963 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2964 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2965 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2966 : v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2967 : v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2968 : v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2969 :
2970 : template <typename T>
2971 : operator ParamGenerator<T>() const {
2972 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2973 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2974 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2975 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2976 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2977 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2978 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2979 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2980 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2981 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2982 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2983 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2984 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2985 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2986 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2987 : static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2988 : static_cast<T>(v48_), static_cast<T>(v49_)};
2989 : return ValuesIn(array);
2990 : }
2991 :
2992 : private:
2993 : // No implementation - assignment is unsupported.
2994 : void operator=(const ValueArray49& other);
2995 :
2996 : const T1 v1_;
2997 : const T2 v2_;
2998 : const T3 v3_;
2999 : const T4 v4_;
3000 : const T5 v5_;
3001 : const T6 v6_;
3002 : const T7 v7_;
3003 : const T8 v8_;
3004 : const T9 v9_;
3005 : const T10 v10_;
3006 : const T11 v11_;
3007 : const T12 v12_;
3008 : const T13 v13_;
3009 : const T14 v14_;
3010 : const T15 v15_;
3011 : const T16 v16_;
3012 : const T17 v17_;
3013 : const T18 v18_;
3014 : const T19 v19_;
3015 : const T20 v20_;
3016 : const T21 v21_;
3017 : const T22 v22_;
3018 : const T23 v23_;
3019 : const T24 v24_;
3020 : const T25 v25_;
3021 : const T26 v26_;
3022 : const T27 v27_;
3023 : const T28 v28_;
3024 : const T29 v29_;
3025 : const T30 v30_;
3026 : const T31 v31_;
3027 : const T32 v32_;
3028 : const T33 v33_;
3029 : const T34 v34_;
3030 : const T35 v35_;
3031 : const T36 v36_;
3032 : const T37 v37_;
3033 : const T38 v38_;
3034 : const T39 v39_;
3035 : const T40 v40_;
3036 : const T41 v41_;
3037 : const T42 v42_;
3038 : const T43 v43_;
3039 : const T44 v44_;
3040 : const T45 v45_;
3041 : const T46 v46_;
3042 : const T47 v47_;
3043 : const T48 v48_;
3044 : const T49 v49_;
3045 : };
3046 :
3047 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
3048 : typename T6, typename T7, typename T8, typename T9, typename T10,
3049 : typename T11, typename T12, typename T13, typename T14, typename T15,
3050 : typename T16, typename T17, typename T18, typename T19, typename T20,
3051 : typename T21, typename T22, typename T23, typename T24, typename T25,
3052 : typename T26, typename T27, typename T28, typename T29, typename T30,
3053 : typename T31, typename T32, typename T33, typename T34, typename T35,
3054 : typename T36, typename T37, typename T38, typename T39, typename T40,
3055 : typename T41, typename T42, typename T43, typename T44, typename T45,
3056 : typename T46, typename T47, typename T48, typename T49, typename T50>
3057 : class ValueArray50 {
3058 : public:
3059 : ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3060 : T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3061 : T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3062 : T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3063 : T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3064 : T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3065 : T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3066 : v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3067 : v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3068 : v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3069 : v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3070 : v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3071 : v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3072 : v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3073 :
3074 : template <typename T>
3075 : operator ParamGenerator<T>() const {
3076 : const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3077 : static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3078 : static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3079 : static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3080 : static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3081 : static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3082 : static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3083 : static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3084 : static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3085 : static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3086 : static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3087 : static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3088 : static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3089 : static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3090 : static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3091 : static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3092 : static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
3093 : return ValuesIn(array);
3094 : }
3095 :
3096 : private:
3097 : // No implementation - assignment is unsupported.
3098 : void operator=(const ValueArray50& other);
3099 :
3100 : const T1 v1_;
3101 : const T2 v2_;
3102 : const T3 v3_;
3103 : const T4 v4_;
3104 : const T5 v5_;
3105 : const T6 v6_;
3106 : const T7 v7_;
3107 : const T8 v8_;
3108 : const T9 v9_;
3109 : const T10 v10_;
3110 : const T11 v11_;
3111 : const T12 v12_;
3112 : const T13 v13_;
3113 : const T14 v14_;
3114 : const T15 v15_;
3115 : const T16 v16_;
3116 : const T17 v17_;
3117 : const T18 v18_;
3118 : const T19 v19_;
3119 : const T20 v20_;
3120 : const T21 v21_;
3121 : const T22 v22_;
3122 : const T23 v23_;
3123 : const T24 v24_;
3124 : const T25 v25_;
3125 : const T26 v26_;
3126 : const T27 v27_;
3127 : const T28 v28_;
3128 : const T29 v29_;
3129 : const T30 v30_;
3130 : const T31 v31_;
3131 : const T32 v32_;
3132 : const T33 v33_;
3133 : const T34 v34_;
3134 : const T35 v35_;
3135 : const T36 v36_;
3136 : const T37 v37_;
3137 : const T38 v38_;
3138 : const T39 v39_;
3139 : const T40 v40_;
3140 : const T41 v41_;
3141 : const T42 v42_;
3142 : const T43 v43_;
3143 : const T44 v44_;
3144 : const T45 v45_;
3145 : const T46 v46_;
3146 : const T47 v47_;
3147 : const T48 v48_;
3148 : const T49 v49_;
3149 : const T50 v50_;
3150 : };
3151 :
3152 : # if GTEST_HAS_COMBINE
3153 : // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
3154 : //
3155 : // Generates values from the Cartesian product of values produced
3156 : // by the argument generators.
3157 : //
3158 : template <typename T1, typename T2>
3159 : class CartesianProductGenerator2
3160 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
3161 : public:
3162 : typedef ::std::tr1::tuple<T1, T2> ParamType;
3163 :
3164 : CartesianProductGenerator2(const ParamGenerator<T1>& g1,
3165 : const ParamGenerator<T2>& g2)
3166 : : g1_(g1), g2_(g2) {}
3167 : virtual ~CartesianProductGenerator2() {}
3168 :
3169 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3170 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
3171 : }
3172 : virtual ParamIteratorInterface<ParamType>* End() const {
3173 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
3174 : }
3175 :
3176 : private:
3177 : class Iterator : public ParamIteratorInterface<ParamType> {
3178 : public:
3179 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3180 : const ParamGenerator<T1>& g1,
3181 : const typename ParamGenerator<T1>::iterator& current1,
3182 : const ParamGenerator<T2>& g2,
3183 : const typename ParamGenerator<T2>::iterator& current2)
3184 : : base_(base),
3185 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3186 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3187 : ComputeCurrentValue();
3188 : }
3189 : virtual ~Iterator() {}
3190 :
3191 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3192 : return base_;
3193 : }
3194 : // Advance should not be called on beyond-of-range iterators
3195 : // so no component iterators must be beyond end of range, either.
3196 : virtual void Advance() {
3197 : assert(!AtEnd());
3198 : ++current2_;
3199 : if (current2_ == end2_) {
3200 : current2_ = begin2_;
3201 : ++current1_;
3202 : }
3203 : ComputeCurrentValue();
3204 : }
3205 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3206 : return new Iterator(*this);
3207 : }
3208 : virtual const ParamType* Current() const { return ¤t_value_; }
3209 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3210 : // Having the same base generator guarantees that the other
3211 : // iterator is of the same type and we can downcast.
3212 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3213 : << "The program attempted to compare iterators "
3214 : << "from different generators." << std::endl;
3215 : const Iterator* typed_other =
3216 : CheckedDowncastToActualType<const Iterator>(&other);
3217 : // We must report iterators equal if they both point beyond their
3218 : // respective ranges. That can happen in a variety of fashions,
3219 : // so we have to consult AtEnd().
3220 : return (AtEnd() && typed_other->AtEnd()) ||
3221 : (
3222 : current1_ == typed_other->current1_ &&
3223 : current2_ == typed_other->current2_);
3224 : }
3225 :
3226 : private:
3227 : Iterator(const Iterator& other)
3228 : : base_(other.base_),
3229 : begin1_(other.begin1_),
3230 : end1_(other.end1_),
3231 : current1_(other.current1_),
3232 : begin2_(other.begin2_),
3233 : end2_(other.end2_),
3234 : current2_(other.current2_) {
3235 : ComputeCurrentValue();
3236 : }
3237 :
3238 : void ComputeCurrentValue() {
3239 : if (!AtEnd())
3240 : current_value_ = ParamType(*current1_, *current2_);
3241 : }
3242 : bool AtEnd() const {
3243 : // We must report iterator past the end of the range when either of the
3244 : // component iterators has reached the end of its range.
3245 : return
3246 : current1_ == end1_ ||
3247 : current2_ == end2_;
3248 : }
3249 :
3250 : // No implementation - assignment is unsupported.
3251 : void operator=(const Iterator& other);
3252 :
3253 : const ParamGeneratorInterface<ParamType>* const base_;
3254 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3255 : // current[i]_ is the actual traversing iterator.
3256 : const typename ParamGenerator<T1>::iterator begin1_;
3257 : const typename ParamGenerator<T1>::iterator end1_;
3258 : typename ParamGenerator<T1>::iterator current1_;
3259 : const typename ParamGenerator<T2>::iterator begin2_;
3260 : const typename ParamGenerator<T2>::iterator end2_;
3261 : typename ParamGenerator<T2>::iterator current2_;
3262 : ParamType current_value_;
3263 : }; // class CartesianProductGenerator2::Iterator
3264 :
3265 : // No implementation - assignment is unsupported.
3266 : void operator=(const CartesianProductGenerator2& other);
3267 :
3268 : const ParamGenerator<T1> g1_;
3269 : const ParamGenerator<T2> g2_;
3270 : }; // class CartesianProductGenerator2
3271 :
3272 :
3273 : template <typename T1, typename T2, typename T3>
3274 : class CartesianProductGenerator3
3275 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
3276 : public:
3277 : typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
3278 :
3279 : CartesianProductGenerator3(const ParamGenerator<T1>& g1,
3280 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
3281 : : g1_(g1), g2_(g2), g3_(g3) {}
3282 : virtual ~CartesianProductGenerator3() {}
3283 :
3284 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3285 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3286 : g3_.begin());
3287 : }
3288 : virtual ParamIteratorInterface<ParamType>* End() const {
3289 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3290 : }
3291 :
3292 : private:
3293 : class Iterator : public ParamIteratorInterface<ParamType> {
3294 : public:
3295 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3296 : const ParamGenerator<T1>& g1,
3297 : const typename ParamGenerator<T1>::iterator& current1,
3298 : const ParamGenerator<T2>& g2,
3299 : const typename ParamGenerator<T2>::iterator& current2,
3300 : const ParamGenerator<T3>& g3,
3301 : const typename ParamGenerator<T3>::iterator& current3)
3302 : : base_(base),
3303 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3304 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3305 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
3306 : ComputeCurrentValue();
3307 : }
3308 : virtual ~Iterator() {}
3309 :
3310 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3311 : return base_;
3312 : }
3313 : // Advance should not be called on beyond-of-range iterators
3314 : // so no component iterators must be beyond end of range, either.
3315 : virtual void Advance() {
3316 : assert(!AtEnd());
3317 : ++current3_;
3318 : if (current3_ == end3_) {
3319 : current3_ = begin3_;
3320 : ++current2_;
3321 : }
3322 : if (current2_ == end2_) {
3323 : current2_ = begin2_;
3324 : ++current1_;
3325 : }
3326 : ComputeCurrentValue();
3327 : }
3328 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3329 : return new Iterator(*this);
3330 : }
3331 : virtual const ParamType* Current() const { return ¤t_value_; }
3332 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3333 : // Having the same base generator guarantees that the other
3334 : // iterator is of the same type and we can downcast.
3335 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3336 : << "The program attempted to compare iterators "
3337 : << "from different generators." << std::endl;
3338 : const Iterator* typed_other =
3339 : CheckedDowncastToActualType<const Iterator>(&other);
3340 : // We must report iterators equal if they both point beyond their
3341 : // respective ranges. That can happen in a variety of fashions,
3342 : // so we have to consult AtEnd().
3343 : return (AtEnd() && typed_other->AtEnd()) ||
3344 : (
3345 : current1_ == typed_other->current1_ &&
3346 : current2_ == typed_other->current2_ &&
3347 : current3_ == typed_other->current3_);
3348 : }
3349 :
3350 : private:
3351 : Iterator(const Iterator& other)
3352 : : base_(other.base_),
3353 : begin1_(other.begin1_),
3354 : end1_(other.end1_),
3355 : current1_(other.current1_),
3356 : begin2_(other.begin2_),
3357 : end2_(other.end2_),
3358 : current2_(other.current2_),
3359 : begin3_(other.begin3_),
3360 : end3_(other.end3_),
3361 : current3_(other.current3_) {
3362 : ComputeCurrentValue();
3363 : }
3364 :
3365 : void ComputeCurrentValue() {
3366 : if (!AtEnd())
3367 : current_value_ = ParamType(*current1_, *current2_, *current3_);
3368 : }
3369 : bool AtEnd() const {
3370 : // We must report iterator past the end of the range when either of the
3371 : // component iterators has reached the end of its range.
3372 : return
3373 : current1_ == end1_ ||
3374 : current2_ == end2_ ||
3375 : current3_ == end3_;
3376 : }
3377 :
3378 : // No implementation - assignment is unsupported.
3379 : void operator=(const Iterator& other);
3380 :
3381 : const ParamGeneratorInterface<ParamType>* const base_;
3382 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3383 : // current[i]_ is the actual traversing iterator.
3384 : const typename ParamGenerator<T1>::iterator begin1_;
3385 : const typename ParamGenerator<T1>::iterator end1_;
3386 : typename ParamGenerator<T1>::iterator current1_;
3387 : const typename ParamGenerator<T2>::iterator begin2_;
3388 : const typename ParamGenerator<T2>::iterator end2_;
3389 : typename ParamGenerator<T2>::iterator current2_;
3390 : const typename ParamGenerator<T3>::iterator begin3_;
3391 : const typename ParamGenerator<T3>::iterator end3_;
3392 : typename ParamGenerator<T3>::iterator current3_;
3393 : ParamType current_value_;
3394 : }; // class CartesianProductGenerator3::Iterator
3395 :
3396 : // No implementation - assignment is unsupported.
3397 : void operator=(const CartesianProductGenerator3& other);
3398 :
3399 : const ParamGenerator<T1> g1_;
3400 : const ParamGenerator<T2> g2_;
3401 : const ParamGenerator<T3> g3_;
3402 : }; // class CartesianProductGenerator3
3403 :
3404 :
3405 : template <typename T1, typename T2, typename T3, typename T4>
3406 : class CartesianProductGenerator4
3407 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3408 : public:
3409 : typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
3410 :
3411 : CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3412 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3413 : const ParamGenerator<T4>& g4)
3414 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3415 : virtual ~CartesianProductGenerator4() {}
3416 :
3417 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3418 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3419 : g3_.begin(), g4_, g4_.begin());
3420 : }
3421 : virtual ParamIteratorInterface<ParamType>* End() const {
3422 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3423 : g4_, g4_.end());
3424 : }
3425 :
3426 : private:
3427 : class Iterator : public ParamIteratorInterface<ParamType> {
3428 : public:
3429 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3430 : const ParamGenerator<T1>& g1,
3431 : const typename ParamGenerator<T1>::iterator& current1,
3432 : const ParamGenerator<T2>& g2,
3433 : const typename ParamGenerator<T2>::iterator& current2,
3434 : const ParamGenerator<T3>& g3,
3435 : const typename ParamGenerator<T3>::iterator& current3,
3436 : const ParamGenerator<T4>& g4,
3437 : const typename ParamGenerator<T4>::iterator& current4)
3438 : : base_(base),
3439 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3440 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3441 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3442 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3443 : ComputeCurrentValue();
3444 : }
3445 : virtual ~Iterator() {}
3446 :
3447 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3448 : return base_;
3449 : }
3450 : // Advance should not be called on beyond-of-range iterators
3451 : // so no component iterators must be beyond end of range, either.
3452 : virtual void Advance() {
3453 : assert(!AtEnd());
3454 : ++current4_;
3455 : if (current4_ == end4_) {
3456 : current4_ = begin4_;
3457 : ++current3_;
3458 : }
3459 : if (current3_ == end3_) {
3460 : current3_ = begin3_;
3461 : ++current2_;
3462 : }
3463 : if (current2_ == end2_) {
3464 : current2_ = begin2_;
3465 : ++current1_;
3466 : }
3467 : ComputeCurrentValue();
3468 : }
3469 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3470 : return new Iterator(*this);
3471 : }
3472 : virtual const ParamType* Current() const { return ¤t_value_; }
3473 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3474 : // Having the same base generator guarantees that the other
3475 : // iterator is of the same type and we can downcast.
3476 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3477 : << "The program attempted to compare iterators "
3478 : << "from different generators." << std::endl;
3479 : const Iterator* typed_other =
3480 : CheckedDowncastToActualType<const Iterator>(&other);
3481 : // We must report iterators equal if they both point beyond their
3482 : // respective ranges. That can happen in a variety of fashions,
3483 : // so we have to consult AtEnd().
3484 : return (AtEnd() && typed_other->AtEnd()) ||
3485 : (
3486 : current1_ == typed_other->current1_ &&
3487 : current2_ == typed_other->current2_ &&
3488 : current3_ == typed_other->current3_ &&
3489 : current4_ == typed_other->current4_);
3490 : }
3491 :
3492 : private:
3493 : Iterator(const Iterator& other)
3494 : : base_(other.base_),
3495 : begin1_(other.begin1_),
3496 : end1_(other.end1_),
3497 : current1_(other.current1_),
3498 : begin2_(other.begin2_),
3499 : end2_(other.end2_),
3500 : current2_(other.current2_),
3501 : begin3_(other.begin3_),
3502 : end3_(other.end3_),
3503 : current3_(other.current3_),
3504 : begin4_(other.begin4_),
3505 : end4_(other.end4_),
3506 : current4_(other.current4_) {
3507 : ComputeCurrentValue();
3508 : }
3509 :
3510 : void ComputeCurrentValue() {
3511 : if (!AtEnd())
3512 : current_value_ = ParamType(*current1_, *current2_, *current3_,
3513 : *current4_);
3514 : }
3515 : bool AtEnd() const {
3516 : // We must report iterator past the end of the range when either of the
3517 : // component iterators has reached the end of its range.
3518 : return
3519 : current1_ == end1_ ||
3520 : current2_ == end2_ ||
3521 : current3_ == end3_ ||
3522 : current4_ == end4_;
3523 : }
3524 :
3525 : // No implementation - assignment is unsupported.
3526 : void operator=(const Iterator& other);
3527 :
3528 : const ParamGeneratorInterface<ParamType>* const base_;
3529 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3530 : // current[i]_ is the actual traversing iterator.
3531 : const typename ParamGenerator<T1>::iterator begin1_;
3532 : const typename ParamGenerator<T1>::iterator end1_;
3533 : typename ParamGenerator<T1>::iterator current1_;
3534 : const typename ParamGenerator<T2>::iterator begin2_;
3535 : const typename ParamGenerator<T2>::iterator end2_;
3536 : typename ParamGenerator<T2>::iterator current2_;
3537 : const typename ParamGenerator<T3>::iterator begin3_;
3538 : const typename ParamGenerator<T3>::iterator end3_;
3539 : typename ParamGenerator<T3>::iterator current3_;
3540 : const typename ParamGenerator<T4>::iterator begin4_;
3541 : const typename ParamGenerator<T4>::iterator end4_;
3542 : typename ParamGenerator<T4>::iterator current4_;
3543 : ParamType current_value_;
3544 : }; // class CartesianProductGenerator4::Iterator
3545 :
3546 : // No implementation - assignment is unsupported.
3547 : void operator=(const CartesianProductGenerator4& other);
3548 :
3549 : const ParamGenerator<T1> g1_;
3550 : const ParamGenerator<T2> g2_;
3551 : const ParamGenerator<T3> g3_;
3552 : const ParamGenerator<T4> g4_;
3553 : }; // class CartesianProductGenerator4
3554 :
3555 :
3556 : template <typename T1, typename T2, typename T3, typename T4, typename T5>
3557 : class CartesianProductGenerator5
3558 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
3559 : public:
3560 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
3561 :
3562 : CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3563 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3564 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3565 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3566 : virtual ~CartesianProductGenerator5() {}
3567 :
3568 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3569 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3570 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3571 : }
3572 : virtual ParamIteratorInterface<ParamType>* End() const {
3573 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3574 : g4_, g4_.end(), g5_, g5_.end());
3575 : }
3576 :
3577 : private:
3578 : class Iterator : public ParamIteratorInterface<ParamType> {
3579 : public:
3580 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3581 : const ParamGenerator<T1>& g1,
3582 : const typename ParamGenerator<T1>::iterator& current1,
3583 : const ParamGenerator<T2>& g2,
3584 : const typename ParamGenerator<T2>::iterator& current2,
3585 : const ParamGenerator<T3>& g3,
3586 : const typename ParamGenerator<T3>::iterator& current3,
3587 : const ParamGenerator<T4>& g4,
3588 : const typename ParamGenerator<T4>::iterator& current4,
3589 : const ParamGenerator<T5>& g5,
3590 : const typename ParamGenerator<T5>::iterator& current5)
3591 : : base_(base),
3592 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3593 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3594 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3595 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3596 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
3597 : ComputeCurrentValue();
3598 : }
3599 : virtual ~Iterator() {}
3600 :
3601 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3602 : return base_;
3603 : }
3604 : // Advance should not be called on beyond-of-range iterators
3605 : // so no component iterators must be beyond end of range, either.
3606 : virtual void Advance() {
3607 : assert(!AtEnd());
3608 : ++current5_;
3609 : if (current5_ == end5_) {
3610 : current5_ = begin5_;
3611 : ++current4_;
3612 : }
3613 : if (current4_ == end4_) {
3614 : current4_ = begin4_;
3615 : ++current3_;
3616 : }
3617 : if (current3_ == end3_) {
3618 : current3_ = begin3_;
3619 : ++current2_;
3620 : }
3621 : if (current2_ == end2_) {
3622 : current2_ = begin2_;
3623 : ++current1_;
3624 : }
3625 : ComputeCurrentValue();
3626 : }
3627 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3628 : return new Iterator(*this);
3629 : }
3630 : virtual const ParamType* Current() const { return ¤t_value_; }
3631 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3632 : // Having the same base generator guarantees that the other
3633 : // iterator is of the same type and we can downcast.
3634 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3635 : << "The program attempted to compare iterators "
3636 : << "from different generators." << std::endl;
3637 : const Iterator* typed_other =
3638 : CheckedDowncastToActualType<const Iterator>(&other);
3639 : // We must report iterators equal if they both point beyond their
3640 : // respective ranges. That can happen in a variety of fashions,
3641 : // so we have to consult AtEnd().
3642 : return (AtEnd() && typed_other->AtEnd()) ||
3643 : (
3644 : current1_ == typed_other->current1_ &&
3645 : current2_ == typed_other->current2_ &&
3646 : current3_ == typed_other->current3_ &&
3647 : current4_ == typed_other->current4_ &&
3648 : current5_ == typed_other->current5_);
3649 : }
3650 :
3651 : private:
3652 : Iterator(const Iterator& other)
3653 : : base_(other.base_),
3654 : begin1_(other.begin1_),
3655 : end1_(other.end1_),
3656 : current1_(other.current1_),
3657 : begin2_(other.begin2_),
3658 : end2_(other.end2_),
3659 : current2_(other.current2_),
3660 : begin3_(other.begin3_),
3661 : end3_(other.end3_),
3662 : current3_(other.current3_),
3663 : begin4_(other.begin4_),
3664 : end4_(other.end4_),
3665 : current4_(other.current4_),
3666 : begin5_(other.begin5_),
3667 : end5_(other.end5_),
3668 : current5_(other.current5_) {
3669 : ComputeCurrentValue();
3670 : }
3671 :
3672 : void ComputeCurrentValue() {
3673 : if (!AtEnd())
3674 : current_value_ = ParamType(*current1_, *current2_, *current3_,
3675 : *current4_, *current5_);
3676 : }
3677 : bool AtEnd() const {
3678 : // We must report iterator past the end of the range when either of the
3679 : // component iterators has reached the end of its range.
3680 : return
3681 : current1_ == end1_ ||
3682 : current2_ == end2_ ||
3683 : current3_ == end3_ ||
3684 : current4_ == end4_ ||
3685 : current5_ == end5_;
3686 : }
3687 :
3688 : // No implementation - assignment is unsupported.
3689 : void operator=(const Iterator& other);
3690 :
3691 : const ParamGeneratorInterface<ParamType>* const base_;
3692 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3693 : // current[i]_ is the actual traversing iterator.
3694 : const typename ParamGenerator<T1>::iterator begin1_;
3695 : const typename ParamGenerator<T1>::iterator end1_;
3696 : typename ParamGenerator<T1>::iterator current1_;
3697 : const typename ParamGenerator<T2>::iterator begin2_;
3698 : const typename ParamGenerator<T2>::iterator end2_;
3699 : typename ParamGenerator<T2>::iterator current2_;
3700 : const typename ParamGenerator<T3>::iterator begin3_;
3701 : const typename ParamGenerator<T3>::iterator end3_;
3702 : typename ParamGenerator<T3>::iterator current3_;
3703 : const typename ParamGenerator<T4>::iterator begin4_;
3704 : const typename ParamGenerator<T4>::iterator end4_;
3705 : typename ParamGenerator<T4>::iterator current4_;
3706 : const typename ParamGenerator<T5>::iterator begin5_;
3707 : const typename ParamGenerator<T5>::iterator end5_;
3708 : typename ParamGenerator<T5>::iterator current5_;
3709 : ParamType current_value_;
3710 : }; // class CartesianProductGenerator5::Iterator
3711 :
3712 : // No implementation - assignment is unsupported.
3713 : void operator=(const CartesianProductGenerator5& other);
3714 :
3715 : const ParamGenerator<T1> g1_;
3716 : const ParamGenerator<T2> g2_;
3717 : const ParamGenerator<T3> g3_;
3718 : const ParamGenerator<T4> g4_;
3719 : const ParamGenerator<T5> g5_;
3720 : }; // class CartesianProductGenerator5
3721 :
3722 :
3723 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
3724 : typename T6>
3725 : class CartesianProductGenerator6
3726 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3727 : T6> > {
3728 : public:
3729 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3730 :
3731 : CartesianProductGenerator6(const ParamGenerator<T1>& g1,
3732 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3733 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3734 : const ParamGenerator<T6>& g6)
3735 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3736 : virtual ~CartesianProductGenerator6() {}
3737 :
3738 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3739 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3740 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3741 : }
3742 : virtual ParamIteratorInterface<ParamType>* End() const {
3743 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3744 : g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3745 : }
3746 :
3747 : private:
3748 : class Iterator : public ParamIteratorInterface<ParamType> {
3749 : public:
3750 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3751 : const ParamGenerator<T1>& g1,
3752 : const typename ParamGenerator<T1>::iterator& current1,
3753 : const ParamGenerator<T2>& g2,
3754 : const typename ParamGenerator<T2>::iterator& current2,
3755 : const ParamGenerator<T3>& g3,
3756 : const typename ParamGenerator<T3>::iterator& current3,
3757 : const ParamGenerator<T4>& g4,
3758 : const typename ParamGenerator<T4>::iterator& current4,
3759 : const ParamGenerator<T5>& g5,
3760 : const typename ParamGenerator<T5>::iterator& current5,
3761 : const ParamGenerator<T6>& g6,
3762 : const typename ParamGenerator<T6>::iterator& current6)
3763 : : base_(base),
3764 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3765 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3766 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3767 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3768 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3769 : begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
3770 : ComputeCurrentValue();
3771 : }
3772 : virtual ~Iterator() {}
3773 :
3774 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3775 : return base_;
3776 : }
3777 : // Advance should not be called on beyond-of-range iterators
3778 : // so no component iterators must be beyond end of range, either.
3779 : virtual void Advance() {
3780 : assert(!AtEnd());
3781 : ++current6_;
3782 : if (current6_ == end6_) {
3783 : current6_ = begin6_;
3784 : ++current5_;
3785 : }
3786 : if (current5_ == end5_) {
3787 : current5_ = begin5_;
3788 : ++current4_;
3789 : }
3790 : if (current4_ == end4_) {
3791 : current4_ = begin4_;
3792 : ++current3_;
3793 : }
3794 : if (current3_ == end3_) {
3795 : current3_ = begin3_;
3796 : ++current2_;
3797 : }
3798 : if (current2_ == end2_) {
3799 : current2_ = begin2_;
3800 : ++current1_;
3801 : }
3802 : ComputeCurrentValue();
3803 : }
3804 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3805 : return new Iterator(*this);
3806 : }
3807 : virtual const ParamType* Current() const { return ¤t_value_; }
3808 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3809 : // Having the same base generator guarantees that the other
3810 : // iterator is of the same type and we can downcast.
3811 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3812 : << "The program attempted to compare iterators "
3813 : << "from different generators." << std::endl;
3814 : const Iterator* typed_other =
3815 : CheckedDowncastToActualType<const Iterator>(&other);
3816 : // We must report iterators equal if they both point beyond their
3817 : // respective ranges. That can happen in a variety of fashions,
3818 : // so we have to consult AtEnd().
3819 : return (AtEnd() && typed_other->AtEnd()) ||
3820 : (
3821 : current1_ == typed_other->current1_ &&
3822 : current2_ == typed_other->current2_ &&
3823 : current3_ == typed_other->current3_ &&
3824 : current4_ == typed_other->current4_ &&
3825 : current5_ == typed_other->current5_ &&
3826 : current6_ == typed_other->current6_);
3827 : }
3828 :
3829 : private:
3830 : Iterator(const Iterator& other)
3831 : : base_(other.base_),
3832 : begin1_(other.begin1_),
3833 : end1_(other.end1_),
3834 : current1_(other.current1_),
3835 : begin2_(other.begin2_),
3836 : end2_(other.end2_),
3837 : current2_(other.current2_),
3838 : begin3_(other.begin3_),
3839 : end3_(other.end3_),
3840 : current3_(other.current3_),
3841 : begin4_(other.begin4_),
3842 : end4_(other.end4_),
3843 : current4_(other.current4_),
3844 : begin5_(other.begin5_),
3845 : end5_(other.end5_),
3846 : current5_(other.current5_),
3847 : begin6_(other.begin6_),
3848 : end6_(other.end6_),
3849 : current6_(other.current6_) {
3850 : ComputeCurrentValue();
3851 : }
3852 :
3853 : void ComputeCurrentValue() {
3854 : if (!AtEnd())
3855 : current_value_ = ParamType(*current1_, *current2_, *current3_,
3856 : *current4_, *current5_, *current6_);
3857 : }
3858 : bool AtEnd() const {
3859 : // We must report iterator past the end of the range when either of the
3860 : // component iterators has reached the end of its range.
3861 : return
3862 : current1_ == end1_ ||
3863 : current2_ == end2_ ||
3864 : current3_ == end3_ ||
3865 : current4_ == end4_ ||
3866 : current5_ == end5_ ||
3867 : current6_ == end6_;
3868 : }
3869 :
3870 : // No implementation - assignment is unsupported.
3871 : void operator=(const Iterator& other);
3872 :
3873 : const ParamGeneratorInterface<ParamType>* const base_;
3874 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3875 : // current[i]_ is the actual traversing iterator.
3876 : const typename ParamGenerator<T1>::iterator begin1_;
3877 : const typename ParamGenerator<T1>::iterator end1_;
3878 : typename ParamGenerator<T1>::iterator current1_;
3879 : const typename ParamGenerator<T2>::iterator begin2_;
3880 : const typename ParamGenerator<T2>::iterator end2_;
3881 : typename ParamGenerator<T2>::iterator current2_;
3882 : const typename ParamGenerator<T3>::iterator begin3_;
3883 : const typename ParamGenerator<T3>::iterator end3_;
3884 : typename ParamGenerator<T3>::iterator current3_;
3885 : const typename ParamGenerator<T4>::iterator begin4_;
3886 : const typename ParamGenerator<T4>::iterator end4_;
3887 : typename ParamGenerator<T4>::iterator current4_;
3888 : const typename ParamGenerator<T5>::iterator begin5_;
3889 : const typename ParamGenerator<T5>::iterator end5_;
3890 : typename ParamGenerator<T5>::iterator current5_;
3891 : const typename ParamGenerator<T6>::iterator begin6_;
3892 : const typename ParamGenerator<T6>::iterator end6_;
3893 : typename ParamGenerator<T6>::iterator current6_;
3894 : ParamType current_value_;
3895 : }; // class CartesianProductGenerator6::Iterator
3896 :
3897 : // No implementation - assignment is unsupported.
3898 : void operator=(const CartesianProductGenerator6& other);
3899 :
3900 : const ParamGenerator<T1> g1_;
3901 : const ParamGenerator<T2> g2_;
3902 : const ParamGenerator<T3> g3_;
3903 : const ParamGenerator<T4> g4_;
3904 : const ParamGenerator<T5> g5_;
3905 : const ParamGenerator<T6> g6_;
3906 : }; // class CartesianProductGenerator6
3907 :
3908 :
3909 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
3910 : typename T6, typename T7>
3911 : class CartesianProductGenerator7
3912 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3913 : T7> > {
3914 : public:
3915 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3916 :
3917 : CartesianProductGenerator7(const ParamGenerator<T1>& g1,
3918 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3919 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3920 : const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
3921 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3922 : virtual ~CartesianProductGenerator7() {}
3923 :
3924 : virtual ParamIteratorInterface<ParamType>* Begin() const {
3925 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3926 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3927 : g7_.begin());
3928 : }
3929 : virtual ParamIteratorInterface<ParamType>* End() const {
3930 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3931 : g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3932 : }
3933 :
3934 : private:
3935 : class Iterator : public ParamIteratorInterface<ParamType> {
3936 : public:
3937 : Iterator(const ParamGeneratorInterface<ParamType>* base,
3938 : const ParamGenerator<T1>& g1,
3939 : const typename ParamGenerator<T1>::iterator& current1,
3940 : const ParamGenerator<T2>& g2,
3941 : const typename ParamGenerator<T2>::iterator& current2,
3942 : const ParamGenerator<T3>& g3,
3943 : const typename ParamGenerator<T3>::iterator& current3,
3944 : const ParamGenerator<T4>& g4,
3945 : const typename ParamGenerator<T4>::iterator& current4,
3946 : const ParamGenerator<T5>& g5,
3947 : const typename ParamGenerator<T5>::iterator& current5,
3948 : const ParamGenerator<T6>& g6,
3949 : const typename ParamGenerator<T6>::iterator& current6,
3950 : const ParamGenerator<T7>& g7,
3951 : const typename ParamGenerator<T7>::iterator& current7)
3952 : : base_(base),
3953 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3954 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3955 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3956 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3957 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3958 : begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3959 : begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
3960 : ComputeCurrentValue();
3961 : }
3962 : virtual ~Iterator() {}
3963 :
3964 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3965 : return base_;
3966 : }
3967 : // Advance should not be called on beyond-of-range iterators
3968 : // so no component iterators must be beyond end of range, either.
3969 : virtual void Advance() {
3970 : assert(!AtEnd());
3971 : ++current7_;
3972 : if (current7_ == end7_) {
3973 : current7_ = begin7_;
3974 : ++current6_;
3975 : }
3976 : if (current6_ == end6_) {
3977 : current6_ = begin6_;
3978 : ++current5_;
3979 : }
3980 : if (current5_ == end5_) {
3981 : current5_ = begin5_;
3982 : ++current4_;
3983 : }
3984 : if (current4_ == end4_) {
3985 : current4_ = begin4_;
3986 : ++current3_;
3987 : }
3988 : if (current3_ == end3_) {
3989 : current3_ = begin3_;
3990 : ++current2_;
3991 : }
3992 : if (current2_ == end2_) {
3993 : current2_ = begin2_;
3994 : ++current1_;
3995 : }
3996 : ComputeCurrentValue();
3997 : }
3998 : virtual ParamIteratorInterface<ParamType>* Clone() const {
3999 : return new Iterator(*this);
4000 : }
4001 : virtual const ParamType* Current() const { return ¤t_value_; }
4002 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4003 : // Having the same base generator guarantees that the other
4004 : // iterator is of the same type and we can downcast.
4005 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4006 : << "The program attempted to compare iterators "
4007 : << "from different generators." << std::endl;
4008 : const Iterator* typed_other =
4009 : CheckedDowncastToActualType<const Iterator>(&other);
4010 : // We must report iterators equal if they both point beyond their
4011 : // respective ranges. That can happen in a variety of fashions,
4012 : // so we have to consult AtEnd().
4013 : return (AtEnd() && typed_other->AtEnd()) ||
4014 : (
4015 : current1_ == typed_other->current1_ &&
4016 : current2_ == typed_other->current2_ &&
4017 : current3_ == typed_other->current3_ &&
4018 : current4_ == typed_other->current4_ &&
4019 : current5_ == typed_other->current5_ &&
4020 : current6_ == typed_other->current6_ &&
4021 : current7_ == typed_other->current7_);
4022 : }
4023 :
4024 : private:
4025 : Iterator(const Iterator& other)
4026 : : base_(other.base_),
4027 : begin1_(other.begin1_),
4028 : end1_(other.end1_),
4029 : current1_(other.current1_),
4030 : begin2_(other.begin2_),
4031 : end2_(other.end2_),
4032 : current2_(other.current2_),
4033 : begin3_(other.begin3_),
4034 : end3_(other.end3_),
4035 : current3_(other.current3_),
4036 : begin4_(other.begin4_),
4037 : end4_(other.end4_),
4038 : current4_(other.current4_),
4039 : begin5_(other.begin5_),
4040 : end5_(other.end5_),
4041 : current5_(other.current5_),
4042 : begin6_(other.begin6_),
4043 : end6_(other.end6_),
4044 : current6_(other.current6_),
4045 : begin7_(other.begin7_),
4046 : end7_(other.end7_),
4047 : current7_(other.current7_) {
4048 : ComputeCurrentValue();
4049 : }
4050 :
4051 : void ComputeCurrentValue() {
4052 : if (!AtEnd())
4053 : current_value_ = ParamType(*current1_, *current2_, *current3_,
4054 : *current4_, *current5_, *current6_, *current7_);
4055 : }
4056 : bool AtEnd() const {
4057 : // We must report iterator past the end of the range when either of the
4058 : // component iterators has reached the end of its range.
4059 : return
4060 : current1_ == end1_ ||
4061 : current2_ == end2_ ||
4062 : current3_ == end3_ ||
4063 : current4_ == end4_ ||
4064 : current5_ == end5_ ||
4065 : current6_ == end6_ ||
4066 : current7_ == end7_;
4067 : }
4068 :
4069 : // No implementation - assignment is unsupported.
4070 : void operator=(const Iterator& other);
4071 :
4072 : const ParamGeneratorInterface<ParamType>* const base_;
4073 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4074 : // current[i]_ is the actual traversing iterator.
4075 : const typename ParamGenerator<T1>::iterator begin1_;
4076 : const typename ParamGenerator<T1>::iterator end1_;
4077 : typename ParamGenerator<T1>::iterator current1_;
4078 : const typename ParamGenerator<T2>::iterator begin2_;
4079 : const typename ParamGenerator<T2>::iterator end2_;
4080 : typename ParamGenerator<T2>::iterator current2_;
4081 : const typename ParamGenerator<T3>::iterator begin3_;
4082 : const typename ParamGenerator<T3>::iterator end3_;
4083 : typename ParamGenerator<T3>::iterator current3_;
4084 : const typename ParamGenerator<T4>::iterator begin4_;
4085 : const typename ParamGenerator<T4>::iterator end4_;
4086 : typename ParamGenerator<T4>::iterator current4_;
4087 : const typename ParamGenerator<T5>::iterator begin5_;
4088 : const typename ParamGenerator<T5>::iterator end5_;
4089 : typename ParamGenerator<T5>::iterator current5_;
4090 : const typename ParamGenerator<T6>::iterator begin6_;
4091 : const typename ParamGenerator<T6>::iterator end6_;
4092 : typename ParamGenerator<T6>::iterator current6_;
4093 : const typename ParamGenerator<T7>::iterator begin7_;
4094 : const typename ParamGenerator<T7>::iterator end7_;
4095 : typename ParamGenerator<T7>::iterator current7_;
4096 : ParamType current_value_;
4097 : }; // class CartesianProductGenerator7::Iterator
4098 :
4099 : // No implementation - assignment is unsupported.
4100 : void operator=(const CartesianProductGenerator7& other);
4101 :
4102 : const ParamGenerator<T1> g1_;
4103 : const ParamGenerator<T2> g2_;
4104 : const ParamGenerator<T3> g3_;
4105 : const ParamGenerator<T4> g4_;
4106 : const ParamGenerator<T5> g5_;
4107 : const ParamGenerator<T6> g6_;
4108 : const ParamGenerator<T7> g7_;
4109 : }; // class CartesianProductGenerator7
4110 :
4111 :
4112 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
4113 : typename T6, typename T7, typename T8>
4114 : class CartesianProductGenerator8
4115 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4116 : T7, T8> > {
4117 : public:
4118 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4119 :
4120 : CartesianProductGenerator8(const ParamGenerator<T1>& g1,
4121 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4122 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4123 : const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4124 : const ParamGenerator<T8>& g8)
4125 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4126 : g8_(g8) {}
4127 : virtual ~CartesianProductGenerator8() {}
4128 :
4129 : virtual ParamIteratorInterface<ParamType>* Begin() const {
4130 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4131 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4132 : g7_.begin(), g8_, g8_.begin());
4133 : }
4134 : virtual ParamIteratorInterface<ParamType>* End() const {
4135 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4136 : g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4137 : g8_.end());
4138 : }
4139 :
4140 : private:
4141 : class Iterator : public ParamIteratorInterface<ParamType> {
4142 : public:
4143 : Iterator(const ParamGeneratorInterface<ParamType>* base,
4144 : const ParamGenerator<T1>& g1,
4145 : const typename ParamGenerator<T1>::iterator& current1,
4146 : const ParamGenerator<T2>& g2,
4147 : const typename ParamGenerator<T2>::iterator& current2,
4148 : const ParamGenerator<T3>& g3,
4149 : const typename ParamGenerator<T3>::iterator& current3,
4150 : const ParamGenerator<T4>& g4,
4151 : const typename ParamGenerator<T4>::iterator& current4,
4152 : const ParamGenerator<T5>& g5,
4153 : const typename ParamGenerator<T5>::iterator& current5,
4154 : const ParamGenerator<T6>& g6,
4155 : const typename ParamGenerator<T6>::iterator& current6,
4156 : const ParamGenerator<T7>& g7,
4157 : const typename ParamGenerator<T7>::iterator& current7,
4158 : const ParamGenerator<T8>& g8,
4159 : const typename ParamGenerator<T8>::iterator& current8)
4160 : : base_(base),
4161 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4162 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4163 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4164 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4165 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4166 : begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4167 : begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4168 : begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
4169 : ComputeCurrentValue();
4170 : }
4171 : virtual ~Iterator() {}
4172 :
4173 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4174 : return base_;
4175 : }
4176 : // Advance should not be called on beyond-of-range iterators
4177 : // so no component iterators must be beyond end of range, either.
4178 : virtual void Advance() {
4179 : assert(!AtEnd());
4180 : ++current8_;
4181 : if (current8_ == end8_) {
4182 : current8_ = begin8_;
4183 : ++current7_;
4184 : }
4185 : if (current7_ == end7_) {
4186 : current7_ = begin7_;
4187 : ++current6_;
4188 : }
4189 : if (current6_ == end6_) {
4190 : current6_ = begin6_;
4191 : ++current5_;
4192 : }
4193 : if (current5_ == end5_) {
4194 : current5_ = begin5_;
4195 : ++current4_;
4196 : }
4197 : if (current4_ == end4_) {
4198 : current4_ = begin4_;
4199 : ++current3_;
4200 : }
4201 : if (current3_ == end3_) {
4202 : current3_ = begin3_;
4203 : ++current2_;
4204 : }
4205 : if (current2_ == end2_) {
4206 : current2_ = begin2_;
4207 : ++current1_;
4208 : }
4209 : ComputeCurrentValue();
4210 : }
4211 : virtual ParamIteratorInterface<ParamType>* Clone() const {
4212 : return new Iterator(*this);
4213 : }
4214 : virtual const ParamType* Current() const { return ¤t_value_; }
4215 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4216 : // Having the same base generator guarantees that the other
4217 : // iterator is of the same type and we can downcast.
4218 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4219 : << "The program attempted to compare iterators "
4220 : << "from different generators." << std::endl;
4221 : const Iterator* typed_other =
4222 : CheckedDowncastToActualType<const Iterator>(&other);
4223 : // We must report iterators equal if they both point beyond their
4224 : // respective ranges. That can happen in a variety of fashions,
4225 : // so we have to consult AtEnd().
4226 : return (AtEnd() && typed_other->AtEnd()) ||
4227 : (
4228 : current1_ == typed_other->current1_ &&
4229 : current2_ == typed_other->current2_ &&
4230 : current3_ == typed_other->current3_ &&
4231 : current4_ == typed_other->current4_ &&
4232 : current5_ == typed_other->current5_ &&
4233 : current6_ == typed_other->current6_ &&
4234 : current7_ == typed_other->current7_ &&
4235 : current8_ == typed_other->current8_);
4236 : }
4237 :
4238 : private:
4239 : Iterator(const Iterator& other)
4240 : : base_(other.base_),
4241 : begin1_(other.begin1_),
4242 : end1_(other.end1_),
4243 : current1_(other.current1_),
4244 : begin2_(other.begin2_),
4245 : end2_(other.end2_),
4246 : current2_(other.current2_),
4247 : begin3_(other.begin3_),
4248 : end3_(other.end3_),
4249 : current3_(other.current3_),
4250 : begin4_(other.begin4_),
4251 : end4_(other.end4_),
4252 : current4_(other.current4_),
4253 : begin5_(other.begin5_),
4254 : end5_(other.end5_),
4255 : current5_(other.current5_),
4256 : begin6_(other.begin6_),
4257 : end6_(other.end6_),
4258 : current6_(other.current6_),
4259 : begin7_(other.begin7_),
4260 : end7_(other.end7_),
4261 : current7_(other.current7_),
4262 : begin8_(other.begin8_),
4263 : end8_(other.end8_),
4264 : current8_(other.current8_) {
4265 : ComputeCurrentValue();
4266 : }
4267 :
4268 : void ComputeCurrentValue() {
4269 : if (!AtEnd())
4270 : current_value_ = ParamType(*current1_, *current2_, *current3_,
4271 : *current4_, *current5_, *current6_, *current7_, *current8_);
4272 : }
4273 : bool AtEnd() const {
4274 : // We must report iterator past the end of the range when either of the
4275 : // component iterators has reached the end of its range.
4276 : return
4277 : current1_ == end1_ ||
4278 : current2_ == end2_ ||
4279 : current3_ == end3_ ||
4280 : current4_ == end4_ ||
4281 : current5_ == end5_ ||
4282 : current6_ == end6_ ||
4283 : current7_ == end7_ ||
4284 : current8_ == end8_;
4285 : }
4286 :
4287 : // No implementation - assignment is unsupported.
4288 : void operator=(const Iterator& other);
4289 :
4290 : const ParamGeneratorInterface<ParamType>* const base_;
4291 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4292 : // current[i]_ is the actual traversing iterator.
4293 : const typename ParamGenerator<T1>::iterator begin1_;
4294 : const typename ParamGenerator<T1>::iterator end1_;
4295 : typename ParamGenerator<T1>::iterator current1_;
4296 : const typename ParamGenerator<T2>::iterator begin2_;
4297 : const typename ParamGenerator<T2>::iterator end2_;
4298 : typename ParamGenerator<T2>::iterator current2_;
4299 : const typename ParamGenerator<T3>::iterator begin3_;
4300 : const typename ParamGenerator<T3>::iterator end3_;
4301 : typename ParamGenerator<T3>::iterator current3_;
4302 : const typename ParamGenerator<T4>::iterator begin4_;
4303 : const typename ParamGenerator<T4>::iterator end4_;
4304 : typename ParamGenerator<T4>::iterator current4_;
4305 : const typename ParamGenerator<T5>::iterator begin5_;
4306 : const typename ParamGenerator<T5>::iterator end5_;
4307 : typename ParamGenerator<T5>::iterator current5_;
4308 : const typename ParamGenerator<T6>::iterator begin6_;
4309 : const typename ParamGenerator<T6>::iterator end6_;
4310 : typename ParamGenerator<T6>::iterator current6_;
4311 : const typename ParamGenerator<T7>::iterator begin7_;
4312 : const typename ParamGenerator<T7>::iterator end7_;
4313 : typename ParamGenerator<T7>::iterator current7_;
4314 : const typename ParamGenerator<T8>::iterator begin8_;
4315 : const typename ParamGenerator<T8>::iterator end8_;
4316 : typename ParamGenerator<T8>::iterator current8_;
4317 : ParamType current_value_;
4318 : }; // class CartesianProductGenerator8::Iterator
4319 :
4320 : // No implementation - assignment is unsupported.
4321 : void operator=(const CartesianProductGenerator8& other);
4322 :
4323 : const ParamGenerator<T1> g1_;
4324 : const ParamGenerator<T2> g2_;
4325 : const ParamGenerator<T3> g3_;
4326 : const ParamGenerator<T4> g4_;
4327 : const ParamGenerator<T5> g5_;
4328 : const ParamGenerator<T6> g6_;
4329 : const ParamGenerator<T7> g7_;
4330 : const ParamGenerator<T8> g8_;
4331 : }; // class CartesianProductGenerator8
4332 :
4333 :
4334 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
4335 : typename T6, typename T7, typename T8, typename T9>
4336 : class CartesianProductGenerator9
4337 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4338 : T7, T8, T9> > {
4339 : public:
4340 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4341 :
4342 : CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4343 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4344 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4345 : const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4346 : const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4347 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4348 : g9_(g9) {}
4349 : virtual ~CartesianProductGenerator9() {}
4350 :
4351 : virtual ParamIteratorInterface<ParamType>* Begin() const {
4352 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4353 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4354 : g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4355 : }
4356 : virtual ParamIteratorInterface<ParamType>* End() const {
4357 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4358 : g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4359 : g8_.end(), g9_, g9_.end());
4360 : }
4361 :
4362 : private:
4363 : class Iterator : public ParamIteratorInterface<ParamType> {
4364 : public:
4365 : Iterator(const ParamGeneratorInterface<ParamType>* base,
4366 : const ParamGenerator<T1>& g1,
4367 : const typename ParamGenerator<T1>::iterator& current1,
4368 : const ParamGenerator<T2>& g2,
4369 : const typename ParamGenerator<T2>::iterator& current2,
4370 : const ParamGenerator<T3>& g3,
4371 : const typename ParamGenerator<T3>::iterator& current3,
4372 : const ParamGenerator<T4>& g4,
4373 : const typename ParamGenerator<T4>::iterator& current4,
4374 : const ParamGenerator<T5>& g5,
4375 : const typename ParamGenerator<T5>::iterator& current5,
4376 : const ParamGenerator<T6>& g6,
4377 : const typename ParamGenerator<T6>::iterator& current6,
4378 : const ParamGenerator<T7>& g7,
4379 : const typename ParamGenerator<T7>::iterator& current7,
4380 : const ParamGenerator<T8>& g8,
4381 : const typename ParamGenerator<T8>::iterator& current8,
4382 : const ParamGenerator<T9>& g9,
4383 : const typename ParamGenerator<T9>::iterator& current9)
4384 : : base_(base),
4385 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4386 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4387 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4388 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4389 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4390 : begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4391 : begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4392 : begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4393 : begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4394 : ComputeCurrentValue();
4395 : }
4396 : virtual ~Iterator() {}
4397 :
4398 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4399 : return base_;
4400 : }
4401 : // Advance should not be called on beyond-of-range iterators
4402 : // so no component iterators must be beyond end of range, either.
4403 : virtual void Advance() {
4404 : assert(!AtEnd());
4405 : ++current9_;
4406 : if (current9_ == end9_) {
4407 : current9_ = begin9_;
4408 : ++current8_;
4409 : }
4410 : if (current8_ == end8_) {
4411 : current8_ = begin8_;
4412 : ++current7_;
4413 : }
4414 : if (current7_ == end7_) {
4415 : current7_ = begin7_;
4416 : ++current6_;
4417 : }
4418 : if (current6_ == end6_) {
4419 : current6_ = begin6_;
4420 : ++current5_;
4421 : }
4422 : if (current5_ == end5_) {
4423 : current5_ = begin5_;
4424 : ++current4_;
4425 : }
4426 : if (current4_ == end4_) {
4427 : current4_ = begin4_;
4428 : ++current3_;
4429 : }
4430 : if (current3_ == end3_) {
4431 : current3_ = begin3_;
4432 : ++current2_;
4433 : }
4434 : if (current2_ == end2_) {
4435 : current2_ = begin2_;
4436 : ++current1_;
4437 : }
4438 : ComputeCurrentValue();
4439 : }
4440 : virtual ParamIteratorInterface<ParamType>* Clone() const {
4441 : return new Iterator(*this);
4442 : }
4443 : virtual const ParamType* Current() const { return ¤t_value_; }
4444 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4445 : // Having the same base generator guarantees that the other
4446 : // iterator is of the same type and we can downcast.
4447 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4448 : << "The program attempted to compare iterators "
4449 : << "from different generators." << std::endl;
4450 : const Iterator* typed_other =
4451 : CheckedDowncastToActualType<const Iterator>(&other);
4452 : // We must report iterators equal if they both point beyond their
4453 : // respective ranges. That can happen in a variety of fashions,
4454 : // so we have to consult AtEnd().
4455 : return (AtEnd() && typed_other->AtEnd()) ||
4456 : (
4457 : current1_ == typed_other->current1_ &&
4458 : current2_ == typed_other->current2_ &&
4459 : current3_ == typed_other->current3_ &&
4460 : current4_ == typed_other->current4_ &&
4461 : current5_ == typed_other->current5_ &&
4462 : current6_ == typed_other->current6_ &&
4463 : current7_ == typed_other->current7_ &&
4464 : current8_ == typed_other->current8_ &&
4465 : current9_ == typed_other->current9_);
4466 : }
4467 :
4468 : private:
4469 : Iterator(const Iterator& other)
4470 : : base_(other.base_),
4471 : begin1_(other.begin1_),
4472 : end1_(other.end1_),
4473 : current1_(other.current1_),
4474 : begin2_(other.begin2_),
4475 : end2_(other.end2_),
4476 : current2_(other.current2_),
4477 : begin3_(other.begin3_),
4478 : end3_(other.end3_),
4479 : current3_(other.current3_),
4480 : begin4_(other.begin4_),
4481 : end4_(other.end4_),
4482 : current4_(other.current4_),
4483 : begin5_(other.begin5_),
4484 : end5_(other.end5_),
4485 : current5_(other.current5_),
4486 : begin6_(other.begin6_),
4487 : end6_(other.end6_),
4488 : current6_(other.current6_),
4489 : begin7_(other.begin7_),
4490 : end7_(other.end7_),
4491 : current7_(other.current7_),
4492 : begin8_(other.begin8_),
4493 : end8_(other.end8_),
4494 : current8_(other.current8_),
4495 : begin9_(other.begin9_),
4496 : end9_(other.end9_),
4497 : current9_(other.current9_) {
4498 : ComputeCurrentValue();
4499 : }
4500 :
4501 : void ComputeCurrentValue() {
4502 : if (!AtEnd())
4503 : current_value_ = ParamType(*current1_, *current2_, *current3_,
4504 : *current4_, *current5_, *current6_, *current7_, *current8_,
4505 : *current9_);
4506 : }
4507 : bool AtEnd() const {
4508 : // We must report iterator past the end of the range when either of the
4509 : // component iterators has reached the end of its range.
4510 : return
4511 : current1_ == end1_ ||
4512 : current2_ == end2_ ||
4513 : current3_ == end3_ ||
4514 : current4_ == end4_ ||
4515 : current5_ == end5_ ||
4516 : current6_ == end6_ ||
4517 : current7_ == end7_ ||
4518 : current8_ == end8_ ||
4519 : current9_ == end9_;
4520 : }
4521 :
4522 : // No implementation - assignment is unsupported.
4523 : void operator=(const Iterator& other);
4524 :
4525 : const ParamGeneratorInterface<ParamType>* const base_;
4526 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4527 : // current[i]_ is the actual traversing iterator.
4528 : const typename ParamGenerator<T1>::iterator begin1_;
4529 : const typename ParamGenerator<T1>::iterator end1_;
4530 : typename ParamGenerator<T1>::iterator current1_;
4531 : const typename ParamGenerator<T2>::iterator begin2_;
4532 : const typename ParamGenerator<T2>::iterator end2_;
4533 : typename ParamGenerator<T2>::iterator current2_;
4534 : const typename ParamGenerator<T3>::iterator begin3_;
4535 : const typename ParamGenerator<T3>::iterator end3_;
4536 : typename ParamGenerator<T3>::iterator current3_;
4537 : const typename ParamGenerator<T4>::iterator begin4_;
4538 : const typename ParamGenerator<T4>::iterator end4_;
4539 : typename ParamGenerator<T4>::iterator current4_;
4540 : const typename ParamGenerator<T5>::iterator begin5_;
4541 : const typename ParamGenerator<T5>::iterator end5_;
4542 : typename ParamGenerator<T5>::iterator current5_;
4543 : const typename ParamGenerator<T6>::iterator begin6_;
4544 : const typename ParamGenerator<T6>::iterator end6_;
4545 : typename ParamGenerator<T6>::iterator current6_;
4546 : const typename ParamGenerator<T7>::iterator begin7_;
4547 : const typename ParamGenerator<T7>::iterator end7_;
4548 : typename ParamGenerator<T7>::iterator current7_;
4549 : const typename ParamGenerator<T8>::iterator begin8_;
4550 : const typename ParamGenerator<T8>::iterator end8_;
4551 : typename ParamGenerator<T8>::iterator current8_;
4552 : const typename ParamGenerator<T9>::iterator begin9_;
4553 : const typename ParamGenerator<T9>::iterator end9_;
4554 : typename ParamGenerator<T9>::iterator current9_;
4555 : ParamType current_value_;
4556 : }; // class CartesianProductGenerator9::Iterator
4557 :
4558 : // No implementation - assignment is unsupported.
4559 : void operator=(const CartesianProductGenerator9& other);
4560 :
4561 : const ParamGenerator<T1> g1_;
4562 : const ParamGenerator<T2> g2_;
4563 : const ParamGenerator<T3> g3_;
4564 : const ParamGenerator<T4> g4_;
4565 : const ParamGenerator<T5> g5_;
4566 : const ParamGenerator<T6> g6_;
4567 : const ParamGenerator<T7> g7_;
4568 : const ParamGenerator<T8> g8_;
4569 : const ParamGenerator<T9> g9_;
4570 : }; // class CartesianProductGenerator9
4571 :
4572 :
4573 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
4574 : typename T6, typename T7, typename T8, typename T9, typename T10>
4575 : class CartesianProductGenerator10
4576 : : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4577 : T7, T8, T9, T10> > {
4578 : public:
4579 : typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4580 :
4581 : CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4582 : const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4583 : const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4584 : const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4585 : const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4586 : const ParamGenerator<T10>& g10)
4587 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4588 : g9_(g9), g10_(g10) {}
4589 : virtual ~CartesianProductGenerator10() {}
4590 :
4591 : virtual ParamIteratorInterface<ParamType>* Begin() const {
4592 : return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4593 : g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4594 : g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4595 : }
4596 : virtual ParamIteratorInterface<ParamType>* End() const {
4597 : return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4598 : g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4599 : g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4600 : }
4601 :
4602 : private:
4603 : class Iterator : public ParamIteratorInterface<ParamType> {
4604 : public:
4605 : Iterator(const ParamGeneratorInterface<ParamType>* base,
4606 : const ParamGenerator<T1>& g1,
4607 : const typename ParamGenerator<T1>::iterator& current1,
4608 : const ParamGenerator<T2>& g2,
4609 : const typename ParamGenerator<T2>::iterator& current2,
4610 : const ParamGenerator<T3>& g3,
4611 : const typename ParamGenerator<T3>::iterator& current3,
4612 : const ParamGenerator<T4>& g4,
4613 : const typename ParamGenerator<T4>::iterator& current4,
4614 : const ParamGenerator<T5>& g5,
4615 : const typename ParamGenerator<T5>::iterator& current5,
4616 : const ParamGenerator<T6>& g6,
4617 : const typename ParamGenerator<T6>::iterator& current6,
4618 : const ParamGenerator<T7>& g7,
4619 : const typename ParamGenerator<T7>::iterator& current7,
4620 : const ParamGenerator<T8>& g8,
4621 : const typename ParamGenerator<T8>::iterator& current8,
4622 : const ParamGenerator<T9>& g9,
4623 : const typename ParamGenerator<T9>::iterator& current9,
4624 : const ParamGenerator<T10>& g10,
4625 : const typename ParamGenerator<T10>::iterator& current10)
4626 : : base_(base),
4627 : begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4628 : begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4629 : begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4630 : begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4631 : begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4632 : begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4633 : begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4634 : begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4635 : begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4636 : begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
4637 : ComputeCurrentValue();
4638 : }
4639 : virtual ~Iterator() {}
4640 :
4641 : virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4642 : return base_;
4643 : }
4644 : // Advance should not be called on beyond-of-range iterators
4645 : // so no component iterators must be beyond end of range, either.
4646 : virtual void Advance() {
4647 : assert(!AtEnd());
4648 : ++current10_;
4649 : if (current10_ == end10_) {
4650 : current10_ = begin10_;
4651 : ++current9_;
4652 : }
4653 : if (current9_ == end9_) {
4654 : current9_ = begin9_;
4655 : ++current8_;
4656 : }
4657 : if (current8_ == end8_) {
4658 : current8_ = begin8_;
4659 : ++current7_;
4660 : }
4661 : if (current7_ == end7_) {
4662 : current7_ = begin7_;
4663 : ++current6_;
4664 : }
4665 : if (current6_ == end6_) {
4666 : current6_ = begin6_;
4667 : ++current5_;
4668 : }
4669 : if (current5_ == end5_) {
4670 : current5_ = begin5_;
4671 : ++current4_;
4672 : }
4673 : if (current4_ == end4_) {
4674 : current4_ = begin4_;
4675 : ++current3_;
4676 : }
4677 : if (current3_ == end3_) {
4678 : current3_ = begin3_;
4679 : ++current2_;
4680 : }
4681 : if (current2_ == end2_) {
4682 : current2_ = begin2_;
4683 : ++current1_;
4684 : }
4685 : ComputeCurrentValue();
4686 : }
4687 : virtual ParamIteratorInterface<ParamType>* Clone() const {
4688 : return new Iterator(*this);
4689 : }
4690 : virtual const ParamType* Current() const { return ¤t_value_; }
4691 : virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4692 : // Having the same base generator guarantees that the other
4693 : // iterator is of the same type and we can downcast.
4694 : GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4695 : << "The program attempted to compare iterators "
4696 : << "from different generators." << std::endl;
4697 : const Iterator* typed_other =
4698 : CheckedDowncastToActualType<const Iterator>(&other);
4699 : // We must report iterators equal if they both point beyond their
4700 : // respective ranges. That can happen in a variety of fashions,
4701 : // so we have to consult AtEnd().
4702 : return (AtEnd() && typed_other->AtEnd()) ||
4703 : (
4704 : current1_ == typed_other->current1_ &&
4705 : current2_ == typed_other->current2_ &&
4706 : current3_ == typed_other->current3_ &&
4707 : current4_ == typed_other->current4_ &&
4708 : current5_ == typed_other->current5_ &&
4709 : current6_ == typed_other->current6_ &&
4710 : current7_ == typed_other->current7_ &&
4711 : current8_ == typed_other->current8_ &&
4712 : current9_ == typed_other->current9_ &&
4713 : current10_ == typed_other->current10_);
4714 : }
4715 :
4716 : private:
4717 : Iterator(const Iterator& other)
4718 : : base_(other.base_),
4719 : begin1_(other.begin1_),
4720 : end1_(other.end1_),
4721 : current1_(other.current1_),
4722 : begin2_(other.begin2_),
4723 : end2_(other.end2_),
4724 : current2_(other.current2_),
4725 : begin3_(other.begin3_),
4726 : end3_(other.end3_),
4727 : current3_(other.current3_),
4728 : begin4_(other.begin4_),
4729 : end4_(other.end4_),
4730 : current4_(other.current4_),
4731 : begin5_(other.begin5_),
4732 : end5_(other.end5_),
4733 : current5_(other.current5_),
4734 : begin6_(other.begin6_),
4735 : end6_(other.end6_),
4736 : current6_(other.current6_),
4737 : begin7_(other.begin7_),
4738 : end7_(other.end7_),
4739 : current7_(other.current7_),
4740 : begin8_(other.begin8_),
4741 : end8_(other.end8_),
4742 : current8_(other.current8_),
4743 : begin9_(other.begin9_),
4744 : end9_(other.end9_),
4745 : current9_(other.current9_),
4746 : begin10_(other.begin10_),
4747 : end10_(other.end10_),
4748 : current10_(other.current10_) {
4749 : ComputeCurrentValue();
4750 : }
4751 :
4752 : void ComputeCurrentValue() {
4753 : if (!AtEnd())
4754 : current_value_ = ParamType(*current1_, *current2_, *current3_,
4755 : *current4_, *current5_, *current6_, *current7_, *current8_,
4756 : *current9_, *current10_);
4757 : }
4758 : bool AtEnd() const {
4759 : // We must report iterator past the end of the range when either of the
4760 : // component iterators has reached the end of its range.
4761 : return
4762 : current1_ == end1_ ||
4763 : current2_ == end2_ ||
4764 : current3_ == end3_ ||
4765 : current4_ == end4_ ||
4766 : current5_ == end5_ ||
4767 : current6_ == end6_ ||
4768 : current7_ == end7_ ||
4769 : current8_ == end8_ ||
4770 : current9_ == end9_ ||
4771 : current10_ == end10_;
4772 : }
4773 :
4774 : // No implementation - assignment is unsupported.
4775 : void operator=(const Iterator& other);
4776 :
4777 : const ParamGeneratorInterface<ParamType>* const base_;
4778 : // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4779 : // current[i]_ is the actual traversing iterator.
4780 : const typename ParamGenerator<T1>::iterator begin1_;
4781 : const typename ParamGenerator<T1>::iterator end1_;
4782 : typename ParamGenerator<T1>::iterator current1_;
4783 : const typename ParamGenerator<T2>::iterator begin2_;
4784 : const typename ParamGenerator<T2>::iterator end2_;
4785 : typename ParamGenerator<T2>::iterator current2_;
4786 : const typename ParamGenerator<T3>::iterator begin3_;
4787 : const typename ParamGenerator<T3>::iterator end3_;
4788 : typename ParamGenerator<T3>::iterator current3_;
4789 : const typename ParamGenerator<T4>::iterator begin4_;
4790 : const typename ParamGenerator<T4>::iterator end4_;
4791 : typename ParamGenerator<T4>::iterator current4_;
4792 : const typename ParamGenerator<T5>::iterator begin5_;
4793 : const typename ParamGenerator<T5>::iterator end5_;
4794 : typename ParamGenerator<T5>::iterator current5_;
4795 : const typename ParamGenerator<T6>::iterator begin6_;
4796 : const typename ParamGenerator<T6>::iterator end6_;
4797 : typename ParamGenerator<T6>::iterator current6_;
4798 : const typename ParamGenerator<T7>::iterator begin7_;
4799 : const typename ParamGenerator<T7>::iterator end7_;
4800 : typename ParamGenerator<T7>::iterator current7_;
4801 : const typename ParamGenerator<T8>::iterator begin8_;
4802 : const typename ParamGenerator<T8>::iterator end8_;
4803 : typename ParamGenerator<T8>::iterator current8_;
4804 : const typename ParamGenerator<T9>::iterator begin9_;
4805 : const typename ParamGenerator<T9>::iterator end9_;
4806 : typename ParamGenerator<T9>::iterator current9_;
4807 : const typename ParamGenerator<T10>::iterator begin10_;
4808 : const typename ParamGenerator<T10>::iterator end10_;
4809 : typename ParamGenerator<T10>::iterator current10_;
4810 : ParamType current_value_;
4811 : }; // class CartesianProductGenerator10::Iterator
4812 :
4813 : // No implementation - assignment is unsupported.
4814 : void operator=(const CartesianProductGenerator10& other);
4815 :
4816 : const ParamGenerator<T1> g1_;
4817 : const ParamGenerator<T2> g2_;
4818 : const ParamGenerator<T3> g3_;
4819 : const ParamGenerator<T4> g4_;
4820 : const ParamGenerator<T5> g5_;
4821 : const ParamGenerator<T6> g6_;
4822 : const ParamGenerator<T7> g7_;
4823 : const ParamGenerator<T8> g8_;
4824 : const ParamGenerator<T9> g9_;
4825 : const ParamGenerator<T10> g10_;
4826 : }; // class CartesianProductGenerator10
4827 :
4828 :
4829 : // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
4830 : //
4831 : // Helper classes providing Combine() with polymorphic features. They allow
4832 : // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
4833 : // convertible to U.
4834 : //
4835 : template <class Generator1, class Generator2>
4836 : class CartesianProductHolder2 {
4837 : public:
4838 : CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
4839 : : g1_(g1), g2_(g2) {}
4840 : template <typename T1, typename T2>
4841 : operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {
4842 : return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
4843 : new CartesianProductGenerator2<T1, T2>(
4844 : static_cast<ParamGenerator<T1> >(g1_),
4845 : static_cast<ParamGenerator<T2> >(g2_)));
4846 : }
4847 :
4848 : private:
4849 : // No implementation - assignment is unsupported.
4850 : void operator=(const CartesianProductHolder2& other);
4851 :
4852 : const Generator1 g1_;
4853 : const Generator2 g2_;
4854 : }; // class CartesianProductHolder2
4855 :
4856 : template <class Generator1, class Generator2, class Generator3>
4857 : class CartesianProductHolder3 {
4858 : public:
4859 : CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
4860 : const Generator3& g3)
4861 : : g1_(g1), g2_(g2), g3_(g3) {}
4862 : template <typename T1, typename T2, typename T3>
4863 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {
4864 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
4865 : new CartesianProductGenerator3<T1, T2, T3>(
4866 : static_cast<ParamGenerator<T1> >(g1_),
4867 : static_cast<ParamGenerator<T2> >(g2_),
4868 : static_cast<ParamGenerator<T3> >(g3_)));
4869 : }
4870 :
4871 : private:
4872 : // No implementation - assignment is unsupported.
4873 : void operator=(const CartesianProductHolder3& other);
4874 :
4875 : const Generator1 g1_;
4876 : const Generator2 g2_;
4877 : const Generator3 g3_;
4878 : }; // class CartesianProductHolder3
4879 :
4880 : template <class Generator1, class Generator2, class Generator3,
4881 : class Generator4>
4882 : class CartesianProductHolder4 {
4883 : public:
4884 : CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
4885 : const Generator3& g3, const Generator4& g4)
4886 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4887 : template <typename T1, typename T2, typename T3, typename T4>
4888 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {
4889 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
4890 : new CartesianProductGenerator4<T1, T2, T3, T4>(
4891 : static_cast<ParamGenerator<T1> >(g1_),
4892 : static_cast<ParamGenerator<T2> >(g2_),
4893 : static_cast<ParamGenerator<T3> >(g3_),
4894 : static_cast<ParamGenerator<T4> >(g4_)));
4895 : }
4896 :
4897 : private:
4898 : // No implementation - assignment is unsupported.
4899 : void operator=(const CartesianProductHolder4& other);
4900 :
4901 : const Generator1 g1_;
4902 : const Generator2 g2_;
4903 : const Generator3 g3_;
4904 : const Generator4 g4_;
4905 : }; // class CartesianProductHolder4
4906 :
4907 : template <class Generator1, class Generator2, class Generator3,
4908 : class Generator4, class Generator5>
4909 : class CartesianProductHolder5 {
4910 : public:
4911 : CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
4912 : const Generator3& g3, const Generator4& g4, const Generator5& g5)
4913 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4914 : template <typename T1, typename T2, typename T3, typename T4, typename T5>
4915 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {
4916 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
4917 : new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4918 : static_cast<ParamGenerator<T1> >(g1_),
4919 : static_cast<ParamGenerator<T2> >(g2_),
4920 : static_cast<ParamGenerator<T3> >(g3_),
4921 : static_cast<ParamGenerator<T4> >(g4_),
4922 : static_cast<ParamGenerator<T5> >(g5_)));
4923 : }
4924 :
4925 : private:
4926 : // No implementation - assignment is unsupported.
4927 : void operator=(const CartesianProductHolder5& other);
4928 :
4929 : const Generator1 g1_;
4930 : const Generator2 g2_;
4931 : const Generator3 g3_;
4932 : const Generator4 g4_;
4933 : const Generator5 g5_;
4934 : }; // class CartesianProductHolder5
4935 :
4936 : template <class Generator1, class Generator2, class Generator3,
4937 : class Generator4, class Generator5, class Generator6>
4938 : class CartesianProductHolder6 {
4939 : public:
4940 : CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
4941 : const Generator3& g3, const Generator4& g4, const Generator5& g5,
4942 : const Generator6& g6)
4943 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4944 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
4945 : typename T6>
4946 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {
4947 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
4948 : new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4949 : static_cast<ParamGenerator<T1> >(g1_),
4950 : static_cast<ParamGenerator<T2> >(g2_),
4951 : static_cast<ParamGenerator<T3> >(g3_),
4952 : static_cast<ParamGenerator<T4> >(g4_),
4953 : static_cast<ParamGenerator<T5> >(g5_),
4954 : static_cast<ParamGenerator<T6> >(g6_)));
4955 : }
4956 :
4957 : private:
4958 : // No implementation - assignment is unsupported.
4959 : void operator=(const CartesianProductHolder6& other);
4960 :
4961 : const Generator1 g1_;
4962 : const Generator2 g2_;
4963 : const Generator3 g3_;
4964 : const Generator4 g4_;
4965 : const Generator5 g5_;
4966 : const Generator6 g6_;
4967 : }; // class CartesianProductHolder6
4968 :
4969 : template <class Generator1, class Generator2, class Generator3,
4970 : class Generator4, class Generator5, class Generator6, class Generator7>
4971 : class CartesianProductHolder7 {
4972 : public:
4973 : CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
4974 : const Generator3& g3, const Generator4& g4, const Generator5& g5,
4975 : const Generator6& g6, const Generator7& g7)
4976 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4977 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
4978 : typename T6, typename T7>
4979 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4980 : T7> >() const {
4981 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4982 : new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4983 : static_cast<ParamGenerator<T1> >(g1_),
4984 : static_cast<ParamGenerator<T2> >(g2_),
4985 : static_cast<ParamGenerator<T3> >(g3_),
4986 : static_cast<ParamGenerator<T4> >(g4_),
4987 : static_cast<ParamGenerator<T5> >(g5_),
4988 : static_cast<ParamGenerator<T6> >(g6_),
4989 : static_cast<ParamGenerator<T7> >(g7_)));
4990 : }
4991 :
4992 : private:
4993 : // No implementation - assignment is unsupported.
4994 : void operator=(const CartesianProductHolder7& other);
4995 :
4996 : const Generator1 g1_;
4997 : const Generator2 g2_;
4998 : const Generator3 g3_;
4999 : const Generator4 g4_;
5000 : const Generator5 g5_;
5001 : const Generator6 g6_;
5002 : const Generator7 g7_;
5003 : }; // class CartesianProductHolder7
5004 :
5005 : template <class Generator1, class Generator2, class Generator3,
5006 : class Generator4, class Generator5, class Generator6, class Generator7,
5007 : class Generator8>
5008 : class CartesianProductHolder8 {
5009 : public:
5010 : CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
5011 : const Generator3& g3, const Generator4& g4, const Generator5& g5,
5012 : const Generator6& g6, const Generator7& g7, const Generator8& g8)
5013 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5014 : g8_(g8) {}
5015 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
5016 : typename T6, typename T7, typename T8>
5017 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,
5018 : T8> >() const {
5019 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5020 : new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5021 : static_cast<ParamGenerator<T1> >(g1_),
5022 : static_cast<ParamGenerator<T2> >(g2_),
5023 : static_cast<ParamGenerator<T3> >(g3_),
5024 : static_cast<ParamGenerator<T4> >(g4_),
5025 : static_cast<ParamGenerator<T5> >(g5_),
5026 : static_cast<ParamGenerator<T6> >(g6_),
5027 : static_cast<ParamGenerator<T7> >(g7_),
5028 : static_cast<ParamGenerator<T8> >(g8_)));
5029 : }
5030 :
5031 : private:
5032 : // No implementation - assignment is unsupported.
5033 : void operator=(const CartesianProductHolder8& other);
5034 :
5035 : const Generator1 g1_;
5036 : const Generator2 g2_;
5037 : const Generator3 g3_;
5038 : const Generator4 g4_;
5039 : const Generator5 g5_;
5040 : const Generator6 g6_;
5041 : const Generator7 g7_;
5042 : const Generator8 g8_;
5043 : }; // class CartesianProductHolder8
5044 :
5045 : template <class Generator1, class Generator2, class Generator3,
5046 : class Generator4, class Generator5, class Generator6, class Generator7,
5047 : class Generator8, class Generator9>
5048 : class CartesianProductHolder9 {
5049 : public:
5050 : CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
5051 : const Generator3& g3, const Generator4& g4, const Generator5& g5,
5052 : const Generator6& g6, const Generator7& g7, const Generator8& g8,
5053 : const Generator9& g9)
5054 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5055 : g9_(g9) {}
5056 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
5057 : typename T6, typename T7, typename T8, typename T9>
5058 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5059 : T9> >() const {
5060 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5061 : T9> >(
5062 : new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5063 : static_cast<ParamGenerator<T1> >(g1_),
5064 : static_cast<ParamGenerator<T2> >(g2_),
5065 : static_cast<ParamGenerator<T3> >(g3_),
5066 : static_cast<ParamGenerator<T4> >(g4_),
5067 : static_cast<ParamGenerator<T5> >(g5_),
5068 : static_cast<ParamGenerator<T6> >(g6_),
5069 : static_cast<ParamGenerator<T7> >(g7_),
5070 : static_cast<ParamGenerator<T8> >(g8_),
5071 : static_cast<ParamGenerator<T9> >(g9_)));
5072 : }
5073 :
5074 : private:
5075 : // No implementation - assignment is unsupported.
5076 : void operator=(const CartesianProductHolder9& other);
5077 :
5078 : const Generator1 g1_;
5079 : const Generator2 g2_;
5080 : const Generator3 g3_;
5081 : const Generator4 g4_;
5082 : const Generator5 g5_;
5083 : const Generator6 g6_;
5084 : const Generator7 g7_;
5085 : const Generator8 g8_;
5086 : const Generator9 g9_;
5087 : }; // class CartesianProductHolder9
5088 :
5089 : template <class Generator1, class Generator2, class Generator3,
5090 : class Generator4, class Generator5, class Generator6, class Generator7,
5091 : class Generator8, class Generator9, class Generator10>
5092 : class CartesianProductHolder10 {
5093 : public:
5094 : CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
5095 : const Generator3& g3, const Generator4& g4, const Generator5& g5,
5096 : const Generator6& g6, const Generator7& g7, const Generator8& g8,
5097 : const Generator9& g9, const Generator10& g10)
5098 : : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5099 : g9_(g9), g10_(g10) {}
5100 : template <typename T1, typename T2, typename T3, typename T4, typename T5,
5101 : typename T6, typename T7, typename T8, typename T9, typename T10>
5102 : operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5103 : T9, T10> >() const {
5104 : return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5105 : T9, T10> >(
5106 : new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5107 : T10>(
5108 : static_cast<ParamGenerator<T1> >(g1_),
5109 : static_cast<ParamGenerator<T2> >(g2_),
5110 : static_cast<ParamGenerator<T3> >(g3_),
5111 : static_cast<ParamGenerator<T4> >(g4_),
5112 : static_cast<ParamGenerator<T5> >(g5_),
5113 : static_cast<ParamGenerator<T6> >(g6_),
5114 : static_cast<ParamGenerator<T7> >(g7_),
5115 : static_cast<ParamGenerator<T8> >(g8_),
5116 : static_cast<ParamGenerator<T9> >(g9_),
5117 : static_cast<ParamGenerator<T10> >(g10_)));
5118 : }
5119 :
5120 : private:
5121 : // No implementation - assignment is unsupported.
5122 : void operator=(const CartesianProductHolder10& other);
5123 :
5124 : const Generator1 g1_;
5125 : const Generator2 g2_;
5126 : const Generator3 g3_;
5127 : const Generator4 g4_;
5128 : const Generator5 g5_;
5129 : const Generator6 g6_;
5130 : const Generator7 g7_;
5131 : const Generator8 g8_;
5132 : const Generator9 g9_;
5133 : const Generator10 g10_;
5134 : }; // class CartesianProductHolder10
5135 :
5136 : # endif // GTEST_HAS_COMBINE
5137 :
5138 : } // namespace internal
5139 : } // namespace testing
5140 :
5141 : #endif // GTEST_HAS_PARAM_TEST
5142 :
5143 : #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
|