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<
63 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
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 {
83 const T array[] = {
static_cast<T
>(v1_)};
84 return ValuesIn(array);
89 void operator=(
const ValueArray1& other);
94 template <
typename T1,
typename T2>
97 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
100 operator ParamGenerator<T>()
const {
101 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_)};
102 return ValuesIn(array);
107 void operator=(
const ValueArray2& other);
113 template <
typename T1,
typename T2,
typename T3>
116 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
118 template <
typename T>
119 operator ParamGenerator<T>()
const {
120 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
121 static_cast<T
>(v3_)};
122 return ValuesIn(array);
127 void operator=(
const ValueArray3& other);
134 template <
typename T1,
typename T2,
typename T3,
typename T4>
137 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
140 template <
typename T>
141 operator ParamGenerator<T>()
const {
142 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
143 static_cast<T
>(v3_), static_cast<T>(v4_)};
144 return ValuesIn(array);
149 void operator=(
const ValueArray4& other);
157 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
160 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
163 template <
typename T>
164 operator ParamGenerator<T>()
const {
165 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
166 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_)};
167 return ValuesIn(array);
172 void operator=(
const ValueArray5& other);
181 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
185 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
186 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
188 template <
typename T>
189 operator ParamGenerator<T>()
const {
190 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
191 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
192 static_cast<T>(v6_)};
193 return ValuesIn(array);
198 void operator=(
const ValueArray6& other);
208 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
209 typename T6,
typename T7>
212 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
213 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
215 template <
typename T>
216 operator ParamGenerator<T>()
const {
217 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
218 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
219 static_cast<T>(v6_),
static_cast<T
>(v7_)};
220 return ValuesIn(array);
225 void operator=(
const ValueArray7& other);
236 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
237 typename T6,
typename T7,
typename T8>
240 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
241 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
244 template <
typename T>
245 operator ParamGenerator<T>()
const {
246 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
247 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
248 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_)};
249 return ValuesIn(array);
254 void operator=(
const ValueArray8& other);
266 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
267 typename T6,
typename T7,
typename T8,
typename T9>
270 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
271 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
274 template <
typename T>
275 operator ParamGenerator<T>()
const {
276 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
277 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
278 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
279 static_cast<T
>(v9_)};
280 return ValuesIn(array);
285 void operator=(
const ValueArray9& other);
298 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
299 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
302 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
303 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
304 v8_(v8), v9_(v9), v10_(v10) {}
306 template <
typename T>
307 operator ParamGenerator<T>()
const {
308 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
309 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
310 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
311 static_cast<T
>(v9_), static_cast<T>(v10_)};
312 return ValuesIn(array);
317 void operator=(
const ValueArray10& other);
331 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
332 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
336 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
337 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
338 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
340 template <
typename T>
341 operator ParamGenerator<T>()
const {
342 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
343 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
344 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
345 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_)};
346 return ValuesIn(array);
351 void operator=(
const ValueArray11& other);
366 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
367 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
368 typename T11,
typename T12>
371 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
372 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
373 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
375 template <
typename T>
376 operator ParamGenerator<T>()
const {
377 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
378 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
379 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
380 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
381 static_cast<T>(v12_)};
382 return ValuesIn(array);
387 void operator=(
const ValueArray12& other);
403 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
404 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
405 typename T11,
typename T12,
typename T13>
408 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
409 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
410 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
411 v12_(v12), v13_(v13) {}
413 template <
typename T>
414 operator ParamGenerator<T>()
const {
415 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
416 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
417 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
418 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
419 static_cast<T>(v12_),
static_cast<T
>(v13_)};
420 return ValuesIn(array);
425 void operator=(
const ValueArray13& other);
442 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
443 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
444 typename T11,
typename T12,
typename T13,
typename T14>
447 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
448 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
449 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
450 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
452 template <
typename T>
453 operator ParamGenerator<T>()
const {
454 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
455 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
456 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
457 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
458 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_)};
459 return ValuesIn(array);
464 void operator=(
const ValueArray14& other);
482 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
483 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
484 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
487 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
488 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
489 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
490 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
492 template <
typename T>
493 operator ParamGenerator<T>()
const {
494 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
495 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
496 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
497 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
498 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
499 static_cast<T
>(v15_)};
500 return ValuesIn(array);
505 void operator=(
const ValueArray15& other);
524 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
525 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
526 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
530 ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
531 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
532 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
533 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
536 template <
typename T>
537 operator ParamGenerator<T>()
const {
538 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
539 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
540 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
541 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
542 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
543 static_cast<T
>(v15_), static_cast<T>(v16_)};
544 return ValuesIn(array);
549 void operator=(
const ValueArray16& other);
569 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
570 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
571 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
572 typename T16,
typename T17>
575 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
576 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
577 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
578 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
579 v15_(v15), v16_(v16), v17_(v17) {}
581 template <
typename T>
582 operator ParamGenerator<T>()
const {
583 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
584 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
585 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
586 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
587 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
588 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_)};
589 return ValuesIn(array);
594 void operator=(
const ValueArray17& other);
615 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
616 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
617 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
618 typename T16,
typename T17,
typename T18>
621 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
622 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
623 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
624 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
625 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
627 template <
typename T>
628 operator ParamGenerator<T>()
const {
629 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
630 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
631 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
632 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
633 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
634 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
635 static_cast<T>(v18_)};
636 return ValuesIn(array);
641 void operator=(
const ValueArray18& other);
663 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
664 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
665 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
666 typename T16,
typename T17,
typename T18,
typename T19>
669 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
670 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
671 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
672 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
673 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
675 template <
typename T>
676 operator ParamGenerator<T>()
const {
677 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
678 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
679 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
680 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
681 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
682 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
683 static_cast<T>(v18_),
static_cast<T
>(v19_)};
684 return ValuesIn(array);
689 void operator=(
const ValueArray19& other);
712 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
713 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
714 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
715 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
718 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
719 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
720 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
721 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
722 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
723 v19_(v19), v20_(v20) {}
725 template <
typename T>
726 operator ParamGenerator<T>()
const {
727 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
728 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
729 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
730 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
731 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
732 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
733 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_)};
734 return ValuesIn(array);
739 void operator=(
const ValueArray20& other);
763 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
764 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
765 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
766 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
770 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
771 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
772 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
773 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
774 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
775 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
777 template <
typename T>
778 operator ParamGenerator<T>()
const {
779 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
780 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
781 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
782 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
783 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
784 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
785 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
786 static_cast<T
>(v21_)};
787 return ValuesIn(array);
792 void operator=(
const ValueArray21& other);
817 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
818 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
819 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
820 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
821 typename T21,
typename T22>
824 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
825 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
826 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
827 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
828 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
829 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
831 template <
typename T>
832 operator ParamGenerator<T>()
const {
833 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
834 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
835 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
836 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
837 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
838 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
839 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
840 static_cast<T
>(v21_), static_cast<T>(v22_)};
841 return ValuesIn(array);
846 void operator=(
const ValueArray22& other);
872 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
873 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
874 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
875 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
876 typename T21,
typename T22,
typename T23>
879 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
880 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
881 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
882 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
883 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
884 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
887 template <
typename T>
888 operator ParamGenerator<T>()
const {
889 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
890 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
891 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
892 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
893 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
894 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
895 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
896 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_)};
897 return ValuesIn(array);
902 void operator=(
const ValueArray23& other);
929 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
930 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
931 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
932 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
933 typename T21,
typename T22,
typename T23,
typename T24>
936 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
937 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
938 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
939 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
940 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
941 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
942 v22_(v22), v23_(v23), v24_(v24) {}
944 template <
typename T>
945 operator ParamGenerator<T>()
const {
946 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
947 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
948 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
949 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
950 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
951 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
952 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
953 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
954 static_cast<T>(v24_)};
955 return ValuesIn(array);
960 void operator=(
const ValueArray24& other);
988 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
989 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
990 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
991 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
992 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
995 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
996 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
997 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
998 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
999 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1000 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1001 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
1003 template <
typename T>
1004 operator ParamGenerator<T>()
const {
1005 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1006 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1007 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1008 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1009 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1010 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1011 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1012 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1013 static_cast<T>(v24_),
static_cast<T
>(v25_)};
1014 return ValuesIn(array);
1019 void operator=(
const ValueArray25& other);
1048 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1049 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1050 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1051 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1052 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1054 class ValueArray26 {
1056 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1057 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1058 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1059 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1060 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1061 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1062 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
1064 template <
typename T>
1065 operator ParamGenerator<T>()
const {
1066 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1067 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1068 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1069 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1070 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1071 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1072 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1073 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1074 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_)};
1075 return ValuesIn(array);
1080 void operator=(
const ValueArray26& other);
1110 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1111 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1112 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1113 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1114 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1115 typename T26,
typename T27>
1116 class ValueArray27 {
1118 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1119 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1120 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1121 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1122 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1123 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1124 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1125 v26_(v26), v27_(v27) {}
1127 template <
typename T>
1128 operator ParamGenerator<T>()
const {
1129 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1130 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1131 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1132 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1133 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1134 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1135 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1136 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1137 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1138 static_cast<T
>(v27_)};
1139 return ValuesIn(array);
1144 void operator=(
const ValueArray27& other);
1175 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1176 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1177 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1178 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1179 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1180 typename T26,
typename T27,
typename T28>
1181 class ValueArray28 {
1183 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1184 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1185 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1186 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1187 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1188 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1189 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1190 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1192 template <
typename T>
1193 operator ParamGenerator<T>()
const {
1194 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1195 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1196 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1197 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1198 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1199 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1200 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1201 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1202 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1203 static_cast<T
>(v27_), static_cast<T>(v28_)};
1204 return ValuesIn(array);
1209 void operator=(
const ValueArray28& other);
1241 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1242 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1243 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1244 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1245 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1246 typename T26,
typename T27,
typename T28,
typename T29>
1247 class ValueArray29 {
1249 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1250 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1251 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1252 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1253 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1254 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1255 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1256 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1258 template <
typename T>
1259 operator ParamGenerator<T>()
const {
1260 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1261 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1262 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1263 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1264 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1265 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1266 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1267 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1268 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1269 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_)};
1270 return ValuesIn(array);
1275 void operator=(
const ValueArray29& other);
1308 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1309 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1310 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1311 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1312 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1313 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
1314 class ValueArray30 {
1316 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1317 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1318 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1319 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1320 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1321 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1322 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1323 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1324 v29_(v29), v30_(v30) {}
1326 template <
typename T>
1327 operator ParamGenerator<T>()
const {
1328 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1329 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1330 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1331 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1332 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1333 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1334 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1335 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1336 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1337 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1338 static_cast<T>(v30_)};
1339 return ValuesIn(array);
1344 void operator=(
const ValueArray30& other);
1378 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1379 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1380 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1381 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1382 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1383 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1385 class ValueArray31 {
1387 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1388 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1389 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1390 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1391 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1392 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1393 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1394 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1395 v29_(v29), v30_(v30), v31_(v31) {}
1397 template <
typename T>
1398 operator ParamGenerator<T>()
const {
1399 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1400 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1401 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1402 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1403 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1404 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1405 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1406 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1407 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1408 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1409 static_cast<T>(v30_),
static_cast<T
>(v31_)};
1410 return ValuesIn(array);
1415 void operator=(
const ValueArray31& other);
1450 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1451 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1452 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1453 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1454 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1455 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1456 typename T31,
typename T32>
1457 class ValueArray32 {
1459 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1460 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1461 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1462 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1463 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1464 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1465 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1466 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1467 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1469 template <
typename T>
1470 operator ParamGenerator<T>()
const {
1471 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1472 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1473 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1474 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1475 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1476 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1477 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1478 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1479 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1480 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1481 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_)};
1482 return ValuesIn(array);
1487 void operator=(
const ValueArray32& other);
1523 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1524 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1525 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1526 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1527 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1528 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1529 typename T31,
typename T32,
typename T33>
1530 class ValueArray33 {
1532 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1533 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1534 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1535 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1536 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1537 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1538 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1539 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1540 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1543 template <
typename T>
1544 operator ParamGenerator<T>()
const {
1545 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1546 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1547 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1548 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1549 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1550 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1551 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1552 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1553 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1554 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1555 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1556 static_cast<T
>(v33_)};
1557 return ValuesIn(array);
1562 void operator=(
const ValueArray33& other);
1599 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1600 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1601 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1602 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1603 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1604 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1605 typename T31,
typename T32,
typename T33,
typename T34>
1606 class ValueArray34 {
1608 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1609 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1610 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1611 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1612 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1613 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1614 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1615 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1616 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1617 v33_(v33), v34_(v34) {}
1619 template <
typename T>
1620 operator ParamGenerator<T>()
const {
1621 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1622 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1623 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1624 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1625 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1626 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1627 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1628 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1629 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1630 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1631 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1632 static_cast<T
>(v33_), static_cast<T>(v34_)};
1633 return ValuesIn(array);
1638 void operator=(
const ValueArray34& other);
1676 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1677 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1678 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1679 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1680 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1681 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1682 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
1683 class ValueArray35 {
1685 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1686 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1687 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1688 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1689 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1690 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1691 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1692 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1693 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1694 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1696 template <
typename T>
1697 operator ParamGenerator<T>()
const {
1698 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1699 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1700 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1701 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1702 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1703 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1704 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1705 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1706 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1707 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1708 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1709 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_)};
1710 return ValuesIn(array);
1715 void operator=(
const ValueArray35& other);
1754 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1755 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1756 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1757 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1758 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1759 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1760 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1762 class ValueArray36 {
1764 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1765 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1766 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1767 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1768 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1769 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1770 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1771 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1772 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1773 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1775 template <
typename T>
1776 operator ParamGenerator<T>()
const {
1777 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1778 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1779 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1780 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1781 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1782 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1783 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1784 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1785 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1786 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1787 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1788 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
1789 static_cast<T>(v36_)};
1790 return ValuesIn(array);
1795 void operator=(
const ValueArray36& other);
1835 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1836 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1837 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1838 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1839 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1840 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1841 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1842 typename T36,
typename T37>
1843 class ValueArray37 {
1845 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1846 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1847 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1848 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1849 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1850 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1851 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1852 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1853 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1854 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1855 v36_(v36), v37_(v37) {}
1857 template <
typename T>
1858 operator ParamGenerator<T>()
const {
1859 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1860 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1861 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1862 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1863 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1864 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1865 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1866 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1867 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1868 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1869 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1870 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
1871 static_cast<T>(v36_),
static_cast<T
>(v37_)};
1872 return ValuesIn(array);
1877 void operator=(
const ValueArray37& other);
1918 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1919 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1920 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1921 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1922 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1923 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1924 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1925 typename T36,
typename T37,
typename T38>
1926 class ValueArray38 {
1928 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1929 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1930 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1931 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1932 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1933 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1934 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1935 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1936 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1937 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1938 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1940 template <
typename T>
1941 operator ParamGenerator<T>()
const {
1942 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
1943 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
1944 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
1945 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
1946 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
1947 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
1948 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
1949 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
1950 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
1951 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
1952 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
1953 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
1954 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_)};
1955 return ValuesIn(array);
1960 void operator=(
const ValueArray38& other);
2002 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2003 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2004 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2005 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2006 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2007 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2008 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2009 typename T36,
typename T37,
typename T38,
typename T39>
2010 class ValueArray39 {
2012 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2013 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2014 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2015 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2016 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
2017 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2018 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2019 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2020 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2021 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2022 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
2024 template <
typename T>
2025 operator ParamGenerator<T>()
const {
2026 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2027 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2028 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2029 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2030 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2031 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2032 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2033 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2034 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2035 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2036 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2037 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2038 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2039 static_cast<T
>(v39_)};
2040 return ValuesIn(array);
2045 void operator=(
const ValueArray39& other);
2088 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2089 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2090 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2091 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2092 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2093 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2094 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2095 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
2096 class ValueArray40 {
2098 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2099 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2100 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2101 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2102 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
2103 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2104 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2105 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2106 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2107 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2108 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2111 template <
typename T>
2112 operator ParamGenerator<T>()
const {
2113 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2114 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2115 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2116 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2117 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2118 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2119 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2120 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2121 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2122 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2123 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2124 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2125 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2126 static_cast<T
>(v39_), static_cast<T>(v40_)};
2127 return ValuesIn(array);
2132 void operator=(
const ValueArray40& other);
2176 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2177 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2178 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2179 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2180 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2181 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2182 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2183 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2185 class ValueArray41 {
2187 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2188 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2189 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2190 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2191 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
2192 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2193 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2194 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2195 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2196 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2197 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2198 v39_(v39), v40_(v40), v41_(v41) {}
2200 template <
typename T>
2201 operator ParamGenerator<T>()
const {
2202 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2203 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2204 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2205 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2206 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2207 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2208 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2209 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2210 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2211 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2212 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2213 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2214 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2215 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_)};
2216 return ValuesIn(array);
2221 void operator=(
const ValueArray41& other);
2266 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2267 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2268 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2269 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2270 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2271 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2272 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2273 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2274 typename T41,
typename T42>
2275 class ValueArray42 {
2277 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2278 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2279 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2280 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2281 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2282 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2283 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2284 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2285 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2286 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2287 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2288 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2290 template <
typename T>
2291 operator ParamGenerator<T>()
const {
2292 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2293 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2294 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2295 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2296 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2297 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2298 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2299 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2300 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2301 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2302 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2303 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2304 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2305 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2306 static_cast<T>(v42_)};
2307 return ValuesIn(array);
2312 void operator=(
const ValueArray42& other);
2358 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2359 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2360 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2361 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2362 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2363 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2364 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2365 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2366 typename T41,
typename T42,
typename T43>
2367 class ValueArray43 {
2369 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2370 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2371 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2372 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2373 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2374 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2375 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2376 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2377 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2378 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2379 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2380 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2382 template <
typename T>
2383 operator ParamGenerator<T>()
const {
2384 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2385 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2386 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2387 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2388 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2389 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2390 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2391 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2392 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2393 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2394 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2395 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2396 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2397 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2398 static_cast<T>(v42_),
static_cast<T
>(v43_)};
2399 return ValuesIn(array);
2404 void operator=(
const ValueArray43& other);
2451 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2452 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2453 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2454 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2455 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2456 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2457 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2458 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2459 typename T41,
typename T42,
typename T43,
typename T44>
2460 class ValueArray44 {
2462 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2463 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2464 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2465 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2466 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2467 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2468 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2469 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2470 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2471 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2472 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2473 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2474 v43_(v43), v44_(v44) {}
2476 template <
typename T>
2477 operator ParamGenerator<T>()
const {
2478 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2479 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2480 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2481 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2482 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2483 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2484 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2485 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2486 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2487 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2488 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2489 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2490 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2491 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2492 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_)};
2493 return ValuesIn(array);
2498 void operator=(
const ValueArray44& other);
2546 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2547 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2548 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2549 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2550 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2551 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2552 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2553 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2554 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
2555 class ValueArray45 {
2557 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2558 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2559 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2560 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2561 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2562 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2563 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2564 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2565 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2566 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2567 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2568 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2569 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2571 template <
typename T>
2572 operator ParamGenerator<T>()
const {
2573 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2574 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2575 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2576 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2577 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2578 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2579 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2580 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2581 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2582 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2583 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2584 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2585 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2586 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2587 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
2588 static_cast<T
>(v45_)};
2589 return ValuesIn(array);
2594 void operator=(
const ValueArray45& other);
2643 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2644 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2645 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2646 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2647 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2648 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2649 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2650 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2651 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2653 class ValueArray46 {
2655 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2656 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2657 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2658 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2659 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2660 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2661 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2662 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2663 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2664 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2665 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2666 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2667 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2669 template <
typename T>
2670 operator ParamGenerator<T>()
const {
2671 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2672 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2673 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2674 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2675 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2676 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2677 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2678 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2679 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2680 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2681 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2682 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2683 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2684 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2685 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
2686 static_cast<T
>(v45_), static_cast<T>(v46_)};
2687 return ValuesIn(array);
2692 void operator=(
const ValueArray46& other);
2742 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2743 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2744 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2745 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2746 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2747 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2748 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2749 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2750 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2751 typename T46,
typename T47>
2752 class ValueArray47 {
2754 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2755 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2756 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2757 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2758 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2759 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2760 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2761 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2762 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2763 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2764 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2765 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2766 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2769 template <
typename T>
2770 operator ParamGenerator<T>()
const {
2771 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2772 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2773 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2774 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2775 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2776 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2777 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2778 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2779 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2780 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2781 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2782 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2783 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2784 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2785 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
2786 static_cast<T
>(v45_), static_cast<T>(v46_),
static_cast<T
>(v47_)};
2787 return ValuesIn(array);
2792 void operator=(
const ValueArray47& other);
2843 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2844 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2845 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2846 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2847 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2848 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2849 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2850 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2851 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2852 typename T46,
typename T47,
typename T48>
2853 class ValueArray48 {
2855 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2856 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2857 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2858 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2859 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2860 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2861 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2862 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2863 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2864 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2865 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2866 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2867 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2868 v46_(v46), v47_(v47), v48_(v48) {}
2870 template <
typename T>
2871 operator ParamGenerator<T>()
const {
2872 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2873 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2874 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2875 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2876 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2877 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2878 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2879 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2880 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2881 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2882 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2883 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2884 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2885 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2886 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
2887 static_cast<T
>(v45_), static_cast<T>(v46_),
static_cast<T
>(v47_),
2888 static_cast<T>(v48_)};
2889 return ValuesIn(array);
2894 void operator=(
const ValueArray48& other);
2946 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2947 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2948 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2949 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2950 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2951 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2952 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2953 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2954 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2955 typename T46,
typename T47,
typename T48,
typename T49>
2956 class ValueArray49 {
2958 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2959 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2960 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2961 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2962 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2963 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2964 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2965 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2966 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2967 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2968 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2969 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2970 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2971 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2973 template <
typename T>
2974 operator ParamGenerator<T>()
const {
2975 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
2976 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
2977 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
2978 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
2979 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
2980 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
2981 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
2982 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
2983 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
2984 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
2985 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
2986 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
2987 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
2988 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
2989 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
2990 static_cast<T
>(v45_), static_cast<T>(v46_),
static_cast<T
>(v47_),
2991 static_cast<T>(v48_),
static_cast<T
>(v49_)};
2992 return ValuesIn(array);
2997 void operator=(
const ValueArray49& other);
3050 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3051 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3052 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3053 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3054 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3055 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3056 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3057 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3058 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3059 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
3060 class ValueArray50 {
3062 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3063 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3064 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3065 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3066 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3067 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3068 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3069 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3070 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3071 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3072 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3073 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3074 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3075 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3077 template <
typename T>
3078 operator ParamGenerator<T>()
const {
3079 const T array[] = {
static_cast<T
>(v1_), static_cast<T>(v2_),
3080 static_cast<T
>(v3_), static_cast<T>(v4_),
static_cast<T
>(v5_),
3081 static_cast<T>(v6_),
static_cast<T
>(v7_), static_cast<T>(v8_),
3082 static_cast<T
>(v9_), static_cast<T>(v10_),
static_cast<T
>(v11_),
3083 static_cast<T>(v12_),
static_cast<T
>(v13_), static_cast<T>(v14_),
3084 static_cast<T
>(v15_), static_cast<T>(v16_),
static_cast<T
>(v17_),
3085 static_cast<T>(v18_),
static_cast<T
>(v19_), static_cast<T>(v20_),
3086 static_cast<T
>(v21_), static_cast<T>(v22_),
static_cast<T
>(v23_),
3087 static_cast<T>(v24_),
static_cast<T
>(v25_), static_cast<T>(v26_),
3088 static_cast<T
>(v27_), static_cast<T>(v28_),
static_cast<T
>(v29_),
3089 static_cast<T>(v30_),
static_cast<T
>(v31_), static_cast<T>(v32_),
3090 static_cast<T
>(v33_), static_cast<T>(v34_),
static_cast<T
>(v35_),
3091 static_cast<T>(v36_),
static_cast<T
>(v37_), static_cast<T>(v38_),
3092 static_cast<T
>(v39_), static_cast<T>(v40_),
static_cast<T
>(v41_),
3093 static_cast<T>(v42_),
static_cast<T
>(v43_), static_cast<T>(v44_),
3094 static_cast<T
>(v45_), static_cast<T>(v46_),
static_cast<T
>(v47_),
3095 static_cast<T>(v48_),
static_cast<T
>(v49_), static_cast<T>(v50_)};
3096 return ValuesIn(array);
3101 void operator=(
const ValueArray50& other);
3155 # if GTEST_HAS_COMBINE 3161 template <
typename T1,
typename T2>
3162 class CartesianProductGenerator2
3163 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {
3165 typedef ::testing::tuple<T1, T2> ParamType;
3167 CartesianProductGenerator2(
const ParamGenerator<T1>& g1,
3168 const ParamGenerator<T2>& g2)
3169 : g1_(g1), g2_(g2) {}
3170 virtual ~CartesianProductGenerator2() {}
3172 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3173 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
3175 virtual ParamIteratorInterface<ParamType>* End()
const {
3176 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
3180 class Iterator :
public ParamIteratorInterface<ParamType> {
3182 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3183 const ParamGenerator<T1>& g1,
3184 const typename ParamGenerator<T1>::iterator& current1,
3185 const ParamGenerator<T2>& g2,
3186 const typename ParamGenerator<T2>::iterator& current2)
3188 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3189 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3190 ComputeCurrentValue();
3192 virtual ~Iterator() {}
3194 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3199 virtual void Advance() {
3202 if (current2_ == end2_) {
3203 current2_ = begin2_;
3206 ComputeCurrentValue();
3208 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3209 return new Iterator(*
this);
3211 virtual const ParamType* Current()
const {
return ¤t_value_; }
3212 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3216 <<
"The program attempted to compare iterators " 3217 <<
"from different generators." << std::endl;
3218 const Iterator* typed_other =
3219 CheckedDowncastToActualType<const Iterator>(&other);
3223 return (AtEnd() && typed_other->AtEnd()) ||
3225 current1_ == typed_other->current1_ &&
3226 current2_ == typed_other->current2_);
3230 Iterator(
const Iterator& other)
3231 : base_(other.base_),
3232 begin1_(other.begin1_),
3234 current1_(other.current1_),
3235 begin2_(other.begin2_),
3237 current2_(other.current2_) {
3238 ComputeCurrentValue();
3241 void ComputeCurrentValue() {
3243 current_value_ = ParamType(*current1_, *current2_);
3245 bool AtEnd()
const {
3249 current1_ == end1_ ||
3254 void operator=(
const Iterator& other);
3256 const ParamGeneratorInterface<ParamType>*
const base_;
3259 const typename ParamGenerator<T1>::iterator begin1_;
3260 const typename ParamGenerator<T1>::iterator end1_;
3261 typename ParamGenerator<T1>::iterator current1_;
3262 const typename ParamGenerator<T2>::iterator begin2_;
3263 const typename ParamGenerator<T2>::iterator end2_;
3264 typename ParamGenerator<T2>::iterator current2_;
3265 ParamType current_value_;
3269 void operator=(
const CartesianProductGenerator2& other);
3271 const ParamGenerator<T1> g1_;
3272 const ParamGenerator<T2> g2_;
3276 template <
typename T1,
typename T2,
typename T3>
3277 class CartesianProductGenerator3
3278 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
3280 typedef ::testing::tuple<T1, T2, T3> ParamType;
3282 CartesianProductGenerator3(
const ParamGenerator<T1>& g1,
3283 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3)
3284 : g1_(g1), g2_(g2), g3_(g3) {}
3285 virtual ~CartesianProductGenerator3() {}
3287 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3288 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3291 virtual ParamIteratorInterface<ParamType>* End()
const {
3292 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3296 class Iterator :
public ParamIteratorInterface<ParamType> {
3298 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3299 const ParamGenerator<T1>& g1,
3300 const typename ParamGenerator<T1>::iterator& current1,
3301 const ParamGenerator<T2>& g2,
3302 const typename ParamGenerator<T2>::iterator& current2,
3303 const ParamGenerator<T3>& g3,
3304 const typename ParamGenerator<T3>::iterator& current3)
3306 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3307 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3308 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
3309 ComputeCurrentValue();
3311 virtual ~Iterator() {}
3313 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3318 virtual void Advance() {
3321 if (current3_ == end3_) {
3322 current3_ = begin3_;
3325 if (current2_ == end2_) {
3326 current2_ = begin2_;
3329 ComputeCurrentValue();
3331 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3332 return new Iterator(*
this);
3334 virtual const ParamType* Current()
const {
return ¤t_value_; }
3335 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3339 <<
"The program attempted to compare iterators " 3340 <<
"from different generators." << std::endl;
3341 const Iterator* typed_other =
3342 CheckedDowncastToActualType<const Iterator>(&other);
3346 return (AtEnd() && typed_other->AtEnd()) ||
3348 current1_ == typed_other->current1_ &&
3349 current2_ == typed_other->current2_ &&
3350 current3_ == typed_other->current3_);
3354 Iterator(
const Iterator& other)
3355 : base_(other.base_),
3356 begin1_(other.begin1_),
3358 current1_(other.current1_),
3359 begin2_(other.begin2_),
3361 current2_(other.current2_),
3362 begin3_(other.begin3_),
3364 current3_(other.current3_) {
3365 ComputeCurrentValue();
3368 void ComputeCurrentValue() {
3370 current_value_ = ParamType(*current1_, *current2_, *current3_);
3372 bool AtEnd()
const {
3376 current1_ == end1_ ||
3377 current2_ == end2_ ||
3382 void operator=(
const Iterator& other);
3384 const ParamGeneratorInterface<ParamType>*
const base_;
3387 const typename ParamGenerator<T1>::iterator begin1_;
3388 const typename ParamGenerator<T1>::iterator end1_;
3389 typename ParamGenerator<T1>::iterator current1_;
3390 const typename ParamGenerator<T2>::iterator begin2_;
3391 const typename ParamGenerator<T2>::iterator end2_;
3392 typename ParamGenerator<T2>::iterator current2_;
3393 const typename ParamGenerator<T3>::iterator begin3_;
3394 const typename ParamGenerator<T3>::iterator end3_;
3395 typename ParamGenerator<T3>::iterator current3_;
3396 ParamType current_value_;
3400 void operator=(
const CartesianProductGenerator3& other);
3402 const ParamGenerator<T1> g1_;
3403 const ParamGenerator<T2> g2_;
3404 const ParamGenerator<T3> g3_;
3408 template <
typename T1,
typename T2,
typename T3,
typename T4>
3409 class CartesianProductGenerator4
3410 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
3412 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
3414 CartesianProductGenerator4(
const ParamGenerator<T1>& g1,
3415 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3416 const ParamGenerator<T4>& g4)
3417 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3418 virtual ~CartesianProductGenerator4() {}
3420 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3421 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3422 g3_.begin(), g4_, g4_.begin());
3424 virtual ParamIteratorInterface<ParamType>* End()
const {
3425 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3430 class Iterator :
public ParamIteratorInterface<ParamType> {
3432 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3433 const ParamGenerator<T1>& g1,
3434 const typename ParamGenerator<T1>::iterator& current1,
3435 const ParamGenerator<T2>& g2,
3436 const typename ParamGenerator<T2>::iterator& current2,
3437 const ParamGenerator<T3>& g3,
3438 const typename ParamGenerator<T3>::iterator& current3,
3439 const ParamGenerator<T4>& g4,
3440 const typename ParamGenerator<T4>::iterator& current4)
3442 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3443 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3444 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3445 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3446 ComputeCurrentValue();
3448 virtual ~Iterator() {}
3450 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3455 virtual void Advance() {
3458 if (current4_ == end4_) {
3459 current4_ = begin4_;
3462 if (current3_ == end3_) {
3463 current3_ = begin3_;
3466 if (current2_ == end2_) {
3467 current2_ = begin2_;
3470 ComputeCurrentValue();
3472 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3473 return new Iterator(*
this);
3475 virtual const ParamType* Current()
const {
return ¤t_value_; }
3476 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3480 <<
"The program attempted to compare iterators " 3481 <<
"from different generators." << std::endl;
3482 const Iterator* typed_other =
3483 CheckedDowncastToActualType<const Iterator>(&other);
3487 return (AtEnd() && typed_other->AtEnd()) ||
3489 current1_ == typed_other->current1_ &&
3490 current2_ == typed_other->current2_ &&
3491 current3_ == typed_other->current3_ &&
3492 current4_ == typed_other->current4_);
3496 Iterator(
const Iterator& other)
3497 : base_(other.base_),
3498 begin1_(other.begin1_),
3500 current1_(other.current1_),
3501 begin2_(other.begin2_),
3503 current2_(other.current2_),
3504 begin3_(other.begin3_),
3506 current3_(other.current3_),
3507 begin4_(other.begin4_),
3509 current4_(other.current4_) {
3510 ComputeCurrentValue();
3513 void ComputeCurrentValue() {
3515 current_value_ = ParamType(*current1_, *current2_, *current3_,
3518 bool AtEnd()
const {
3522 current1_ == end1_ ||
3523 current2_ == end2_ ||
3524 current3_ == end3_ ||
3529 void operator=(
const Iterator& other);
3531 const ParamGeneratorInterface<ParamType>*
const base_;
3534 const typename ParamGenerator<T1>::iterator begin1_;
3535 const typename ParamGenerator<T1>::iterator end1_;
3536 typename ParamGenerator<T1>::iterator current1_;
3537 const typename ParamGenerator<T2>::iterator begin2_;
3538 const typename ParamGenerator<T2>::iterator end2_;
3539 typename ParamGenerator<T2>::iterator current2_;
3540 const typename ParamGenerator<T3>::iterator begin3_;
3541 const typename ParamGenerator<T3>::iterator end3_;
3542 typename ParamGenerator<T3>::iterator current3_;
3543 const typename ParamGenerator<T4>::iterator begin4_;
3544 const typename ParamGenerator<T4>::iterator end4_;
3545 typename ParamGenerator<T4>::iterator current4_;
3546 ParamType current_value_;
3550 void operator=(
const CartesianProductGenerator4& other);
3552 const ParamGenerator<T1> g1_;
3553 const ParamGenerator<T2> g2_;
3554 const ParamGenerator<T3> g3_;
3555 const ParamGenerator<T4> g4_;
3559 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
3560 class CartesianProductGenerator5
3561 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
3563 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
3565 CartesianProductGenerator5(
const ParamGenerator<T1>& g1,
3566 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3567 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5)
3568 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3569 virtual ~CartesianProductGenerator5() {}
3571 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3572 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3573 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3575 virtual ParamIteratorInterface<ParamType>* End()
const {
3576 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3577 g4_, g4_.end(), g5_, g5_.end());
3581 class Iterator :
public ParamIteratorInterface<ParamType> {
3583 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3584 const ParamGenerator<T1>& g1,
3585 const typename ParamGenerator<T1>::iterator& current1,
3586 const ParamGenerator<T2>& g2,
3587 const typename ParamGenerator<T2>::iterator& current2,
3588 const ParamGenerator<T3>& g3,
3589 const typename ParamGenerator<T3>::iterator& current3,
3590 const ParamGenerator<T4>& g4,
3591 const typename ParamGenerator<T4>::iterator& current4,
3592 const ParamGenerator<T5>& g5,
3593 const typename ParamGenerator<T5>::iterator& current5)
3595 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3596 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3597 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3598 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3599 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
3600 ComputeCurrentValue();
3602 virtual ~Iterator() {}
3604 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3609 virtual void Advance() {
3612 if (current5_ == end5_) {
3613 current5_ = begin5_;
3616 if (current4_ == end4_) {
3617 current4_ = begin4_;
3620 if (current3_ == end3_) {
3621 current3_ = begin3_;
3624 if (current2_ == end2_) {
3625 current2_ = begin2_;
3628 ComputeCurrentValue();
3630 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3631 return new Iterator(*
this);
3633 virtual const ParamType* Current()
const {
return ¤t_value_; }
3634 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3638 <<
"The program attempted to compare iterators " 3639 <<
"from different generators." << std::endl;
3640 const Iterator* typed_other =
3641 CheckedDowncastToActualType<const Iterator>(&other);
3645 return (AtEnd() && typed_other->AtEnd()) ||
3647 current1_ == typed_other->current1_ &&
3648 current2_ == typed_other->current2_ &&
3649 current3_ == typed_other->current3_ &&
3650 current4_ == typed_other->current4_ &&
3651 current5_ == typed_other->current5_);
3655 Iterator(
const Iterator& other)
3656 : base_(other.base_),
3657 begin1_(other.begin1_),
3659 current1_(other.current1_),
3660 begin2_(other.begin2_),
3662 current2_(other.current2_),
3663 begin3_(other.begin3_),
3665 current3_(other.current3_),
3666 begin4_(other.begin4_),
3668 current4_(other.current4_),
3669 begin5_(other.begin5_),
3671 current5_(other.current5_) {
3672 ComputeCurrentValue();
3675 void ComputeCurrentValue() {
3677 current_value_ = ParamType(*current1_, *current2_, *current3_,
3678 *current4_, *current5_);
3680 bool AtEnd()
const {
3684 current1_ == end1_ ||
3685 current2_ == end2_ ||
3686 current3_ == end3_ ||
3687 current4_ == end4_ ||
3692 void operator=(
const Iterator& other);
3694 const ParamGeneratorInterface<ParamType>*
const base_;
3697 const typename ParamGenerator<T1>::iterator begin1_;
3698 const typename ParamGenerator<T1>::iterator end1_;
3699 typename ParamGenerator<T1>::iterator current1_;
3700 const typename ParamGenerator<T2>::iterator begin2_;
3701 const typename ParamGenerator<T2>::iterator end2_;
3702 typename ParamGenerator<T2>::iterator current2_;
3703 const typename ParamGenerator<T3>::iterator begin3_;
3704 const typename ParamGenerator<T3>::iterator end3_;
3705 typename ParamGenerator<T3>::iterator current3_;
3706 const typename ParamGenerator<T4>::iterator begin4_;
3707 const typename ParamGenerator<T4>::iterator end4_;
3708 typename ParamGenerator<T4>::iterator current4_;
3709 const typename ParamGenerator<T5>::iterator begin5_;
3710 const typename ParamGenerator<T5>::iterator end5_;
3711 typename ParamGenerator<T5>::iterator current5_;
3712 ParamType current_value_;
3716 void operator=(
const CartesianProductGenerator5& other);
3718 const ParamGenerator<T1> g1_;
3719 const ParamGenerator<T2> g2_;
3720 const ParamGenerator<T3> g3_;
3721 const ParamGenerator<T4> g4_;
3722 const ParamGenerator<T5> g5_;
3726 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3728 class CartesianProductGenerator6
3729 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
3732 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3734 CartesianProductGenerator6(
const ParamGenerator<T1>& g1,
3735 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3736 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3737 const ParamGenerator<T6>& g6)
3738 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3739 virtual ~CartesianProductGenerator6() {}
3741 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3742 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3743 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3745 virtual ParamIteratorInterface<ParamType>* End()
const {
3746 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3747 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3751 class Iterator :
public ParamIteratorInterface<ParamType> {
3753 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3754 const ParamGenerator<T1>& g1,
3755 const typename ParamGenerator<T1>::iterator& current1,
3756 const ParamGenerator<T2>& g2,
3757 const typename ParamGenerator<T2>::iterator& current2,
3758 const ParamGenerator<T3>& g3,
3759 const typename ParamGenerator<T3>::iterator& current3,
3760 const ParamGenerator<T4>& g4,
3761 const typename ParamGenerator<T4>::iterator& current4,
3762 const ParamGenerator<T5>& g5,
3763 const typename ParamGenerator<T5>::iterator& current5,
3764 const ParamGenerator<T6>& g6,
3765 const typename ParamGenerator<T6>::iterator& current6)
3767 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3768 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3769 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3770 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3771 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3772 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
3773 ComputeCurrentValue();
3775 virtual ~Iterator() {}
3777 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3782 virtual void Advance() {
3785 if (current6_ == end6_) {
3786 current6_ = begin6_;
3789 if (current5_ == end5_) {
3790 current5_ = begin5_;
3793 if (current4_ == end4_) {
3794 current4_ = begin4_;
3797 if (current3_ == end3_) {
3798 current3_ = begin3_;
3801 if (current2_ == end2_) {
3802 current2_ = begin2_;
3805 ComputeCurrentValue();
3807 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3808 return new Iterator(*
this);
3810 virtual const ParamType* Current()
const {
return ¤t_value_; }
3811 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3815 <<
"The program attempted to compare iterators " 3816 <<
"from different generators." << std::endl;
3817 const Iterator* typed_other =
3818 CheckedDowncastToActualType<const Iterator>(&other);
3822 return (AtEnd() && typed_other->AtEnd()) ||
3824 current1_ == typed_other->current1_ &&
3825 current2_ == typed_other->current2_ &&
3826 current3_ == typed_other->current3_ &&
3827 current4_ == typed_other->current4_ &&
3828 current5_ == typed_other->current5_ &&
3829 current6_ == typed_other->current6_);
3833 Iterator(
const Iterator& other)
3834 : base_(other.base_),
3835 begin1_(other.begin1_),
3837 current1_(other.current1_),
3838 begin2_(other.begin2_),
3840 current2_(other.current2_),
3841 begin3_(other.begin3_),
3843 current3_(other.current3_),
3844 begin4_(other.begin4_),
3846 current4_(other.current4_),
3847 begin5_(other.begin5_),
3849 current5_(other.current5_),
3850 begin6_(other.begin6_),
3852 current6_(other.current6_) {
3853 ComputeCurrentValue();
3856 void ComputeCurrentValue() {
3858 current_value_ = ParamType(*current1_, *current2_, *current3_,
3859 *current4_, *current5_, *current6_);
3861 bool AtEnd()
const {
3865 current1_ == end1_ ||
3866 current2_ == end2_ ||
3867 current3_ == end3_ ||
3868 current4_ == end4_ ||
3869 current5_ == end5_ ||
3874 void operator=(
const Iterator& other);
3876 const ParamGeneratorInterface<ParamType>*
const base_;
3879 const typename ParamGenerator<T1>::iterator begin1_;
3880 const typename ParamGenerator<T1>::iterator end1_;
3881 typename ParamGenerator<T1>::iterator current1_;
3882 const typename ParamGenerator<T2>::iterator begin2_;
3883 const typename ParamGenerator<T2>::iterator end2_;
3884 typename ParamGenerator<T2>::iterator current2_;
3885 const typename ParamGenerator<T3>::iterator begin3_;
3886 const typename ParamGenerator<T3>::iterator end3_;
3887 typename ParamGenerator<T3>::iterator current3_;
3888 const typename ParamGenerator<T4>::iterator begin4_;
3889 const typename ParamGenerator<T4>::iterator end4_;
3890 typename ParamGenerator<T4>::iterator current4_;
3891 const typename ParamGenerator<T5>::iterator begin5_;
3892 const typename ParamGenerator<T5>::iterator end5_;
3893 typename ParamGenerator<T5>::iterator current5_;
3894 const typename ParamGenerator<T6>::iterator begin6_;
3895 const typename ParamGenerator<T6>::iterator end6_;
3896 typename ParamGenerator<T6>::iterator current6_;
3897 ParamType current_value_;
3901 void operator=(
const CartesianProductGenerator6& other);
3903 const ParamGenerator<T1> g1_;
3904 const ParamGenerator<T2> g2_;
3905 const ParamGenerator<T3> g3_;
3906 const ParamGenerator<T4> g4_;
3907 const ParamGenerator<T5> g5_;
3908 const ParamGenerator<T6> g6_;
3912 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3913 typename T6,
typename T7>
3914 class CartesianProductGenerator7
3915 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
3918 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3920 CartesianProductGenerator7(
const ParamGenerator<T1>& g1,
3921 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3922 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3923 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7)
3924 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3925 virtual ~CartesianProductGenerator7() {}
3927 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3928 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3929 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3932 virtual ParamIteratorInterface<ParamType>* End()
const {
3933 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3934 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3938 class Iterator :
public ParamIteratorInterface<ParamType> {
3940 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3941 const ParamGenerator<T1>& g1,
3942 const typename ParamGenerator<T1>::iterator& current1,
3943 const ParamGenerator<T2>& g2,
3944 const typename ParamGenerator<T2>::iterator& current2,
3945 const ParamGenerator<T3>& g3,
3946 const typename ParamGenerator<T3>::iterator& current3,
3947 const ParamGenerator<T4>& g4,
3948 const typename ParamGenerator<T4>::iterator& current4,
3949 const ParamGenerator<T5>& g5,
3950 const typename ParamGenerator<T5>::iterator& current5,
3951 const ParamGenerator<T6>& g6,
3952 const typename ParamGenerator<T6>::iterator& current6,
3953 const ParamGenerator<T7>& g7,
3954 const typename ParamGenerator<T7>::iterator& current7)
3956 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3957 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3958 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3959 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3960 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3961 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3962 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
3963 ComputeCurrentValue();
3965 virtual ~Iterator() {}
3967 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3972 virtual void Advance() {
3975 if (current7_ == end7_) {
3976 current7_ = begin7_;
3979 if (current6_ == end6_) {
3980 current6_ = begin6_;
3983 if (current5_ == end5_) {
3984 current5_ = begin5_;
3987 if (current4_ == end4_) {
3988 current4_ = begin4_;
3991 if (current3_ == end3_) {
3992 current3_ = begin3_;
3995 if (current2_ == end2_) {
3996 current2_ = begin2_;
3999 ComputeCurrentValue();
4001 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4002 return new Iterator(*
this);
4004 virtual const ParamType* Current()
const {
return ¤t_value_; }
4005 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4009 <<
"The program attempted to compare iterators " 4010 <<
"from different generators." << std::endl;
4011 const Iterator* typed_other =
4012 CheckedDowncastToActualType<const Iterator>(&other);
4016 return (AtEnd() && typed_other->AtEnd()) ||
4018 current1_ == typed_other->current1_ &&
4019 current2_ == typed_other->current2_ &&
4020 current3_ == typed_other->current3_ &&
4021 current4_ == typed_other->current4_ &&
4022 current5_ == typed_other->current5_ &&
4023 current6_ == typed_other->current6_ &&
4024 current7_ == typed_other->current7_);
4028 Iterator(
const Iterator& other)
4029 : base_(other.base_),
4030 begin1_(other.begin1_),
4032 current1_(other.current1_),
4033 begin2_(other.begin2_),
4035 current2_(other.current2_),
4036 begin3_(other.begin3_),
4038 current3_(other.current3_),
4039 begin4_(other.begin4_),
4041 current4_(other.current4_),
4042 begin5_(other.begin5_),
4044 current5_(other.current5_),
4045 begin6_(other.begin6_),
4047 current6_(other.current6_),
4048 begin7_(other.begin7_),
4050 current7_(other.current7_) {
4051 ComputeCurrentValue();
4054 void ComputeCurrentValue() {
4056 current_value_ = ParamType(*current1_, *current2_, *current3_,
4057 *current4_, *current5_, *current6_, *current7_);
4059 bool AtEnd()
const {
4063 current1_ == end1_ ||
4064 current2_ == end2_ ||
4065 current3_ == end3_ ||
4066 current4_ == end4_ ||
4067 current5_ == end5_ ||
4068 current6_ == end6_ ||
4073 void operator=(
const Iterator& other);
4075 const ParamGeneratorInterface<ParamType>*
const base_;
4078 const typename ParamGenerator<T1>::iterator begin1_;
4079 const typename ParamGenerator<T1>::iterator end1_;
4080 typename ParamGenerator<T1>::iterator current1_;
4081 const typename ParamGenerator<T2>::iterator begin2_;
4082 const typename ParamGenerator<T2>::iterator end2_;
4083 typename ParamGenerator<T2>::iterator current2_;
4084 const typename ParamGenerator<T3>::iterator begin3_;
4085 const typename ParamGenerator<T3>::iterator end3_;
4086 typename ParamGenerator<T3>::iterator current3_;
4087 const typename ParamGenerator<T4>::iterator begin4_;
4088 const typename ParamGenerator<T4>::iterator end4_;
4089 typename ParamGenerator<T4>::iterator current4_;
4090 const typename ParamGenerator<T5>::iterator begin5_;
4091 const typename ParamGenerator<T5>::iterator end5_;
4092 typename ParamGenerator<T5>::iterator current5_;
4093 const typename ParamGenerator<T6>::iterator begin6_;
4094 const typename ParamGenerator<T6>::iterator end6_;
4095 typename ParamGenerator<T6>::iterator current6_;
4096 const typename ParamGenerator<T7>::iterator begin7_;
4097 const typename ParamGenerator<T7>::iterator end7_;
4098 typename ParamGenerator<T7>::iterator current7_;
4099 ParamType current_value_;
4103 void operator=(
const CartesianProductGenerator7& other);
4105 const ParamGenerator<T1> g1_;
4106 const ParamGenerator<T2> g2_;
4107 const ParamGenerator<T3> g3_;
4108 const ParamGenerator<T4> g4_;
4109 const ParamGenerator<T5> g5_;
4110 const ParamGenerator<T6> g6_;
4111 const ParamGenerator<T7> g7_;
4115 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4116 typename T6,
typename T7,
typename T8>
4117 class CartesianProductGenerator8
4118 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4121 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4123 CartesianProductGenerator8(
const ParamGenerator<T1>& g1,
4124 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4125 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4126 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4127 const ParamGenerator<T8>& g8)
4128 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4130 virtual ~CartesianProductGenerator8() {}
4132 virtual ParamIteratorInterface<ParamType>* Begin()
const {
4133 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4134 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4135 g7_.begin(), g8_, g8_.begin());
4137 virtual ParamIteratorInterface<ParamType>* End()
const {
4138 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4139 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4144 class Iterator :
public ParamIteratorInterface<ParamType> {
4146 Iterator(
const ParamGeneratorInterface<ParamType>* base,
4147 const ParamGenerator<T1>& g1,
4148 const typename ParamGenerator<T1>::iterator& current1,
4149 const ParamGenerator<T2>& g2,
4150 const typename ParamGenerator<T2>::iterator& current2,
4151 const ParamGenerator<T3>& g3,
4152 const typename ParamGenerator<T3>::iterator& current3,
4153 const ParamGenerator<T4>& g4,
4154 const typename ParamGenerator<T4>::iterator& current4,
4155 const ParamGenerator<T5>& g5,
4156 const typename ParamGenerator<T5>::iterator& current5,
4157 const ParamGenerator<T6>& g6,
4158 const typename ParamGenerator<T6>::iterator& current6,
4159 const ParamGenerator<T7>& g7,
4160 const typename ParamGenerator<T7>::iterator& current7,
4161 const ParamGenerator<T8>& g8,
4162 const typename ParamGenerator<T8>::iterator& current8)
4164 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4165 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4166 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4167 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4168 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4169 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4170 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4171 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
4172 ComputeCurrentValue();
4174 virtual ~Iterator() {}
4176 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4181 virtual void Advance() {
4184 if (current8_ == end8_) {
4185 current8_ = begin8_;
4188 if (current7_ == end7_) {
4189 current7_ = begin7_;
4192 if (current6_ == end6_) {
4193 current6_ = begin6_;
4196 if (current5_ == end5_) {
4197 current5_ = begin5_;
4200 if (current4_ == end4_) {
4201 current4_ = begin4_;
4204 if (current3_ == end3_) {
4205 current3_ = begin3_;
4208 if (current2_ == end2_) {
4209 current2_ = begin2_;
4212 ComputeCurrentValue();
4214 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4215 return new Iterator(*
this);
4217 virtual const ParamType* Current()
const {
return ¤t_value_; }
4218 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4222 <<
"The program attempted to compare iterators " 4223 <<
"from different generators." << std::endl;
4224 const Iterator* typed_other =
4225 CheckedDowncastToActualType<const Iterator>(&other);
4229 return (AtEnd() && typed_other->AtEnd()) ||
4231 current1_ == typed_other->current1_ &&
4232 current2_ == typed_other->current2_ &&
4233 current3_ == typed_other->current3_ &&
4234 current4_ == typed_other->current4_ &&
4235 current5_ == typed_other->current5_ &&
4236 current6_ == typed_other->current6_ &&
4237 current7_ == typed_other->current7_ &&
4238 current8_ == typed_other->current8_);
4242 Iterator(
const Iterator& other)
4243 : base_(other.base_),
4244 begin1_(other.begin1_),
4246 current1_(other.current1_),
4247 begin2_(other.begin2_),
4249 current2_(other.current2_),
4250 begin3_(other.begin3_),
4252 current3_(other.current3_),
4253 begin4_(other.begin4_),
4255 current4_(other.current4_),
4256 begin5_(other.begin5_),
4258 current5_(other.current5_),
4259 begin6_(other.begin6_),
4261 current6_(other.current6_),
4262 begin7_(other.begin7_),
4264 current7_(other.current7_),
4265 begin8_(other.begin8_),
4267 current8_(other.current8_) {
4268 ComputeCurrentValue();
4271 void ComputeCurrentValue() {
4273 current_value_ = ParamType(*current1_, *current2_, *current3_,
4274 *current4_, *current5_, *current6_, *current7_, *current8_);
4276 bool AtEnd()
const {
4280 current1_ == end1_ ||
4281 current2_ == end2_ ||
4282 current3_ == end3_ ||
4283 current4_ == end4_ ||
4284 current5_ == end5_ ||
4285 current6_ == end6_ ||
4286 current7_ == end7_ ||
4291 void operator=(
const Iterator& other);
4293 const ParamGeneratorInterface<ParamType>*
const base_;
4296 const typename ParamGenerator<T1>::iterator begin1_;
4297 const typename ParamGenerator<T1>::iterator end1_;
4298 typename ParamGenerator<T1>::iterator current1_;
4299 const typename ParamGenerator<T2>::iterator begin2_;
4300 const typename ParamGenerator<T2>::iterator end2_;
4301 typename ParamGenerator<T2>::iterator current2_;
4302 const typename ParamGenerator<T3>::iterator begin3_;
4303 const typename ParamGenerator<T3>::iterator end3_;
4304 typename ParamGenerator<T3>::iterator current3_;
4305 const typename ParamGenerator<T4>::iterator begin4_;
4306 const typename ParamGenerator<T4>::iterator end4_;
4307 typename ParamGenerator<T4>::iterator current4_;
4308 const typename ParamGenerator<T5>::iterator begin5_;
4309 const typename ParamGenerator<T5>::iterator end5_;
4310 typename ParamGenerator<T5>::iterator current5_;
4311 const typename ParamGenerator<T6>::iterator begin6_;
4312 const typename ParamGenerator<T6>::iterator end6_;
4313 typename ParamGenerator<T6>::iterator current6_;
4314 const typename ParamGenerator<T7>::iterator begin7_;
4315 const typename ParamGenerator<T7>::iterator end7_;
4316 typename ParamGenerator<T7>::iterator current7_;
4317 const typename ParamGenerator<T8>::iterator begin8_;
4318 const typename ParamGenerator<T8>::iterator end8_;
4319 typename ParamGenerator<T8>::iterator current8_;
4320 ParamType current_value_;
4324 void operator=(
const CartesianProductGenerator8& other);
4326 const ParamGenerator<T1> g1_;
4327 const ParamGenerator<T2> g2_;
4328 const ParamGenerator<T3> g3_;
4329 const ParamGenerator<T4> g4_;
4330 const ParamGenerator<T5> g5_;
4331 const ParamGenerator<T6> g6_;
4332 const ParamGenerator<T7> g7_;
4333 const ParamGenerator<T8> g8_;
4337 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4338 typename T6,
typename T7,
typename T8,
typename T9>
4339 class CartesianProductGenerator9
4340 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4343 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4345 CartesianProductGenerator9(
const ParamGenerator<T1>& g1,
4346 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4347 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4348 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4349 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9)
4350 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4352 virtual ~CartesianProductGenerator9() {}
4354 virtual ParamIteratorInterface<ParamType>* Begin()
const {
4355 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4356 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4357 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4359 virtual ParamIteratorInterface<ParamType>* End()
const {
4360 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4361 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4362 g8_.end(), g9_, g9_.end());
4366 class Iterator :
public ParamIteratorInterface<ParamType> {
4368 Iterator(
const ParamGeneratorInterface<ParamType>* base,
4369 const ParamGenerator<T1>& g1,
4370 const typename ParamGenerator<T1>::iterator& current1,
4371 const ParamGenerator<T2>& g2,
4372 const typename ParamGenerator<T2>::iterator& current2,
4373 const ParamGenerator<T3>& g3,
4374 const typename ParamGenerator<T3>::iterator& current3,
4375 const ParamGenerator<T4>& g4,
4376 const typename ParamGenerator<T4>::iterator& current4,
4377 const ParamGenerator<T5>& g5,
4378 const typename ParamGenerator<T5>::iterator& current5,
4379 const ParamGenerator<T6>& g6,
4380 const typename ParamGenerator<T6>::iterator& current6,
4381 const ParamGenerator<T7>& g7,
4382 const typename ParamGenerator<T7>::iterator& current7,
4383 const ParamGenerator<T8>& g8,
4384 const typename ParamGenerator<T8>::iterator& current8,
4385 const ParamGenerator<T9>& g9,
4386 const typename ParamGenerator<T9>::iterator& current9)
4388 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4389 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4390 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4391 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4392 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4393 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4394 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4395 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4396 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4397 ComputeCurrentValue();
4399 virtual ~Iterator() {}
4401 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4406 virtual void Advance() {
4409 if (current9_ == end9_) {
4410 current9_ = begin9_;
4413 if (current8_ == end8_) {
4414 current8_ = begin8_;
4417 if (current7_ == end7_) {
4418 current7_ = begin7_;
4421 if (current6_ == end6_) {
4422 current6_ = begin6_;
4425 if (current5_ == end5_) {
4426 current5_ = begin5_;
4429 if (current4_ == end4_) {
4430 current4_ = begin4_;
4433 if (current3_ == end3_) {
4434 current3_ = begin3_;
4437 if (current2_ == end2_) {
4438 current2_ = begin2_;
4441 ComputeCurrentValue();
4443 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4444 return new Iterator(*
this);
4446 virtual const ParamType* Current()
const {
return ¤t_value_; }
4447 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4451 <<
"The program attempted to compare iterators " 4452 <<
"from different generators." << std::endl;
4453 const Iterator* typed_other =
4454 CheckedDowncastToActualType<const Iterator>(&other);
4458 return (AtEnd() && typed_other->AtEnd()) ||
4460 current1_ == typed_other->current1_ &&
4461 current2_ == typed_other->current2_ &&
4462 current3_ == typed_other->current3_ &&
4463 current4_ == typed_other->current4_ &&
4464 current5_ == typed_other->current5_ &&
4465 current6_ == typed_other->current6_ &&
4466 current7_ == typed_other->current7_ &&
4467 current8_ == typed_other->current8_ &&
4468 current9_ == typed_other->current9_);
4472 Iterator(
const Iterator& other)
4473 : base_(other.base_),
4474 begin1_(other.begin1_),
4476 current1_(other.current1_),
4477 begin2_(other.begin2_),
4479 current2_(other.current2_),
4480 begin3_(other.begin3_),
4482 current3_(other.current3_),
4483 begin4_(other.begin4_),
4485 current4_(other.current4_),
4486 begin5_(other.begin5_),
4488 current5_(other.current5_),
4489 begin6_(other.begin6_),
4491 current6_(other.current6_),
4492 begin7_(other.begin7_),
4494 current7_(other.current7_),
4495 begin8_(other.begin8_),
4497 current8_(other.current8_),
4498 begin9_(other.begin9_),
4500 current9_(other.current9_) {
4501 ComputeCurrentValue();
4504 void ComputeCurrentValue() {
4506 current_value_ = ParamType(*current1_, *current2_, *current3_,
4507 *current4_, *current5_, *current6_, *current7_, *current8_,
4510 bool AtEnd()
const {
4514 current1_ == end1_ ||
4515 current2_ == end2_ ||
4516 current3_ == end3_ ||
4517 current4_ == end4_ ||
4518 current5_ == end5_ ||
4519 current6_ == end6_ ||
4520 current7_ == end7_ ||
4521 current8_ == end8_ ||
4526 void operator=(
const Iterator& other);
4528 const ParamGeneratorInterface<ParamType>*
const base_;
4531 const typename ParamGenerator<T1>::iterator begin1_;
4532 const typename ParamGenerator<T1>::iterator end1_;
4533 typename ParamGenerator<T1>::iterator current1_;
4534 const typename ParamGenerator<T2>::iterator begin2_;
4535 const typename ParamGenerator<T2>::iterator end2_;
4536 typename ParamGenerator<T2>::iterator current2_;
4537 const typename ParamGenerator<T3>::iterator begin3_;
4538 const typename ParamGenerator<T3>::iterator end3_;
4539 typename ParamGenerator<T3>::iterator current3_;
4540 const typename ParamGenerator<T4>::iterator begin4_;
4541 const typename ParamGenerator<T4>::iterator end4_;
4542 typename ParamGenerator<T4>::iterator current4_;
4543 const typename ParamGenerator<T5>::iterator begin5_;
4544 const typename ParamGenerator<T5>::iterator end5_;
4545 typename ParamGenerator<T5>::iterator current5_;
4546 const typename ParamGenerator<T6>::iterator begin6_;
4547 const typename ParamGenerator<T6>::iterator end6_;
4548 typename ParamGenerator<T6>::iterator current6_;
4549 const typename ParamGenerator<T7>::iterator begin7_;
4550 const typename ParamGenerator<T7>::iterator end7_;
4551 typename ParamGenerator<T7>::iterator current7_;
4552 const typename ParamGenerator<T8>::iterator begin8_;
4553 const typename ParamGenerator<T8>::iterator end8_;
4554 typename ParamGenerator<T8>::iterator current8_;
4555 const typename ParamGenerator<T9>::iterator begin9_;
4556 const typename ParamGenerator<T9>::iterator end9_;
4557 typename ParamGenerator<T9>::iterator current9_;
4558 ParamType current_value_;
4562 void operator=(
const CartesianProductGenerator9& other);
4564 const ParamGenerator<T1> g1_;
4565 const ParamGenerator<T2> g2_;
4566 const ParamGenerator<T3> g3_;
4567 const ParamGenerator<T4> g4_;
4568 const ParamGenerator<T5> g5_;
4569 const ParamGenerator<T6> g6_;
4570 const ParamGenerator<T7> g7_;
4571 const ParamGenerator<T8> g8_;
4572 const ParamGenerator<T9> g9_;
4576 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4577 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4578 class CartesianProductGenerator10
4579 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4580 T7, T8, T9, T10> > {
4582 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4584 CartesianProductGenerator10(
const ParamGenerator<T1>& g1,
4585 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4586 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4587 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4588 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9,
4589 const ParamGenerator<T10>& g10)
4590 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4591 g9_(g9), g10_(g10) {}
4592 virtual ~CartesianProductGenerator10() {}
4594 virtual ParamIteratorInterface<ParamType>* Begin()
const {
4595 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4596 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4597 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4599 virtual ParamIteratorInterface<ParamType>* End()
const {
4600 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4601 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4602 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4606 class Iterator :
public ParamIteratorInterface<ParamType> {
4608 Iterator(
const ParamGeneratorInterface<ParamType>* base,
4609 const ParamGenerator<T1>& g1,
4610 const typename ParamGenerator<T1>::iterator& current1,
4611 const ParamGenerator<T2>& g2,
4612 const typename ParamGenerator<T2>::iterator& current2,
4613 const ParamGenerator<T3>& g3,
4614 const typename ParamGenerator<T3>::iterator& current3,
4615 const ParamGenerator<T4>& g4,
4616 const typename ParamGenerator<T4>::iterator& current4,
4617 const ParamGenerator<T5>& g5,
4618 const typename ParamGenerator<T5>::iterator& current5,
4619 const ParamGenerator<T6>& g6,
4620 const typename ParamGenerator<T6>::iterator& current6,
4621 const ParamGenerator<T7>& g7,
4622 const typename ParamGenerator<T7>::iterator& current7,
4623 const ParamGenerator<T8>& g8,
4624 const typename ParamGenerator<T8>::iterator& current8,
4625 const ParamGenerator<T9>& g9,
4626 const typename ParamGenerator<T9>::iterator& current9,
4627 const ParamGenerator<T10>& g10,
4628 const typename ParamGenerator<T10>::iterator& current10)
4630 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4631 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4632 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4633 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4634 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4635 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4636 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4637 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4638 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4639 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
4640 ComputeCurrentValue();
4642 virtual ~Iterator() {}
4644 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4649 virtual void Advance() {
4652 if (current10_ == end10_) {
4653 current10_ = begin10_;
4656 if (current9_ == end9_) {
4657 current9_ = begin9_;
4660 if (current8_ == end8_) {
4661 current8_ = begin8_;
4664 if (current7_ == end7_) {
4665 current7_ = begin7_;
4668 if (current6_ == end6_) {
4669 current6_ = begin6_;
4672 if (current5_ == end5_) {
4673 current5_ = begin5_;
4676 if (current4_ == end4_) {
4677 current4_ = begin4_;
4680 if (current3_ == end3_) {
4681 current3_ = begin3_;
4684 if (current2_ == end2_) {
4685 current2_ = begin2_;
4688 ComputeCurrentValue();
4690 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4691 return new Iterator(*
this);
4693 virtual const ParamType* Current()
const {
return ¤t_value_; }
4694 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4698 <<
"The program attempted to compare iterators " 4699 <<
"from different generators." << std::endl;
4700 const Iterator* typed_other =
4701 CheckedDowncastToActualType<const Iterator>(&other);
4705 return (AtEnd() && typed_other->AtEnd()) ||
4707 current1_ == typed_other->current1_ &&
4708 current2_ == typed_other->current2_ &&
4709 current3_ == typed_other->current3_ &&
4710 current4_ == typed_other->current4_ &&
4711 current5_ == typed_other->current5_ &&
4712 current6_ == typed_other->current6_ &&
4713 current7_ == typed_other->current7_ &&
4714 current8_ == typed_other->current8_ &&
4715 current9_ == typed_other->current9_ &&
4716 current10_ == typed_other->current10_);
4720 Iterator(
const Iterator& other)
4721 : base_(other.base_),
4722 begin1_(other.begin1_),
4724 current1_(other.current1_),
4725 begin2_(other.begin2_),
4727 current2_(other.current2_),
4728 begin3_(other.begin3_),
4730 current3_(other.current3_),
4731 begin4_(other.begin4_),
4733 current4_(other.current4_),
4734 begin5_(other.begin5_),
4736 current5_(other.current5_),
4737 begin6_(other.begin6_),
4739 current6_(other.current6_),
4740 begin7_(other.begin7_),
4742 current7_(other.current7_),
4743 begin8_(other.begin8_),
4745 current8_(other.current8_),
4746 begin9_(other.begin9_),
4748 current9_(other.current9_),
4749 begin10_(other.begin10_),
4750 end10_(other.end10_),
4751 current10_(other.current10_) {
4752 ComputeCurrentValue();
4755 void ComputeCurrentValue() {
4757 current_value_ = ParamType(*current1_, *current2_, *current3_,
4758 *current4_, *current5_, *current6_, *current7_, *current8_,
4759 *current9_, *current10_);
4761 bool AtEnd()
const {
4765 current1_ == end1_ ||
4766 current2_ == end2_ ||
4767 current3_ == end3_ ||
4768 current4_ == end4_ ||
4769 current5_ == end5_ ||
4770 current6_ == end6_ ||
4771 current7_ == end7_ ||
4772 current8_ == end8_ ||
4773 current9_ == end9_ ||
4774 current10_ == end10_;
4778 void operator=(
const Iterator& other);
4780 const ParamGeneratorInterface<ParamType>*
const base_;
4783 const typename ParamGenerator<T1>::iterator begin1_;
4784 const typename ParamGenerator<T1>::iterator end1_;
4785 typename ParamGenerator<T1>::iterator current1_;
4786 const typename ParamGenerator<T2>::iterator begin2_;
4787 const typename ParamGenerator<T2>::iterator end2_;
4788 typename ParamGenerator<T2>::iterator current2_;
4789 const typename ParamGenerator<T3>::iterator begin3_;
4790 const typename ParamGenerator<T3>::iterator end3_;
4791 typename ParamGenerator<T3>::iterator current3_;
4792 const typename ParamGenerator<T4>::iterator begin4_;
4793 const typename ParamGenerator<T4>::iterator end4_;
4794 typename ParamGenerator<T4>::iterator current4_;
4795 const typename ParamGenerator<T5>::iterator begin5_;
4796 const typename ParamGenerator<T5>::iterator end5_;
4797 typename ParamGenerator<T5>::iterator current5_;
4798 const typename ParamGenerator<T6>::iterator begin6_;
4799 const typename ParamGenerator<T6>::iterator end6_;
4800 typename ParamGenerator<T6>::iterator current6_;
4801 const typename ParamGenerator<T7>::iterator begin7_;
4802 const typename ParamGenerator<T7>::iterator end7_;
4803 typename ParamGenerator<T7>::iterator current7_;
4804 const typename ParamGenerator<T8>::iterator begin8_;
4805 const typename ParamGenerator<T8>::iterator end8_;
4806 typename ParamGenerator<T8>::iterator current8_;
4807 const typename ParamGenerator<T9>::iterator begin9_;
4808 const typename ParamGenerator<T9>::iterator end9_;
4809 typename ParamGenerator<T9>::iterator current9_;
4810 const typename ParamGenerator<T10>::iterator begin10_;
4811 const typename ParamGenerator<T10>::iterator end10_;
4812 typename ParamGenerator<T10>::iterator current10_;
4813 ParamType current_value_;
4817 void operator=(
const CartesianProductGenerator10& other);
4819 const ParamGenerator<T1> g1_;
4820 const ParamGenerator<T2> g2_;
4821 const ParamGenerator<T3> g3_;
4822 const ParamGenerator<T4> g4_;
4823 const ParamGenerator<T5> g5_;
4824 const ParamGenerator<T6> g6_;
4825 const ParamGenerator<T7> g7_;
4826 const ParamGenerator<T8> g8_;
4827 const ParamGenerator<T9> g9_;
4828 const ParamGenerator<T10> g10_;
4838 template <
class Generator1,
class Generator2>
4839 class CartesianProductHolder2 {
4841 CartesianProductHolder2(
const Generator1& g1,
const Generator2& g2)
4842 : g1_(g1), g2_(g2) {}
4843 template <
typename T1,
typename T2>
4844 operator ParamGenerator< ::testing::tuple<T1, T2> >()
const {
4845 return ParamGenerator< ::testing::tuple<T1, T2> >(
4846 new CartesianProductGenerator2<T1, T2>(
4847 static_cast<ParamGenerator<T1>
>(g1_),
4848 static_cast<ParamGenerator<T2>
>(g2_)));
4853 void operator=(
const CartesianProductHolder2& other);
4855 const Generator1 g1_;
4856 const Generator2 g2_;
4859 template <
class Generator1,
class Generator2,
class Generator3>
4860 class CartesianProductHolder3 {
4862 CartesianProductHolder3(
const Generator1& g1,
const Generator2& g2,
4863 const Generator3& g3)
4864 : g1_(g1), g2_(g2), g3_(g3) {}
4865 template <
typename T1,
typename T2,
typename T3>
4866 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >()
const {
4867 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
4868 new CartesianProductGenerator3<T1, T2, T3>(
4869 static_cast<ParamGenerator<T1>
>(g1_),
4870 static_cast<ParamGenerator<T2>
>(g2_),
4871 static_cast<ParamGenerator<T3>
>(g3_)));
4876 void operator=(
const CartesianProductHolder3& other);
4878 const Generator1 g1_;
4879 const Generator2 g2_;
4880 const Generator3 g3_;
4883 template <
class Generator1,
class Generator2,
class Generator3,
4885 class CartesianProductHolder4 {
4887 CartesianProductHolder4(
const Generator1& g1,
const Generator2& g2,
4888 const Generator3& g3,
const Generator4& g4)
4889 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4890 template <
typename T1,
typename T2,
typename T3,
typename T4>
4891 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >()
const {
4892 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
4893 new CartesianProductGenerator4<T1, T2, T3, T4>(
4894 static_cast<ParamGenerator<T1>
>(g1_),
4895 static_cast<ParamGenerator<T2>
>(g2_),
4896 static_cast<ParamGenerator<T3>
>(g3_),
4897 static_cast<ParamGenerator<T4>
>(g4_)));
4902 void operator=(
const CartesianProductHolder4& other);
4904 const Generator1 g1_;
4905 const Generator2 g2_;
4906 const Generator3 g3_;
4907 const Generator4 g4_;
4910 template <
class Generator1,
class Generator2,
class Generator3,
4911 class Generator4,
class Generator5>
4912 class CartesianProductHolder5 {
4914 CartesianProductHolder5(
const Generator1& g1,
const Generator2& g2,
4915 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
4916 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4917 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4918 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >()
const {
4919 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
4920 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4921 static_cast<ParamGenerator<T1>
>(g1_),
4922 static_cast<ParamGenerator<T2>
>(g2_),
4923 static_cast<ParamGenerator<T3>
>(g3_),
4924 static_cast<ParamGenerator<T4>
>(g4_),
4925 static_cast<ParamGenerator<T5>
>(g5_)));
4930 void operator=(
const CartesianProductHolder5& other);
4932 const Generator1 g1_;
4933 const Generator2 g2_;
4934 const Generator3 g3_;
4935 const Generator4 g4_;
4936 const Generator5 g5_;
4939 template <
class Generator1,
class Generator2,
class Generator3,
4940 class Generator4,
class Generator5,
class Generator6>
4941 class CartesianProductHolder6 {
4943 CartesianProductHolder6(
const Generator1& g1,
const Generator2& g2,
4944 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4945 const Generator6& g6)
4946 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4947 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4949 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >()
const {
4950 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
4951 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4952 static_cast<ParamGenerator<T1>
>(g1_),
4953 static_cast<ParamGenerator<T2>
>(g2_),
4954 static_cast<ParamGenerator<T3>
>(g3_),
4955 static_cast<ParamGenerator<T4>
>(g4_),
4956 static_cast<ParamGenerator<T5>
>(g5_),
4957 static_cast<ParamGenerator<T6>
>(g6_)));
4962 void operator=(
const CartesianProductHolder6& other);
4964 const Generator1 g1_;
4965 const Generator2 g2_;
4966 const Generator3 g3_;
4967 const Generator4 g4_;
4968 const Generator5 g5_;
4969 const Generator6 g6_;
4972 template <
class Generator1,
class Generator2,
class Generator3,
4973 class Generator4,
class Generator5,
class Generator6,
class Generator7>
4974 class CartesianProductHolder7 {
4976 CartesianProductHolder7(
const Generator1& g1,
const Generator2& g2,
4977 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4978 const Generator6& g6,
const Generator7& g7)
4979 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4980 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4981 typename T6,
typename T7>
4982 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4984 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4985 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4986 static_cast<ParamGenerator<T1>
>(g1_),
4987 static_cast<ParamGenerator<T2>
>(g2_),
4988 static_cast<ParamGenerator<T3>
>(g3_),
4989 static_cast<ParamGenerator<T4>
>(g4_),
4990 static_cast<ParamGenerator<T5>
>(g5_),
4991 static_cast<ParamGenerator<T6>
>(g6_),
4992 static_cast<ParamGenerator<T7>
>(g7_)));
4997 void operator=(
const CartesianProductHolder7& other);
4999 const Generator1 g1_;
5000 const Generator2 g2_;
5001 const Generator3 g3_;
5002 const Generator4 g4_;
5003 const Generator5 g5_;
5004 const Generator6 g6_;
5005 const Generator7 g7_;
5008 template <
class Generator1,
class Generator2,
class Generator3,
5009 class Generator4,
class Generator5,
class Generator6,
class Generator7,
5011 class CartesianProductHolder8 {
5013 CartesianProductHolder8(
const Generator1& g1,
const Generator2& g2,
5014 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
5015 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
5016 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5018 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5019 typename T6,
typename T7,
typename T8>
5020 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,
5022 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5023 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5024 static_cast<ParamGenerator<T1>
>(g1_),
5025 static_cast<ParamGenerator<T2>
>(g2_),
5026 static_cast<ParamGenerator<T3>
>(g3_),
5027 static_cast<ParamGenerator<T4>
>(g4_),
5028 static_cast<ParamGenerator<T5>
>(g5_),
5029 static_cast<ParamGenerator<T6>
>(g6_),
5030 static_cast<ParamGenerator<T7>
>(g7_),
5031 static_cast<ParamGenerator<T8>
>(g8_)));
5036 void operator=(
const CartesianProductHolder8& other);
5038 const Generator1 g1_;
5039 const Generator2 g2_;
5040 const Generator3 g3_;
5041 const Generator4 g4_;
5042 const Generator5 g5_;
5043 const Generator6 g6_;
5044 const Generator7 g7_;
5045 const Generator8 g8_;
5048 template <
class Generator1,
class Generator2,
class Generator3,
5049 class Generator4,
class Generator5,
class Generator6,
class Generator7,
5050 class Generator8,
class Generator9>
5051 class CartesianProductHolder9 {
5053 CartesianProductHolder9(
const Generator1& g1,
const Generator2& g2,
5054 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
5055 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
5056 const Generator9& g9)
5057 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5059 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5060 typename T6,
typename T7,
typename T8,
typename T9>
5061 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5063 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5065 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5066 static_cast<ParamGenerator<T1>
>(g1_),
5067 static_cast<ParamGenerator<T2>
>(g2_),
5068 static_cast<ParamGenerator<T3>
>(g3_),
5069 static_cast<ParamGenerator<T4>
>(g4_),
5070 static_cast<ParamGenerator<T5>
>(g5_),
5071 static_cast<ParamGenerator<T6>
>(g6_),
5072 static_cast<ParamGenerator<T7>
>(g7_),
5073 static_cast<ParamGenerator<T8>
>(g8_),
5074 static_cast<ParamGenerator<T9>
>(g9_)));
5079 void operator=(
const CartesianProductHolder9& other);
5081 const Generator1 g1_;
5082 const Generator2 g2_;
5083 const Generator3 g3_;
5084 const Generator4 g4_;
5085 const Generator5 g5_;
5086 const Generator6 g6_;
5087 const Generator7 g7_;
5088 const Generator8 g8_;
5089 const Generator9 g9_;
5092 template <
class Generator1,
class Generator2,
class Generator3,
5093 class Generator4,
class Generator5,
class Generator6,
class Generator7,
5094 class Generator8,
class Generator9,
class Generator10>
5095 class CartesianProductHolder10 {
5097 CartesianProductHolder10(
const Generator1& g1,
const Generator2& g2,
5098 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
5099 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
5100 const Generator9& g9,
const Generator10& g10)
5101 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5102 g9_(g9), g10_(g10) {}
5103 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5104 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
5105 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5107 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5109 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5111 static_cast<ParamGenerator<T1>
>(g1_),
5112 static_cast<ParamGenerator<T2>
>(g2_),
5113 static_cast<ParamGenerator<T3>
>(g3_),
5114 static_cast<ParamGenerator<T4>
>(g4_),
5115 static_cast<ParamGenerator<T5>
>(g5_),
5116 static_cast<ParamGenerator<T6>
>(g6_),
5117 static_cast<ParamGenerator<T7>
>(g7_),
5118 static_cast<ParamGenerator<T8>
>(g8_),
5119 static_cast<ParamGenerator<T9>
>(g9_),
5120 static_cast<ParamGenerator<T10>
>(g10_)));
5125 void operator=(
const CartesianProductHolder10& other);
5127 const Generator1 g1_;
5128 const Generator2 g2_;
5129 const Generator3 g3_;
5130 const Generator4 g4_;
5131 const Generator5 g5_;
5132 const Generator6 g6_;
5133 const Generator7 g7_;
5134 const Generator8 g8_;
5135 const Generator9 g9_;
5136 const Generator10 g10_;
5139 # endif // GTEST_HAS_COMBINE 5144 #endif // GTEST_HAS_PARAM_TEST 5146 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ Definition: gmock-actions.h:53
#define GTEST_CHECK_(condition)
Definition: gtest-port.h:1295