46 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
55 #if GTEST_HAS_PARAM_TEST
61 template <
typename ForwardIterator>
62 internal::ParamGenerator<
64 ValuesIn(ForwardIterator begin, ForwardIterator end);
66 template <
typename T,
size_t N>
67 internal::ParamGenerator<T> ValuesIn(
const T (&array)[
N]);
69 template <
class Container>
70 internal::ParamGenerator<typename Container::value_type> ValuesIn(
71 const Container& container);
76 template <
typename T1>
79 explicit ValueArray1(T1 v1) : v1_(v1) {}
82 operator ParamGenerator<T>()
const {
return ValuesIn(&v1_, &v1_ + 1); }
86 void operator=(
const ValueArray1& other);
91 template <
typename T1,
typename T2>
94 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
97 operator ParamGenerator<T>()
const {
98 const T array[] = {
static_cast<T>(v1_), static_cast<T>(v2_)};
99 return ValuesIn(array);
104 void operator=(
const ValueArray2& other);
110 template <
typename T1,
typename T2,
typename T3>
113 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
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);
124 void operator=(
const ValueArray3& other);
131 template <
typename T1,
typename T2,
typename T3,
typename T4>
134 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
137 template <
typename T>
138 operator ParamGenerator<T>()
const {
139 const T array[] = {
static_cast<T>(v1_), static_cast<T>(v2_),
140 static_cast<T>(v3_), static_cast<T>(v4_)};
141 return ValuesIn(array);
146 void operator=(
const ValueArray4& other);
154 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
157 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
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);
169 void operator=(
const ValueArray5& other);
178 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
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) {}
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);
195 void operator=(
const ValueArray6& other);
205 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
206 typename T6,
typename T7>
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) {}
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);
222 void operator=(
const ValueArray7& other);
233 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
234 typename T6,
typename T7,
typename T8>
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),
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);
251 void operator=(
const ValueArray8& other);
263 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
264 typename T6,
typename T7,
typename T8,
typename T9>
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),
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);
282 void operator=(
const ValueArray9& other);
295 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
296 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
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) {}
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);
314 void operator=(
const ValueArray10& other);
328 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
329 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
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) {}
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);
348 void operator=(
const ValueArray11& other);
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>
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) {}
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);
384 void operator=(
const ValueArray12& other);
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>
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) {}
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);
422 void operator=(
const ValueArray13& other);
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>
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) {}
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);
461 void operator=(
const ValueArray14& other);
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>
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) {}
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);
502 void operator=(
const ValueArray15& other);
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,
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),
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);
546 void operator=(
const ValueArray16& other);
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>
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) {}
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);
591 void operator=(
const ValueArray17& other);
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>
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) {}
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);
638 void operator=(
const ValueArray18& other);
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>
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) {}
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);
686 void operator=(
const ValueArray19& other);
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>
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) {}
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);
736 void operator=(
const ValueArray20& other);
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,
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) {}
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);
789 void operator=(
const ValueArray21& other);
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>
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) {}
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);
843 void operator=(
const ValueArray22& other);
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>
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),
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);
899 void operator=(
const ValueArray23& other);
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>
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) {}
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);
957 void operator=(
const ValueArray24& other);
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>
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) {}
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);
1016 void operator=(
const ValueArray25& other);
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,
1051 class ValueArray26 {
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) {}
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);
1077 void operator=(
const ValueArray26& other);
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 {
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) {}
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);
1141 void operator=(
const ValueArray27& other);
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 {
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) {}
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);
1206 void operator=(
const ValueArray28& other);
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 {
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) {}
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);
1272 void operator=(
const ValueArray29& other);
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 {
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) {}
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);
1341 void operator=(
const ValueArray30& other);
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,
1382 class ValueArray31 {
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) {}
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);
1412 void operator=(
const ValueArray31& other);
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 {
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) {}
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);
1484 void operator=(
const ValueArray32& other);
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 {
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),
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);
1559 void operator=(
const ValueArray33& other);
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 {
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) {}
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);
1635 void operator=(
const ValueArray34& other);
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 {
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) {}
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);
1712 void operator=(
const ValueArray35& other);
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,
1759 class ValueArray36 {
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) {}
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);
1792 void operator=(
const ValueArray36& other);
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 {
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) {}
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);
1874 void operator=(
const ValueArray37& other);
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 {
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) {}
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);
1957 void operator=(
const ValueArray38& other);
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 {
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) {}
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);
2042 void operator=(
const ValueArray39& other);
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 {
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),
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);
2129 void operator=(
const ValueArray40& other);
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,
2182 class ValueArray41 {
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) {}
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);
2218 void operator=(
const ValueArray41& other);
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 {
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) {}
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);
2309 void operator=(
const ValueArray42& other);
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 {
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) {}
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);
2401 void operator=(
const ValueArray43& other);
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 {
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) {}
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);
2495 void operator=(
const ValueArray44& other);
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 {
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) {}
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);
2591 void operator=(
const ValueArray45& other);
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,
2650 class ValueArray46 {
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) {}
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);
2689 void operator=(
const ValueArray46& other);
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 {
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),
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);
2789 void operator=(
const ValueArray47& other);
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 {
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) {}
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);
2891 void operator=(
const ValueArray48& other);
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 {
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) {}
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);
2994 void operator=(
const ValueArray49& other);
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 {
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) {}
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);
3098 void operator=(
const ValueArray50& other);
3152 # if GTEST_HAS_COMBINE
3158 template <
typename T1,
typename T2>
3159 class CartesianProductGenerator2
3160 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
3162 typedef ::std::tr1::tuple<T1, T2> ParamType;
3164 CartesianProductGenerator2(
const ParamGenerator<T1>& g1,
3165 const ParamGenerator<T2>& g2)
3166 : g1_(g1), g2_(g2) {}
3167 virtual ~CartesianProductGenerator2() {}
3169 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3170 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
3172 virtual ParamIteratorInterface<ParamType>* End()
const {
3173 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
3177 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
3185 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3186 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3187 ComputeCurrentValue();
3189 virtual ~Iterator() {}
3191 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3196 virtual void Advance() {
3199 if (current2_ == end2_) {
3200 current2_ = begin2_;
3203 ComputeCurrentValue();
3205 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3206 return new Iterator(*
this);
3208 virtual const ParamType* Current()
const {
return ¤t_value_; }
3209 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3213 <<
"The program attempted to compare iterators "
3214 <<
"from different generators." << std::endl;
3215 const Iterator* typed_other =
3216 CheckedDowncastToActualType<const Iterator>(&other);
3220 return (AtEnd() && typed_other->AtEnd()) ||
3222 current1_ == typed_other->current1_ &&
3223 current2_ == typed_other->current2_);
3227 Iterator(
const Iterator& other)
3228 : base_(other.base_),
3229 begin1_(other.begin1_),
3231 current1_(other.current1_),
3232 begin2_(other.begin2_),
3234 current2_(other.current2_) {
3235 ComputeCurrentValue();
3238 void ComputeCurrentValue() {
3240 current_value_ = ParamType(*current1_, *current2_);
3242 bool AtEnd()
const {
3246 current1_ == end1_ ||
3251 void operator=(
const Iterator& other);
3253 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
3266 void operator=(
const CartesianProductGenerator2& other);
3268 const ParamGenerator<T1> g1_;
3269 const ParamGenerator<T2> g2_;
3273 template <
typename T1,
typename T2,
typename T3>
3274 class CartesianProductGenerator3
3275 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
3277 typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
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() {}
3284 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3285 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3288 virtual ParamIteratorInterface<ParamType>* End()
const {
3289 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3293 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
3308 virtual ~Iterator() {}
3310 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3315 virtual void Advance() {
3318 if (current3_ == end3_) {
3319 current3_ = begin3_;
3322 if (current2_ == end2_) {
3323 current2_ = begin2_;
3326 ComputeCurrentValue();
3328 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3329 return new Iterator(*
this);
3331 virtual const ParamType* Current()
const {
return ¤t_value_; }
3332 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3336 <<
"The program attempted to compare iterators "
3337 <<
"from different generators." << std::endl;
3338 const Iterator* typed_other =
3339 CheckedDowncastToActualType<const Iterator>(&other);
3343 return (AtEnd() && typed_other->AtEnd()) ||
3345 current1_ == typed_other->current1_ &&
3346 current2_ == typed_other->current2_ &&
3347 current3_ == typed_other->current3_);
3351 Iterator(
const Iterator& other)
3352 : base_(other.base_),
3353 begin1_(other.begin1_),
3355 current1_(other.current1_),
3356 begin2_(other.begin2_),
3358 current2_(other.current2_),
3359 begin3_(other.begin3_),
3361 current3_(other.current3_) {
3362 ComputeCurrentValue();
3365 void ComputeCurrentValue() {
3367 current_value_ = ParamType(*current1_, *current2_, *current3_);
3369 bool AtEnd()
const {
3373 current1_ == end1_ ||
3374 current2_ == end2_ ||
3379 void operator=(
const Iterator& other);
3381 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
3397 void operator=(
const CartesianProductGenerator3& other);
3399 const ParamGenerator<T1> g1_;
3400 const ParamGenerator<T2> g2_;
3401 const ParamGenerator<T3> g3_;
3405 template <
typename T1,
typename T2,
typename T3,
typename T4>
3406 class CartesianProductGenerator4
3407 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3409 typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
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() {}
3417 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3418 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3419 g3_.begin(), g4_, g4_.begin());
3421 virtual ParamIteratorInterface<ParamType>* End()
const {
3422 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3427 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
3445 virtual ~Iterator() {}
3447 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3452 virtual void Advance() {
3455 if (current4_ == end4_) {
3456 current4_ = begin4_;
3459 if (current3_ == end3_) {
3460 current3_ = begin3_;
3463 if (current2_ == end2_) {
3464 current2_ = begin2_;
3467 ComputeCurrentValue();
3469 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3470 return new Iterator(*
this);
3472 virtual const ParamType* Current()
const {
return ¤t_value_; }
3473 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3477 <<
"The program attempted to compare iterators "
3478 <<
"from different generators." << std::endl;
3479 const Iterator* typed_other =
3480 CheckedDowncastToActualType<const Iterator>(&other);
3484 return (AtEnd() && typed_other->AtEnd()) ||
3486 current1_ == typed_other->current1_ &&
3487 current2_ == typed_other->current2_ &&
3488 current3_ == typed_other->current3_ &&
3489 current4_ == typed_other->current4_);
3493 Iterator(
const Iterator& other)
3494 : base_(other.base_),
3495 begin1_(other.begin1_),
3497 current1_(other.current1_),
3498 begin2_(other.begin2_),
3500 current2_(other.current2_),
3501 begin3_(other.begin3_),
3503 current3_(other.current3_),
3504 begin4_(other.begin4_),
3506 current4_(other.current4_) {
3507 ComputeCurrentValue();
3510 void ComputeCurrentValue() {
3512 current_value_ = ParamType(*current1_, *current2_, *current3_,
3515 bool AtEnd()
const {
3519 current1_ == end1_ ||
3520 current2_ == end2_ ||
3521 current3_ == end3_ ||
3526 void operator=(
const Iterator& other);
3528 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
3547 void operator=(
const CartesianProductGenerator4& other);
3549 const ParamGenerator<T1> g1_;
3550 const ParamGenerator<T2> g2_;
3551 const ParamGenerator<T3> g3_;
3552 const ParamGenerator<T4> g4_;
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> > {
3560 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
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() {}
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());
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());
3578 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
3599 virtual ~Iterator() {}
3601 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3606 virtual void Advance() {
3609 if (current5_ == end5_) {
3610 current5_ = begin5_;
3613 if (current4_ == end4_) {
3614 current4_ = begin4_;
3617 if (current3_ == end3_) {
3618 current3_ = begin3_;
3621 if (current2_ == end2_) {
3622 current2_ = begin2_;
3625 ComputeCurrentValue();
3627 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3628 return new Iterator(*
this);
3630 virtual const ParamType* Current()
const {
return ¤t_value_; }
3631 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3635 <<
"The program attempted to compare iterators "
3636 <<
"from different generators." << std::endl;
3637 const Iterator* typed_other =
3638 CheckedDowncastToActualType<const Iterator>(&other);
3642 return (AtEnd() && typed_other->AtEnd()) ||
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_);
3652 Iterator(
const Iterator& other)
3653 : base_(other.base_),
3654 begin1_(other.begin1_),
3656 current1_(other.current1_),
3657 begin2_(other.begin2_),
3659 current2_(other.current2_),
3660 begin3_(other.begin3_),
3662 current3_(other.current3_),
3663 begin4_(other.begin4_),
3665 current4_(other.current4_),
3666 begin5_(other.begin5_),
3668 current5_(other.current5_) {
3669 ComputeCurrentValue();
3672 void ComputeCurrentValue() {
3674 current_value_ = ParamType(*current1_, *current2_, *current3_,
3675 *current4_, *current5_);
3677 bool AtEnd()
const {
3681 current1_ == end1_ ||
3682 current2_ == end2_ ||
3683 current3_ == end3_ ||
3684 current4_ == end4_ ||
3689 void operator=(
const Iterator& other);
3691 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
3713 void operator=(
const CartesianProductGenerator5& other);
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_;
3723 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3725 class CartesianProductGenerator6
3726 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3729 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
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() {}
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());
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());
3748 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
3772 virtual ~Iterator() {}
3774 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3779 virtual void Advance() {
3782 if (current6_ == end6_) {
3783 current6_ = begin6_;
3786 if (current5_ == end5_) {
3787 current5_ = begin5_;
3790 if (current4_ == end4_) {
3791 current4_ = begin4_;
3794 if (current3_ == end3_) {
3795 current3_ = begin3_;
3798 if (current2_ == end2_) {
3799 current2_ = begin2_;
3802 ComputeCurrentValue();
3804 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3805 return new Iterator(*
this);
3807 virtual const ParamType* Current()
const {
return ¤t_value_; }
3808 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3812 <<
"The program attempted to compare iterators "
3813 <<
"from different generators." << std::endl;
3814 const Iterator* typed_other =
3815 CheckedDowncastToActualType<const Iterator>(&other);
3819 return (AtEnd() && typed_other->AtEnd()) ||
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_);
3830 Iterator(
const Iterator& other)
3831 : base_(other.base_),
3832 begin1_(other.begin1_),
3834 current1_(other.current1_),
3835 begin2_(other.begin2_),
3837 current2_(other.current2_),
3838 begin3_(other.begin3_),
3840 current3_(other.current3_),
3841 begin4_(other.begin4_),
3843 current4_(other.current4_),
3844 begin5_(other.begin5_),
3846 current5_(other.current5_),
3847 begin6_(other.begin6_),
3849 current6_(other.current6_) {
3850 ComputeCurrentValue();
3853 void ComputeCurrentValue() {
3855 current_value_ = ParamType(*current1_, *current2_, *current3_,
3856 *current4_, *current5_, *current6_);
3858 bool AtEnd()
const {
3862 current1_ == end1_ ||
3863 current2_ == end2_ ||
3864 current3_ == end3_ ||
3865 current4_ == end4_ ||
3866 current5_ == end5_ ||
3871 void operator=(
const Iterator& other);
3873 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
3898 void operator=(
const CartesianProductGenerator6& other);
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_;
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,
3915 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
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() {}
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_,
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());
3935 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
3962 virtual ~Iterator() {}
3964 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3969 virtual void Advance() {
3972 if (current7_ == end7_) {
3973 current7_ = begin7_;
3976 if (current6_ == end6_) {
3977 current6_ = begin6_;
3980 if (current5_ == end5_) {
3981 current5_ = begin5_;
3984 if (current4_ == end4_) {
3985 current4_ = begin4_;
3988 if (current3_ == end3_) {
3989 current3_ = begin3_;
3992 if (current2_ == end2_) {
3993 current2_ = begin2_;
3996 ComputeCurrentValue();
3998 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3999 return new Iterator(*
this);
4001 virtual const ParamType* Current()
const {
return ¤t_value_; }
4002 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4006 <<
"The program attempted to compare iterators "
4007 <<
"from different generators." << std::endl;
4008 const Iterator* typed_other =
4009 CheckedDowncastToActualType<const Iterator>(&other);
4013 return (AtEnd() && typed_other->AtEnd()) ||
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_);
4025 Iterator(
const Iterator& other)
4026 : base_(other.base_),
4027 begin1_(other.begin1_),
4029 current1_(other.current1_),
4030 begin2_(other.begin2_),
4032 current2_(other.current2_),
4033 begin3_(other.begin3_),
4035 current3_(other.current3_),
4036 begin4_(other.begin4_),
4038 current4_(other.current4_),
4039 begin5_(other.begin5_),
4041 current5_(other.current5_),
4042 begin6_(other.begin6_),
4044 current6_(other.current6_),
4045 begin7_(other.begin7_),
4047 current7_(other.current7_) {
4048 ComputeCurrentValue();
4051 void ComputeCurrentValue() {
4053 current_value_ = ParamType(*current1_, *current2_, *current3_,
4054 *current4_, *current5_, *current6_, *current7_);
4056 bool AtEnd()
const {
4060 current1_ == end1_ ||
4061 current2_ == end2_ ||
4062 current3_ == end3_ ||
4063 current4_ == end4_ ||
4064 current5_ == end5_ ||
4065 current6_ == end6_ ||
4070 void operator=(
const Iterator& other);
4072 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
4100 void operator=(
const CartesianProductGenerator7& other);
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_;
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,
4118 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
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),
4127 virtual ~CartesianProductGenerator8() {}
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());
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_,
4141 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
4171 virtual ~Iterator() {}
4173 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4178 virtual void Advance() {
4181 if (current8_ == end8_) {
4182 current8_ = begin8_;
4185 if (current7_ == end7_) {
4186 current7_ = begin7_;
4189 if (current6_ == end6_) {
4190 current6_ = begin6_;
4193 if (current5_ == end5_) {
4194 current5_ = begin5_;
4197 if (current4_ == end4_) {
4198 current4_ = begin4_;
4201 if (current3_ == end3_) {
4202 current3_ = begin3_;
4205 if (current2_ == end2_) {
4206 current2_ = begin2_;
4209 ComputeCurrentValue();
4211 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4212 return new Iterator(*
this);
4214 virtual const ParamType* Current()
const {
return ¤t_value_; }
4215 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4219 <<
"The program attempted to compare iterators "
4220 <<
"from different generators." << std::endl;
4221 const Iterator* typed_other =
4222 CheckedDowncastToActualType<const Iterator>(&other);
4226 return (AtEnd() && typed_other->AtEnd()) ||
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_);
4239 Iterator(
const Iterator& other)
4240 : base_(other.base_),
4241 begin1_(other.begin1_),
4243 current1_(other.current1_),
4244 begin2_(other.begin2_),
4246 current2_(other.current2_),
4247 begin3_(other.begin3_),
4249 current3_(other.current3_),
4250 begin4_(other.begin4_),
4252 current4_(other.current4_),
4253 begin5_(other.begin5_),
4255 current5_(other.current5_),
4256 begin6_(other.begin6_),
4258 current6_(other.current6_),
4259 begin7_(other.begin7_),
4261 current7_(other.current7_),
4262 begin8_(other.begin8_),
4264 current8_(other.current8_) {
4265 ComputeCurrentValue();
4268 void ComputeCurrentValue() {
4270 current_value_ = ParamType(*current1_, *current2_, *current3_,
4271 *current4_, *current5_, *current6_, *current7_, *current8_);
4273 bool AtEnd()
const {
4277 current1_ == end1_ ||
4278 current2_ == end2_ ||
4279 current3_ == end3_ ||
4280 current4_ == end4_ ||
4281 current5_ == end5_ ||
4282 current6_ == end6_ ||
4283 current7_ == end7_ ||
4288 void operator=(
const Iterator& other);
4290 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
4321 void operator=(
const CartesianProductGenerator8& other);
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_;
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,
4340 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
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),
4349 virtual ~CartesianProductGenerator9() {}
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());
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());
4363 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
4396 virtual ~Iterator() {}
4398 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4403 virtual void Advance() {
4406 if (current9_ == end9_) {
4407 current9_ = begin9_;
4410 if (current8_ == end8_) {
4411 current8_ = begin8_;
4414 if (current7_ == end7_) {
4415 current7_ = begin7_;
4418 if (current6_ == end6_) {
4419 current6_ = begin6_;
4422 if (current5_ == end5_) {
4423 current5_ = begin5_;
4426 if (current4_ == end4_) {
4427 current4_ = begin4_;
4430 if (current3_ == end3_) {
4431 current3_ = begin3_;
4434 if (current2_ == end2_) {
4435 current2_ = begin2_;
4438 ComputeCurrentValue();
4440 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4441 return new Iterator(*
this);
4443 virtual const ParamType* Current()
const {
return ¤t_value_; }
4444 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4448 <<
"The program attempted to compare iterators "
4449 <<
"from different generators." << std::endl;
4450 const Iterator* typed_other =
4451 CheckedDowncastToActualType<const Iterator>(&other);
4455 return (AtEnd() && typed_other->AtEnd()) ||
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_);
4469 Iterator(
const Iterator& other)
4470 : base_(other.base_),
4471 begin1_(other.begin1_),
4473 current1_(other.current1_),
4474 begin2_(other.begin2_),
4476 current2_(other.current2_),
4477 begin3_(other.begin3_),
4479 current3_(other.current3_),
4480 begin4_(other.begin4_),
4482 current4_(other.current4_),
4483 begin5_(other.begin5_),
4485 current5_(other.current5_),
4486 begin6_(other.begin6_),
4488 current6_(other.current6_),
4489 begin7_(other.begin7_),
4491 current7_(other.current7_),
4492 begin8_(other.begin8_),
4494 current8_(other.current8_),
4495 begin9_(other.begin9_),
4497 current9_(other.current9_) {
4498 ComputeCurrentValue();
4501 void ComputeCurrentValue() {
4503 current_value_ = ParamType(*current1_, *current2_, *current3_,
4504 *current4_, *current5_, *current6_, *current7_, *current8_,
4507 bool AtEnd()
const {
4511 current1_ == end1_ ||
4512 current2_ == end2_ ||
4513 current3_ == end3_ ||
4514 current4_ == end4_ ||
4515 current5_ == end5_ ||
4516 current6_ == end6_ ||
4517 current7_ == end7_ ||
4518 current8_ == end8_ ||
4523 void operator=(
const Iterator& other);
4525 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
4559 void operator=(
const CartesianProductGenerator9& other);
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_;
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> > {
4579 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
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() {}
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());
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());
4603 class Iterator :
public ParamIteratorInterface<ParamType> {
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)
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();
4639 virtual ~Iterator() {}
4641 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4646 virtual void Advance() {
4649 if (current10_ == end10_) {
4650 current10_ = begin10_;
4653 if (current9_ == end9_) {
4654 current9_ = begin9_;
4657 if (current8_ == end8_) {
4658 current8_ = begin8_;
4661 if (current7_ == end7_) {
4662 current7_ = begin7_;
4665 if (current6_ == end6_) {
4666 current6_ = begin6_;
4669 if (current5_ == end5_) {
4670 current5_ = begin5_;
4673 if (current4_ == end4_) {
4674 current4_ = begin4_;
4677 if (current3_ == end3_) {
4678 current3_ = begin3_;
4681 if (current2_ == end2_) {
4682 current2_ = begin2_;
4685 ComputeCurrentValue();
4687 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4688 return new Iterator(*
this);
4690 virtual const ParamType* Current()
const {
return ¤t_value_; }
4691 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4695 <<
"The program attempted to compare iterators "
4696 <<
"from different generators." << std::endl;
4697 const Iterator* typed_other =
4698 CheckedDowncastToActualType<const Iterator>(&other);
4702 return (AtEnd() && typed_other->AtEnd()) ||
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_);
4717 Iterator(
const Iterator& other)
4718 : base_(other.base_),
4719 begin1_(other.begin1_),
4721 current1_(other.current1_),
4722 begin2_(other.begin2_),
4724 current2_(other.current2_),
4725 begin3_(other.begin3_),
4727 current3_(other.current3_),
4728 begin4_(other.begin4_),
4730 current4_(other.current4_),
4731 begin5_(other.begin5_),
4733 current5_(other.current5_),
4734 begin6_(other.begin6_),
4736 current6_(other.current6_),
4737 begin7_(other.begin7_),
4739 current7_(other.current7_),
4740 begin8_(other.begin8_),
4742 current8_(other.current8_),
4743 begin9_(other.begin9_),
4745 current9_(other.current9_),
4746 begin10_(other.begin10_),
4747 end10_(other.end10_),
4748 current10_(other.current10_) {
4749 ComputeCurrentValue();
4752 void ComputeCurrentValue() {
4754 current_value_ = ParamType(*current1_, *current2_, *current3_,
4755 *current4_, *current5_, *current6_, *current7_, *current8_,
4756 *current9_, *current10_);
4758 bool AtEnd()
const {
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_;
4775 void operator=(
const Iterator& other);
4777 const ParamGeneratorInterface<ParamType>*
const base_;
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_;
4814 void operator=(
const CartesianProductGenerator10& other);
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_;
4835 template <
class Generator1,
class Generator2>
4836 class CartesianProductHolder2 {
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_)));
4850 void operator=(
const CartesianProductHolder2& other);
4852 const Generator1 g1_;
4853 const Generator2 g2_;
4856 template <
class Generator1,
class Generator2,
class Generator3>
4857 class CartesianProductHolder3 {
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_)));
4873 void operator=(
const CartesianProductHolder3& other);
4875 const Generator1 g1_;
4876 const Generator2 g2_;
4877 const Generator3 g3_;
4880 template <
class Generator1,
class Generator2,
class Generator3,
4882 class CartesianProductHolder4 {
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_)));
4899 void operator=(
const CartesianProductHolder4& other);
4901 const Generator1 g1_;
4902 const Generator2 g2_;
4903 const Generator3 g3_;
4904 const Generator4 g4_;
4907 template <
class Generator1,
class Generator2,
class Generator3,
4908 class Generator4,
class Generator5>
4909 class CartesianProductHolder5 {
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_)));
4927 void operator=(
const CartesianProductHolder5& other);
4929 const Generator1 g1_;
4930 const Generator2 g2_;
4931 const Generator3 g3_;
4932 const Generator4 g4_;
4933 const Generator5 g5_;
4936 template <
class Generator1,
class Generator2,
class Generator3,
4937 class Generator4,
class Generator5,
class Generator6>
4938 class CartesianProductHolder6 {
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,
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_)));
4959 void operator=(
const CartesianProductHolder6& other);
4961 const Generator1 g1_;
4962 const Generator2 g2_;
4963 const Generator3 g3_;
4964 const Generator4 g4_;
4965 const Generator5 g5_;
4966 const Generator6 g6_;
4969 template <
class Generator1,
class Generator2,
class Generator3,
4970 class Generator4,
class Generator5,
class Generator6,
class Generator7>
4971 class CartesianProductHolder7 {
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>
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_)));
4994 void operator=(
const CartesianProductHolder7& other);
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_;
5005 template <
class Generator1,
class Generator2,
class Generator3,
5006 class Generator4,
class Generator5,
class Generator6,
class Generator7,
5008 class CartesianProductHolder8 {
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),
5015 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5016 typename T6,
typename T7,
typename T8>
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_)));
5033 void operator=(
const CartesianProductHolder8& other);
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_;
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 {
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),
5056 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5057 typename T6,
typename T7,
typename T8,
typename 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_)));
5076 void operator=(
const CartesianProductHolder9& other);
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_;
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 {
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>
5103 T9, T10> >()
const {
5106 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
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_)));
5122 void operator=(
const CartesianProductHolder10& other);
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_;
5136 # endif // GTEST_HAS_COMBINE
5141 #endif // GTEST_HAS_PARAM_TEST
5143 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
Definition: gtest-death-test.h:43
const T1 &f1 return GTEST_2_TUPLE_() T(f0, f1)
#define GTEST_CHECK_(condition)
Definition: gtest-port.h:1060
const double N
Definition: navstokes_cosines.cc:94
MUP_BASETYPE value_type
The numeric datatype used by the parser.
Definition: muParserDef.h:222
Definition: gtest-tuple.h:111