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 {
return ValuesIn(&v1_, &v1_ + 1); }
86 void operator=(
const ValueArray1& other);
91 template <
typename T1,
typename T2>
94 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
97 operator ParamGenerator<T>()
const {
98 const T array[] = {v1_, v2_};
99 return ValuesIn(array);
104 void operator=(
const ValueArray2& other);
110 template <
typename T1,
typename T2,
typename T3>
113 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
115 template <
typename T>
116 operator ParamGenerator<T>()
const {
117 const T array[] = {v1_, v2_, v3_};
118 return ValuesIn(array);
123 void operator=(
const ValueArray3& other);
130 template <
typename T1,
typename T2,
typename T3,
typename T4>
133 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
136 template <
typename T>
137 operator ParamGenerator<T>()
const {
138 const T array[] = {v1_, v2_, v3_, v4_};
139 return ValuesIn(array);
144 void operator=(
const ValueArray4& other);
152 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
155 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
158 template <
typename T>
159 operator ParamGenerator<T>()
const {
160 const T array[] = {v1_, v2_, v3_, v4_, v5_};
161 return ValuesIn(array);
166 void operator=(
const ValueArray5& other);
175 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
179 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
180 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
182 template <
typename T>
183 operator ParamGenerator<T>()
const {
184 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
185 return ValuesIn(array);
190 void operator=(
const ValueArray6& other);
200 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
201 typename T6,
typename T7>
204 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
205 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
207 template <
typename T>
208 operator ParamGenerator<T>()
const {
209 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
210 return ValuesIn(array);
215 void operator=(
const ValueArray7& other);
226 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
227 typename T6,
typename T7,
typename T8>
230 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
231 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
234 template <
typename T>
235 operator ParamGenerator<T>()
const {
236 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
237 return ValuesIn(array);
242 void operator=(
const ValueArray8& other);
254 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
255 typename T6,
typename T7,
typename T8,
typename T9>
258 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
259 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
262 template <
typename T>
263 operator ParamGenerator<T>()
const {
264 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
265 return ValuesIn(array);
270 void operator=(
const ValueArray9& other);
283 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
284 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
287 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
288 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
289 v8_(v8), v9_(v9), v10_(v10) {}
291 template <
typename T>
292 operator ParamGenerator<T>()
const {
293 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
294 return ValuesIn(array);
299 void operator=(
const ValueArray10& other);
313 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
314 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
318 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
319 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
320 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
322 template <
typename T>
323 operator ParamGenerator<T>()
const {
324 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
325 return ValuesIn(array);
330 void operator=(
const ValueArray11& other);
345 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
346 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
347 typename T11,
typename T12>
350 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
351 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
352 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
354 template <
typename T>
355 operator ParamGenerator<T>()
const {
356 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
358 return ValuesIn(array);
363 void operator=(
const ValueArray12& other);
379 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
380 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
381 typename T11,
typename T12,
typename T13>
384 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
385 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
386 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
387 v12_(v12), v13_(v13) {}
389 template <
typename T>
390 operator ParamGenerator<T>()
const {
391 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
393 return ValuesIn(array);
398 void operator=(
const ValueArray13& other);
415 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
416 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
417 typename T11,
typename T12,
typename T13,
typename T14>
420 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
421 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
422 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
423 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
425 template <
typename T>
426 operator ParamGenerator<T>()
const {
427 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
429 return ValuesIn(array);
434 void operator=(
const ValueArray14& other);
452 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
453 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
454 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
457 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
458 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
459 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
460 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
462 template <
typename T>
463 operator ParamGenerator<T>()
const {
464 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
465 v12_, v13_, v14_, v15_};
466 return ValuesIn(array);
471 void operator=(
const ValueArray15& other);
490 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
491 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
492 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
496 ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
497 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
498 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
499 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
502 template <
typename T>
503 operator ParamGenerator<T>()
const {
504 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
505 v12_, v13_, v14_, v15_, v16_};
506 return ValuesIn(array);
511 void operator=(
const ValueArray16& other);
531 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
532 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
533 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
534 typename T16,
typename T17>
537 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
538 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
539 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
540 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
541 v15_(v15), v16_(v16), v17_(v17) {}
543 template <
typename T>
544 operator ParamGenerator<T>()
const {
545 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
546 v12_, v13_, v14_, v15_, v16_, v17_};
547 return ValuesIn(array);
552 void operator=(
const ValueArray17& other);
573 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
574 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
575 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
576 typename T16,
typename T17,
typename T18>
579 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
580 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
581 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
582 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
583 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
585 template <
typename T>
586 operator ParamGenerator<T>()
const {
587 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
588 v12_, v13_, v14_, v15_, v16_, v17_, v18_};
589 return ValuesIn(array);
594 void operator=(
const ValueArray18& other);
616 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
617 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
618 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
619 typename T16,
typename T17,
typename T18,
typename T19>
622 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
623 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
624 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
625 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
626 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
628 template <
typename T>
629 operator ParamGenerator<T>()
const {
630 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
631 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
632 return ValuesIn(array);
637 void operator=(
const ValueArray19& other);
660 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
661 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
662 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
663 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
666 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
667 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
668 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
669 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
670 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
671 v19_(v19), v20_(v20) {}
673 template <
typename T>
674 operator ParamGenerator<T>()
const {
675 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
676 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
677 return ValuesIn(array);
682 void operator=(
const ValueArray20& other);
706 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
707 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
708 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
709 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
713 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
714 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
715 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
716 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
717 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
718 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
720 template <
typename T>
721 operator ParamGenerator<T>()
const {
722 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
723 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
724 return ValuesIn(array);
729 void operator=(
const ValueArray21& other);
754 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
755 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
756 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
757 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
758 typename T21,
typename T22>
761 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
762 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
763 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
764 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
765 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
766 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
768 template <
typename T>
769 operator ParamGenerator<T>()
const {
770 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
771 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
772 return ValuesIn(array);
777 void operator=(
const ValueArray22& other);
803 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
804 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
805 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
806 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
807 typename T21,
typename T22,
typename T23>
810 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
811 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
812 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
813 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
814 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
815 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
818 template <
typename T>
819 operator ParamGenerator<T>()
const {
820 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
821 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
823 return ValuesIn(array);
828 void operator=(
const ValueArray23& other);
855 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
856 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
857 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
858 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
859 typename T21,
typename T22,
typename T23,
typename T24>
862 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
863 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
864 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
865 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
866 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
867 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
868 v22_(v22), v23_(v23), v24_(v24) {}
870 template <
typename T>
871 operator ParamGenerator<T>()
const {
872 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
873 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
875 return ValuesIn(array);
880 void operator=(
const ValueArray24& other);
908 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
909 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
910 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
911 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
912 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
915 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
916 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
917 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
918 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
919 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
920 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
921 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
923 template <
typename T>
924 operator ParamGenerator<T>()
const {
925 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
926 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
928 return ValuesIn(array);
933 void operator=(
const ValueArray25& other);
962 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
963 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
964 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
965 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
966 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
970 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
971 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
972 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
973 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
974 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
975 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
976 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
978 template <
typename T>
979 operator ParamGenerator<T>()
const {
980 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
981 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
983 return ValuesIn(array);
988 void operator=(
const ValueArray26& other);
1018 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1019 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1020 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1021 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1022 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1023 typename T26,
typename T27>
1024 class ValueArray27 {
1026 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1027 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1028 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1029 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1030 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1031 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1032 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1033 v26_(v26), v27_(v27) {}
1035 template <
typename T>
1036 operator ParamGenerator<T>()
const {
1037 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1038 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1039 v24_, v25_, v26_, v27_};
1040 return ValuesIn(array);
1045 void operator=(
const ValueArray27& other);
1076 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1077 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1078 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1079 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1080 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1081 typename T26,
typename T27,
typename T28>
1082 class ValueArray28 {
1084 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1085 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1086 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1087 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1088 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1089 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1090 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1091 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1093 template <
typename T>
1094 operator ParamGenerator<T>()
const {
1095 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1096 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1097 v24_, v25_, v26_, v27_, v28_};
1098 return ValuesIn(array);
1103 void operator=(
const ValueArray28& other);
1135 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1136 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1137 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1138 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1139 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1140 typename T26,
typename T27,
typename T28,
typename T29>
1141 class ValueArray29 {
1143 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1144 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1145 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1146 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1147 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1148 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1149 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1150 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1152 template <
typename T>
1153 operator ParamGenerator<T>()
const {
1154 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1155 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1156 v24_, v25_, v26_, v27_, v28_, v29_};
1157 return ValuesIn(array);
1162 void operator=(
const ValueArray29& other);
1195 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1196 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1197 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1198 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1199 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1200 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
1201 class ValueArray30 {
1203 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1204 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1205 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1206 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1207 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1208 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1209 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1210 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1211 v29_(v29), v30_(v30) {}
1213 template <
typename T>
1214 operator ParamGenerator<T>()
const {
1215 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1216 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1217 v24_, v25_, v26_, v27_, v28_, v29_, v30_};
1218 return ValuesIn(array);
1223 void operator=(
const ValueArray30& other);
1257 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1258 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1259 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1260 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1261 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1262 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1264 class ValueArray31 {
1266 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1267 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1268 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1269 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1270 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1271 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1272 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1273 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1274 v29_(v29), v30_(v30), v31_(v31) {}
1276 template <
typename T>
1277 operator ParamGenerator<T>()
const {
1278 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1279 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1280 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
1281 return ValuesIn(array);
1286 void operator=(
const ValueArray31& other);
1321 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1322 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1323 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1324 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1325 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1326 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1327 typename T31,
typename T32>
1328 class ValueArray32 {
1330 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1331 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1332 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1333 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1334 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1335 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1336 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1337 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1338 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1340 template <
typename T>
1341 operator ParamGenerator<T>()
const {
1342 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1343 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1344 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
1345 return ValuesIn(array);
1350 void operator=(
const ValueArray32& other);
1386 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1387 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1388 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1389 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1390 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1391 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1392 typename T31,
typename T32,
typename T33>
1393 class ValueArray33 {
1395 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1396 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1397 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1398 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1399 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1400 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1401 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1402 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1403 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1406 template <
typename T>
1407 operator ParamGenerator<T>()
const {
1408 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1409 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1410 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
1411 return ValuesIn(array);
1416 void operator=(
const ValueArray33& other);
1453 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1454 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1455 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1456 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1457 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1458 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1459 typename T31,
typename T32,
typename T33,
typename T34>
1460 class ValueArray34 {
1462 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1463 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1464 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1465 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1466 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1467 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1468 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1469 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1470 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1471 v33_(v33), v34_(v34) {}
1473 template <
typename T>
1474 operator ParamGenerator<T>()
const {
1475 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1476 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1477 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
1478 return ValuesIn(array);
1483 void operator=(
const ValueArray34& other);
1521 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1522 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1523 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1524 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1525 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1526 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1527 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
1528 class ValueArray35 {
1530 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1531 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1532 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1533 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1534 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1535 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1536 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1537 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1538 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1539 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1541 template <
typename T>
1542 operator ParamGenerator<T>()
const {
1543 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1544 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1545 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
1547 return ValuesIn(array);
1552 void operator=(
const ValueArray35& other);
1591 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1592 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1593 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1594 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1595 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1596 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1597 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1599 class ValueArray36 {
1601 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1602 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1603 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1604 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1605 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1606 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1607 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1608 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1609 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1610 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1612 template <
typename T>
1613 operator ParamGenerator<T>()
const {
1614 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1615 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1616 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1618 return ValuesIn(array);
1623 void operator=(
const ValueArray36& other);
1663 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1664 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1665 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1666 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1667 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1668 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1669 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1670 typename T36,
typename T37>
1671 class ValueArray37 {
1673 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1674 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1675 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1676 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1677 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1678 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1679 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1680 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1681 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1682 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1683 v36_(v36), v37_(v37) {}
1685 template <
typename T>
1686 operator ParamGenerator<T>()
const {
1687 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1688 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1689 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1691 return ValuesIn(array);
1696 void operator=(
const ValueArray37& other);
1737 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1738 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1739 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1740 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1741 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1742 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1743 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1744 typename T36,
typename T37,
typename T38>
1745 class ValueArray38 {
1747 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1748 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1749 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1750 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1751 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1752 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1753 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1754 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1755 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1756 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1757 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1759 template <
typename T>
1760 operator ParamGenerator<T>()
const {
1761 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1762 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1763 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1765 return ValuesIn(array);
1770 void operator=(
const ValueArray38& other);
1812 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1813 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1814 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1815 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1816 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1817 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1818 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1819 typename T36,
typename T37,
typename T38,
typename T39>
1820 class ValueArray39 {
1822 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1823 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1824 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1825 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1826 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
1827 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1828 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1829 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1830 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1831 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1832 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
1834 template <
typename T>
1835 operator ParamGenerator<T>()
const {
1836 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1837 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1838 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1839 v36_, v37_, v38_, v39_};
1840 return ValuesIn(array);
1845 void operator=(
const ValueArray39& other);
1888 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1889 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1890 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1891 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1892 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1893 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1894 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1895 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
1896 class ValueArray40 {
1898 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1899 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1900 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1901 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1902 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
1903 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1904 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1905 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1906 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1907 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
1908 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
1911 template <
typename T>
1912 operator ParamGenerator<T>()
const {
1913 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1914 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1915 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1916 v36_, v37_, v38_, v39_, v40_};
1917 return ValuesIn(array);
1922 void operator=(
const ValueArray40& other);
1966 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1967 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1968 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1969 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1970 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1971 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1972 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1973 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
1975 class ValueArray41 {
1977 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1978 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1979 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1980 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1981 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
1982 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1983 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1984 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1985 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1986 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1987 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
1988 v39_(v39), v40_(v40), v41_(v41) {}
1990 template <
typename T>
1991 operator ParamGenerator<T>()
const {
1992 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1993 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1994 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1995 v36_, v37_, v38_, v39_, v40_, v41_};
1996 return ValuesIn(array);
2001 void operator=(
const ValueArray41& other);
2046 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2047 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2048 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2049 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2050 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2051 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2052 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2053 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2054 typename T41,
typename T42>
2055 class ValueArray42 {
2057 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2058 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2059 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2060 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2061 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2062 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2063 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2064 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2065 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2066 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2067 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2068 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2070 template <
typename T>
2071 operator ParamGenerator<T>()
const {
2072 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2073 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2074 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2075 v36_, v37_, v38_, v39_, v40_, v41_, v42_};
2076 return ValuesIn(array);
2081 void operator=(
const ValueArray42& other);
2127 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2128 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2129 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2130 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2131 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2132 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2133 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2134 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2135 typename T41,
typename T42,
typename T43>
2136 class ValueArray43 {
2138 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2139 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2140 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2141 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2142 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2143 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2144 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2145 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2146 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2147 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2148 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2149 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2151 template <
typename T>
2152 operator ParamGenerator<T>()
const {
2153 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2154 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2155 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2156 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
2157 return ValuesIn(array);
2162 void operator=(
const ValueArray43& other);
2209 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2210 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2211 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2212 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2213 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2214 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2215 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2216 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2217 typename T41,
typename T42,
typename T43,
typename T44>
2218 class ValueArray44 {
2220 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2221 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2222 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2223 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2224 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2225 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2226 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2227 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2228 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2229 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2230 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2231 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2232 v43_(v43), v44_(v44) {}
2234 template <
typename T>
2235 operator ParamGenerator<T>()
const {
2236 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2237 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2238 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2239 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
2240 return ValuesIn(array);
2245 void operator=(
const ValueArray44& other);
2293 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2294 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2295 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2296 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2297 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2298 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2299 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2300 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2301 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
2302 class ValueArray45 {
2304 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2305 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2306 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2307 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2308 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2309 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2310 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2311 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2312 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2313 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2314 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2315 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2316 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2318 template <
typename T>
2319 operator ParamGenerator<T>()
const {
2320 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2321 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2322 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2323 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
2324 return ValuesIn(array);
2329 void operator=(
const ValueArray45& other);
2378 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2379 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2380 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2381 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2382 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2383 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2384 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2385 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2386 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2388 class ValueArray46 {
2390 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2391 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2392 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2393 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2394 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2395 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2396 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2397 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2398 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2399 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2400 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2401 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2402 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2404 template <
typename T>
2405 operator ParamGenerator<T>()
const {
2406 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2407 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2408 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2409 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
2410 return ValuesIn(array);
2415 void operator=(
const ValueArray46& other);
2465 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2466 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2467 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2468 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2469 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2470 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2471 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2472 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2473 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2474 typename T46,
typename T47>
2475 class ValueArray47 {
2477 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2478 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2479 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2480 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2481 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2482 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2483 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2484 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2485 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2486 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2487 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2488 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2489 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2492 template <
typename T>
2493 operator ParamGenerator<T>()
const {
2494 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2495 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2496 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2497 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
2499 return ValuesIn(array);
2504 void operator=(
const ValueArray47& other);
2555 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2556 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2557 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2558 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2559 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2560 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2561 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2562 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2563 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2564 typename T46,
typename T47,
typename T48>
2565 class ValueArray48 {
2567 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2568 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2569 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2570 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2571 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2572 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2573 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2574 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2575 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2576 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2577 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2578 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2579 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2580 v46_(v46), v47_(v47), v48_(v48) {}
2582 template <
typename T>
2583 operator ParamGenerator<T>()
const {
2584 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2585 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2586 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2587 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2589 return ValuesIn(array);
2594 void operator=(
const ValueArray48& other);
2646 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2647 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2648 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2649 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2650 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2651 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2652 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2653 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2654 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2655 typename T46,
typename T47,
typename T48,
typename T49>
2656 class ValueArray49 {
2658 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2659 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2660 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2661 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2662 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2663 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2664 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2665 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2666 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2667 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2668 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2669 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2670 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2671 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2673 template <
typename T>
2674 operator ParamGenerator<T>()
const {
2675 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2676 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2677 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2678 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2680 return ValuesIn(array);
2685 void operator=(
const ValueArray49& other);
2738 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2739 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2740 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2741 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2742 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2743 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2744 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2745 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2746 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2747 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
2748 class ValueArray50 {
2750 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2751 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2752 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2753 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2754 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2755 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
2756 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2757 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2758 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2759 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2760 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2761 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2762 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2763 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
2765 template <
typename T>
2766 operator ParamGenerator<T>()
const {
2767 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2768 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2769 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2770 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2772 return ValuesIn(array);
2777 void operator=(
const ValueArray50& other);
2831 # if GTEST_HAS_COMBINE 2837 template <
typename T1,
typename T2>
2838 class CartesianProductGenerator2
2839 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
2841 typedef ::std::tr1::tuple<T1, T2> ParamType;
2843 CartesianProductGenerator2(
const ParamGenerator<T1>& g1,
2844 const ParamGenerator<T2>& g2)
2845 : g1_(g1), g2_(g2) {}
2846 virtual ~CartesianProductGenerator2() {}
2848 virtual ParamIteratorInterface<ParamType>* Begin()
const {
2849 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
2851 virtual ParamIteratorInterface<ParamType>*
End()
const {
2852 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
2856 class Iterator :
public ParamIteratorInterface<ParamType> {
2858 Iterator(
const ParamGeneratorInterface<ParamType>* base,
2859 const ParamGenerator<T1>& g1,
2860 const typename ParamGenerator<T1>::iterator& current1,
2861 const ParamGenerator<T2>& g2,
2862 const typename ParamGenerator<T2>::iterator& current2)
2864 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
2865 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
2866 ComputeCurrentValue();
2868 virtual ~Iterator() {}
2870 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
2875 virtual void Advance() {
2878 if (current2_ == end2_) {
2879 current2_ = begin2_;
2882 ComputeCurrentValue();
2884 virtual ParamIteratorInterface<ParamType>* Clone()
const {
2885 return new Iterator(*
this);
2887 virtual const ParamType* Current()
const {
return ¤t_value_; }
2888 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
2892 <<
"The program attempted to compare iterators " 2893 <<
"from different generators." << std::endl;
2894 const Iterator* typed_other =
2895 CheckedDowncastToActualType<const Iterator>(&other);
2899 return (AtEnd() && typed_other->AtEnd()) ||
2901 current1_ == typed_other->current1_ &&
2902 current2_ == typed_other->current2_);
2906 Iterator(
const Iterator& other)
2907 : base_(other.base_),
2908 begin1_(other.begin1_),
2910 current1_(other.current1_),
2911 begin2_(other.begin2_),
2913 current2_(other.current2_) {
2914 ComputeCurrentValue();
2917 void ComputeCurrentValue() {
2919 current_value_ = ParamType(*current1_, *current2_);
2921 bool AtEnd()
const {
2925 current1_ == end1_ ||
2930 void operator=(
const Iterator& other);
2932 const ParamGeneratorInterface<ParamType>*
const base_;
2935 const typename ParamGenerator<T1>::iterator begin1_;
2936 const typename ParamGenerator<T1>::iterator end1_;
2937 typename ParamGenerator<T1>::iterator current1_;
2938 const typename ParamGenerator<T2>::iterator begin2_;
2939 const typename ParamGenerator<T2>::iterator end2_;
2940 typename ParamGenerator<T2>::iterator current2_;
2941 ParamType current_value_;
2945 void operator=(
const CartesianProductGenerator2& other);
2947 const ParamGenerator<T1> g1_;
2948 const ParamGenerator<T2> g2_;
2952 template <
typename T1,
typename T2,
typename T3>
2953 class CartesianProductGenerator3
2954 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
2956 typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
2958 CartesianProductGenerator3(
const ParamGenerator<T1>& g1,
2959 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3)
2960 : g1_(g1), g2_(g2), g3_(g3) {}
2961 virtual ~CartesianProductGenerator3() {}
2963 virtual ParamIteratorInterface<ParamType>* Begin()
const {
2964 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
2967 virtual ParamIteratorInterface<ParamType>*
End()
const {
2968 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
2972 class Iterator :
public ParamIteratorInterface<ParamType> {
2974 Iterator(
const ParamGeneratorInterface<ParamType>* base,
2975 const ParamGenerator<T1>& g1,
2976 const typename ParamGenerator<T1>::iterator& current1,
2977 const ParamGenerator<T2>& g2,
2978 const typename ParamGenerator<T2>::iterator& current2,
2979 const ParamGenerator<T3>& g3,
2980 const typename ParamGenerator<T3>::iterator& current3)
2982 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
2983 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
2984 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
2985 ComputeCurrentValue();
2987 virtual ~Iterator() {}
2989 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
2994 virtual void Advance() {
2997 if (current3_ == end3_) {
2998 current3_ = begin3_;
3001 if (current2_ == end2_) {
3002 current2_ = begin2_;
3005 ComputeCurrentValue();
3007 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3008 return new Iterator(*
this);
3010 virtual const ParamType* Current()
const {
return ¤t_value_; }
3011 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3015 <<
"The program attempted to compare iterators " 3016 <<
"from different generators." << std::endl;
3017 const Iterator* typed_other =
3018 CheckedDowncastToActualType<const Iterator>(&other);
3022 return (AtEnd() && typed_other->AtEnd()) ||
3024 current1_ == typed_other->current1_ &&
3025 current2_ == typed_other->current2_ &&
3026 current3_ == typed_other->current3_);
3030 Iterator(
const Iterator& other)
3031 : base_(other.base_),
3032 begin1_(other.begin1_),
3034 current1_(other.current1_),
3035 begin2_(other.begin2_),
3037 current2_(other.current2_),
3038 begin3_(other.begin3_),
3040 current3_(other.current3_) {
3041 ComputeCurrentValue();
3044 void ComputeCurrentValue() {
3046 current_value_ = ParamType(*current1_, *current2_, *current3_);
3048 bool AtEnd()
const {
3052 current1_ == end1_ ||
3053 current2_ == end2_ ||
3058 void operator=(
const Iterator& other);
3060 const ParamGeneratorInterface<ParamType>*
const base_;
3063 const typename ParamGenerator<T1>::iterator begin1_;
3064 const typename ParamGenerator<T1>::iterator end1_;
3065 typename ParamGenerator<T1>::iterator current1_;
3066 const typename ParamGenerator<T2>::iterator begin2_;
3067 const typename ParamGenerator<T2>::iterator end2_;
3068 typename ParamGenerator<T2>::iterator current2_;
3069 const typename ParamGenerator<T3>::iterator begin3_;
3070 const typename ParamGenerator<T3>::iterator end3_;
3071 typename ParamGenerator<T3>::iterator current3_;
3072 ParamType current_value_;
3076 void operator=(
const CartesianProductGenerator3& other);
3078 const ParamGenerator<T1> g1_;
3079 const ParamGenerator<T2> g2_;
3080 const ParamGenerator<T3> g3_;
3084 template <
typename T1,
typename T2,
typename T3,
typename T4>
3085 class CartesianProductGenerator4
3086 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3088 typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
3090 CartesianProductGenerator4(
const ParamGenerator<T1>& g1,
3091 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3092 const ParamGenerator<T4>& g4)
3093 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3094 virtual ~CartesianProductGenerator4() {}
3096 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3097 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3098 g3_.begin(), g4_, g4_.begin());
3100 virtual ParamIteratorInterface<ParamType>*
End()
const {
3101 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3106 class Iterator :
public ParamIteratorInterface<ParamType> {
3108 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3109 const ParamGenerator<T1>& g1,
3110 const typename ParamGenerator<T1>::iterator& current1,
3111 const ParamGenerator<T2>& g2,
3112 const typename ParamGenerator<T2>::iterator& current2,
3113 const ParamGenerator<T3>& g3,
3114 const typename ParamGenerator<T3>::iterator& current3,
3115 const ParamGenerator<T4>& g4,
3116 const typename ParamGenerator<T4>::iterator& current4)
3118 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3119 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3120 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3121 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3122 ComputeCurrentValue();
3124 virtual ~Iterator() {}
3126 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3131 virtual void Advance() {
3134 if (current4_ == end4_) {
3135 current4_ = begin4_;
3138 if (current3_ == end3_) {
3139 current3_ = begin3_;
3142 if (current2_ == end2_) {
3143 current2_ = begin2_;
3146 ComputeCurrentValue();
3148 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3149 return new Iterator(*
this);
3151 virtual const ParamType* Current()
const {
return ¤t_value_; }
3152 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3156 <<
"The program attempted to compare iterators " 3157 <<
"from different generators." << std::endl;
3158 const Iterator* typed_other =
3159 CheckedDowncastToActualType<const Iterator>(&other);
3163 return (AtEnd() && typed_other->AtEnd()) ||
3165 current1_ == typed_other->current1_ &&
3166 current2_ == typed_other->current2_ &&
3167 current3_ == typed_other->current3_ &&
3168 current4_ == typed_other->current4_);
3172 Iterator(
const Iterator& other)
3173 : base_(other.base_),
3174 begin1_(other.begin1_),
3176 current1_(other.current1_),
3177 begin2_(other.begin2_),
3179 current2_(other.current2_),
3180 begin3_(other.begin3_),
3182 current3_(other.current3_),
3183 begin4_(other.begin4_),
3185 current4_(other.current4_) {
3186 ComputeCurrentValue();
3189 void ComputeCurrentValue() {
3191 current_value_ = ParamType(*current1_, *current2_, *current3_,
3194 bool AtEnd()
const {
3198 current1_ == end1_ ||
3199 current2_ == end2_ ||
3200 current3_ == end3_ ||
3205 void operator=(
const Iterator& other);
3207 const ParamGeneratorInterface<ParamType>*
const base_;
3210 const typename ParamGenerator<T1>::iterator begin1_;
3211 const typename ParamGenerator<T1>::iterator end1_;
3212 typename ParamGenerator<T1>::iterator current1_;
3213 const typename ParamGenerator<T2>::iterator begin2_;
3214 const typename ParamGenerator<T2>::iterator end2_;
3215 typename ParamGenerator<T2>::iterator current2_;
3216 const typename ParamGenerator<T3>::iterator begin3_;
3217 const typename ParamGenerator<T3>::iterator end3_;
3218 typename ParamGenerator<T3>::iterator current3_;
3219 const typename ParamGenerator<T4>::iterator begin4_;
3220 const typename ParamGenerator<T4>::iterator end4_;
3221 typename ParamGenerator<T4>::iterator current4_;
3222 ParamType current_value_;
3226 void operator=(
const CartesianProductGenerator4& other);
3228 const ParamGenerator<T1> g1_;
3229 const ParamGenerator<T2> g2_;
3230 const ParamGenerator<T3> g3_;
3231 const ParamGenerator<T4> g4_;
3235 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
3236 class CartesianProductGenerator5
3237 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
3239 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
3241 CartesianProductGenerator5(
const ParamGenerator<T1>& g1,
3242 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3243 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5)
3244 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3245 virtual ~CartesianProductGenerator5() {}
3247 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3248 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3249 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3251 virtual ParamIteratorInterface<ParamType>*
End()
const {
3252 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3253 g4_, g4_.end(), g5_, g5_.end());
3257 class Iterator :
public ParamIteratorInterface<ParamType> {
3259 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3260 const ParamGenerator<T1>& g1,
3261 const typename ParamGenerator<T1>::iterator& current1,
3262 const ParamGenerator<T2>& g2,
3263 const typename ParamGenerator<T2>::iterator& current2,
3264 const ParamGenerator<T3>& g3,
3265 const typename ParamGenerator<T3>::iterator& current3,
3266 const ParamGenerator<T4>& g4,
3267 const typename ParamGenerator<T4>::iterator& current4,
3268 const ParamGenerator<T5>& g5,
3269 const typename ParamGenerator<T5>::iterator& current5)
3271 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3272 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3273 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3274 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3275 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
3276 ComputeCurrentValue();
3278 virtual ~Iterator() {}
3280 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3285 virtual void Advance() {
3288 if (current5_ == end5_) {
3289 current5_ = begin5_;
3292 if (current4_ == end4_) {
3293 current4_ = begin4_;
3296 if (current3_ == end3_) {
3297 current3_ = begin3_;
3300 if (current2_ == end2_) {
3301 current2_ = begin2_;
3304 ComputeCurrentValue();
3306 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3307 return new Iterator(*
this);
3309 virtual const ParamType* Current()
const {
return ¤t_value_; }
3310 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3314 <<
"The program attempted to compare iterators " 3315 <<
"from different generators." << std::endl;
3316 const Iterator* typed_other =
3317 CheckedDowncastToActualType<const Iterator>(&other);
3321 return (AtEnd() && typed_other->AtEnd()) ||
3323 current1_ == typed_other->current1_ &&
3324 current2_ == typed_other->current2_ &&
3325 current3_ == typed_other->current3_ &&
3326 current4_ == typed_other->current4_ &&
3327 current5_ == typed_other->current5_);
3331 Iterator(
const Iterator& other)
3332 : base_(other.base_),
3333 begin1_(other.begin1_),
3335 current1_(other.current1_),
3336 begin2_(other.begin2_),
3338 current2_(other.current2_),
3339 begin3_(other.begin3_),
3341 current3_(other.current3_),
3342 begin4_(other.begin4_),
3344 current4_(other.current4_),
3345 begin5_(other.begin5_),
3347 current5_(other.current5_) {
3348 ComputeCurrentValue();
3351 void ComputeCurrentValue() {
3353 current_value_ = ParamType(*current1_, *current2_, *current3_,
3354 *current4_, *current5_);
3356 bool AtEnd()
const {
3360 current1_ == end1_ ||
3361 current2_ == end2_ ||
3362 current3_ == end3_ ||
3363 current4_ == end4_ ||
3368 void operator=(
const Iterator& other);
3370 const ParamGeneratorInterface<ParamType>*
const base_;
3373 const typename ParamGenerator<T1>::iterator begin1_;
3374 const typename ParamGenerator<T1>::iterator end1_;
3375 typename ParamGenerator<T1>::iterator current1_;
3376 const typename ParamGenerator<T2>::iterator begin2_;
3377 const typename ParamGenerator<T2>::iterator end2_;
3378 typename ParamGenerator<T2>::iterator current2_;
3379 const typename ParamGenerator<T3>::iterator begin3_;
3380 const typename ParamGenerator<T3>::iterator end3_;
3381 typename ParamGenerator<T3>::iterator current3_;
3382 const typename ParamGenerator<T4>::iterator begin4_;
3383 const typename ParamGenerator<T4>::iterator end4_;
3384 typename ParamGenerator<T4>::iterator current4_;
3385 const typename ParamGenerator<T5>::iterator begin5_;
3386 const typename ParamGenerator<T5>::iterator end5_;
3387 typename ParamGenerator<T5>::iterator current5_;
3388 ParamType current_value_;
3392 void operator=(
const CartesianProductGenerator5& other);
3394 const ParamGenerator<T1> g1_;
3395 const ParamGenerator<T2> g2_;
3396 const ParamGenerator<T3> g3_;
3397 const ParamGenerator<T4> g4_;
3398 const ParamGenerator<T5> g5_;
3402 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3404 class CartesianProductGenerator6
3405 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3408 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3410 CartesianProductGenerator6(
const ParamGenerator<T1>& g1,
3411 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3412 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3413 const ParamGenerator<T6>& g6)
3414 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3415 virtual ~CartesianProductGenerator6() {}
3417 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3418 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3419 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3421 virtual ParamIteratorInterface<ParamType>*
End()
const {
3422 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3423 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3427 class Iterator :
public ParamIteratorInterface<ParamType> {
3429 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3430 const ParamGenerator<T1>& g1,
3431 const typename ParamGenerator<T1>::iterator& current1,
3432 const ParamGenerator<T2>& g2,
3433 const typename ParamGenerator<T2>::iterator& current2,
3434 const ParamGenerator<T3>& g3,
3435 const typename ParamGenerator<T3>::iterator& current3,
3436 const ParamGenerator<T4>& g4,
3437 const typename ParamGenerator<T4>::iterator& current4,
3438 const ParamGenerator<T5>& g5,
3439 const typename ParamGenerator<T5>::iterator& current5,
3440 const ParamGenerator<T6>& g6,
3441 const typename ParamGenerator<T6>::iterator& current6)
3443 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3444 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3445 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3446 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3447 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3448 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
3449 ComputeCurrentValue();
3451 virtual ~Iterator() {}
3453 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3458 virtual void Advance() {
3461 if (current6_ == end6_) {
3462 current6_ = begin6_;
3465 if (current5_ == end5_) {
3466 current5_ = begin5_;
3469 if (current4_ == end4_) {
3470 current4_ = begin4_;
3473 if (current3_ == end3_) {
3474 current3_ = begin3_;
3477 if (current2_ == end2_) {
3478 current2_ = begin2_;
3481 ComputeCurrentValue();
3483 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3484 return new Iterator(*
this);
3486 virtual const ParamType* Current()
const {
return ¤t_value_; }
3487 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3491 <<
"The program attempted to compare iterators " 3492 <<
"from different generators." << std::endl;
3493 const Iterator* typed_other =
3494 CheckedDowncastToActualType<const Iterator>(&other);
3498 return (AtEnd() && typed_other->AtEnd()) ||
3500 current1_ == typed_other->current1_ &&
3501 current2_ == typed_other->current2_ &&
3502 current3_ == typed_other->current3_ &&
3503 current4_ == typed_other->current4_ &&
3504 current5_ == typed_other->current5_ &&
3505 current6_ == typed_other->current6_);
3509 Iterator(
const Iterator& other)
3510 : base_(other.base_),
3511 begin1_(other.begin1_),
3513 current1_(other.current1_),
3514 begin2_(other.begin2_),
3516 current2_(other.current2_),
3517 begin3_(other.begin3_),
3519 current3_(other.current3_),
3520 begin4_(other.begin4_),
3522 current4_(other.current4_),
3523 begin5_(other.begin5_),
3525 current5_(other.current5_),
3526 begin6_(other.begin6_),
3528 current6_(other.current6_) {
3529 ComputeCurrentValue();
3532 void ComputeCurrentValue() {
3534 current_value_ = ParamType(*current1_, *current2_, *current3_,
3535 *current4_, *current5_, *current6_);
3537 bool AtEnd()
const {
3541 current1_ == end1_ ||
3542 current2_ == end2_ ||
3543 current3_ == end3_ ||
3544 current4_ == end4_ ||
3545 current5_ == end5_ ||
3550 void operator=(
const Iterator& other);
3552 const ParamGeneratorInterface<ParamType>*
const base_;
3555 const typename ParamGenerator<T1>::iterator begin1_;
3556 const typename ParamGenerator<T1>::iterator end1_;
3557 typename ParamGenerator<T1>::iterator current1_;
3558 const typename ParamGenerator<T2>::iterator begin2_;
3559 const typename ParamGenerator<T2>::iterator end2_;
3560 typename ParamGenerator<T2>::iterator current2_;
3561 const typename ParamGenerator<T3>::iterator begin3_;
3562 const typename ParamGenerator<T3>::iterator end3_;
3563 typename ParamGenerator<T3>::iterator current3_;
3564 const typename ParamGenerator<T4>::iterator begin4_;
3565 const typename ParamGenerator<T4>::iterator end4_;
3566 typename ParamGenerator<T4>::iterator current4_;
3567 const typename ParamGenerator<T5>::iterator begin5_;
3568 const typename ParamGenerator<T5>::iterator end5_;
3569 typename ParamGenerator<T5>::iterator current5_;
3570 const typename ParamGenerator<T6>::iterator begin6_;
3571 const typename ParamGenerator<T6>::iterator end6_;
3572 typename ParamGenerator<T6>::iterator current6_;
3573 ParamType current_value_;
3577 void operator=(
const CartesianProductGenerator6& other);
3579 const ParamGenerator<T1> g1_;
3580 const ParamGenerator<T2> g2_;
3581 const ParamGenerator<T3> g3_;
3582 const ParamGenerator<T4> g4_;
3583 const ParamGenerator<T5> g5_;
3584 const ParamGenerator<T6> g6_;
3588 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3589 typename T6,
typename T7>
3590 class CartesianProductGenerator7
3591 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3594 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3596 CartesianProductGenerator7(
const ParamGenerator<T1>& g1,
3597 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3598 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3599 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7)
3600 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3601 virtual ~CartesianProductGenerator7() {}
3603 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3604 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3605 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3608 virtual ParamIteratorInterface<ParamType>*
End()
const {
3609 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3610 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3614 class Iterator :
public ParamIteratorInterface<ParamType> {
3616 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3617 const ParamGenerator<T1>& g1,
3618 const typename ParamGenerator<T1>::iterator& current1,
3619 const ParamGenerator<T2>& g2,
3620 const typename ParamGenerator<T2>::iterator& current2,
3621 const ParamGenerator<T3>& g3,
3622 const typename ParamGenerator<T3>::iterator& current3,
3623 const ParamGenerator<T4>& g4,
3624 const typename ParamGenerator<T4>::iterator& current4,
3625 const ParamGenerator<T5>& g5,
3626 const typename ParamGenerator<T5>::iterator& current5,
3627 const ParamGenerator<T6>& g6,
3628 const typename ParamGenerator<T6>::iterator& current6,
3629 const ParamGenerator<T7>& g7,
3630 const typename ParamGenerator<T7>::iterator& current7)
3632 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3633 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3634 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3635 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3636 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3637 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3638 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
3639 ComputeCurrentValue();
3641 virtual ~Iterator() {}
3643 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3648 virtual void Advance() {
3651 if (current7_ == end7_) {
3652 current7_ = begin7_;
3655 if (current6_ == end6_) {
3656 current6_ = begin6_;
3659 if (current5_ == end5_) {
3660 current5_ = begin5_;
3663 if (current4_ == end4_) {
3664 current4_ = begin4_;
3667 if (current3_ == end3_) {
3668 current3_ = begin3_;
3671 if (current2_ == end2_) {
3672 current2_ = begin2_;
3675 ComputeCurrentValue();
3677 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3678 return new Iterator(*
this);
3680 virtual const ParamType* Current()
const {
return ¤t_value_; }
3681 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3685 <<
"The program attempted to compare iterators " 3686 <<
"from different generators." << std::endl;
3687 const Iterator* typed_other =
3688 CheckedDowncastToActualType<const Iterator>(&other);
3692 return (AtEnd() && typed_other->AtEnd()) ||
3694 current1_ == typed_other->current1_ &&
3695 current2_ == typed_other->current2_ &&
3696 current3_ == typed_other->current3_ &&
3697 current4_ == typed_other->current4_ &&
3698 current5_ == typed_other->current5_ &&
3699 current6_ == typed_other->current6_ &&
3700 current7_ == typed_other->current7_);
3704 Iterator(
const Iterator& other)
3705 : base_(other.base_),
3706 begin1_(other.begin1_),
3708 current1_(other.current1_),
3709 begin2_(other.begin2_),
3711 current2_(other.current2_),
3712 begin3_(other.begin3_),
3714 current3_(other.current3_),
3715 begin4_(other.begin4_),
3717 current4_(other.current4_),
3718 begin5_(other.begin5_),
3720 current5_(other.current5_),
3721 begin6_(other.begin6_),
3723 current6_(other.current6_),
3724 begin7_(other.begin7_),
3726 current7_(other.current7_) {
3727 ComputeCurrentValue();
3730 void ComputeCurrentValue() {
3732 current_value_ = ParamType(*current1_, *current2_, *current3_,
3733 *current4_, *current5_, *current6_, *current7_);
3735 bool AtEnd()
const {
3739 current1_ == end1_ ||
3740 current2_ == end2_ ||
3741 current3_ == end3_ ||
3742 current4_ == end4_ ||
3743 current5_ == end5_ ||
3744 current6_ == end6_ ||
3749 void operator=(
const Iterator& other);
3751 const ParamGeneratorInterface<ParamType>*
const base_;
3754 const typename ParamGenerator<T1>::iterator begin1_;
3755 const typename ParamGenerator<T1>::iterator end1_;
3756 typename ParamGenerator<T1>::iterator current1_;
3757 const typename ParamGenerator<T2>::iterator begin2_;
3758 const typename ParamGenerator<T2>::iterator end2_;
3759 typename ParamGenerator<T2>::iterator current2_;
3760 const typename ParamGenerator<T3>::iterator begin3_;
3761 const typename ParamGenerator<T3>::iterator end3_;
3762 typename ParamGenerator<T3>::iterator current3_;
3763 const typename ParamGenerator<T4>::iterator begin4_;
3764 const typename ParamGenerator<T4>::iterator end4_;
3765 typename ParamGenerator<T4>::iterator current4_;
3766 const typename ParamGenerator<T5>::iterator begin5_;
3767 const typename ParamGenerator<T5>::iterator end5_;
3768 typename ParamGenerator<T5>::iterator current5_;
3769 const typename ParamGenerator<T6>::iterator begin6_;
3770 const typename ParamGenerator<T6>::iterator end6_;
3771 typename ParamGenerator<T6>::iterator current6_;
3772 const typename ParamGenerator<T7>::iterator begin7_;
3773 const typename ParamGenerator<T7>::iterator end7_;
3774 typename ParamGenerator<T7>::iterator current7_;
3775 ParamType current_value_;
3779 void operator=(
const CartesianProductGenerator7& other);
3781 const ParamGenerator<T1> g1_;
3782 const ParamGenerator<T2> g2_;
3783 const ParamGenerator<T3> g3_;
3784 const ParamGenerator<T4> g4_;
3785 const ParamGenerator<T5> g5_;
3786 const ParamGenerator<T6> g6_;
3787 const ParamGenerator<T7> g7_;
3791 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3792 typename T6,
typename T7,
typename T8>
3793 class CartesianProductGenerator8
3794 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3797 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
3799 CartesianProductGenerator8(
const ParamGenerator<T1>& g1,
3800 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3801 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3802 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
3803 const ParamGenerator<T8>& g8)
3804 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
3806 virtual ~CartesianProductGenerator8() {}
3808 virtual ParamIteratorInterface<ParamType>* Begin()
const {
3809 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3810 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3811 g7_.begin(), g8_, g8_.begin());
3813 virtual ParamIteratorInterface<ParamType>*
End()
const {
3814 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3815 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
3820 class Iterator :
public ParamIteratorInterface<ParamType> {
3822 Iterator(
const ParamGeneratorInterface<ParamType>* base,
3823 const ParamGenerator<T1>& g1,
3824 const typename ParamGenerator<T1>::iterator& current1,
3825 const ParamGenerator<T2>& g2,
3826 const typename ParamGenerator<T2>::iterator& current2,
3827 const ParamGenerator<T3>& g3,
3828 const typename ParamGenerator<T3>::iterator& current3,
3829 const ParamGenerator<T4>& g4,
3830 const typename ParamGenerator<T4>::iterator& current4,
3831 const ParamGenerator<T5>& g5,
3832 const typename ParamGenerator<T5>::iterator& current5,
3833 const ParamGenerator<T6>& g6,
3834 const typename ParamGenerator<T6>::iterator& current6,
3835 const ParamGenerator<T7>& g7,
3836 const typename ParamGenerator<T7>::iterator& current7,
3837 const ParamGenerator<T8>& g8,
3838 const typename ParamGenerator<T8>::iterator& current8)
3840 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3841 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3842 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3843 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3844 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3845 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3846 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
3847 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
3848 ComputeCurrentValue();
3850 virtual ~Iterator() {}
3852 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3857 virtual void Advance() {
3860 if (current8_ == end8_) {
3861 current8_ = begin8_;
3864 if (current7_ == end7_) {
3865 current7_ = begin7_;
3868 if (current6_ == end6_) {
3869 current6_ = begin6_;
3872 if (current5_ == end5_) {
3873 current5_ = begin5_;
3876 if (current4_ == end4_) {
3877 current4_ = begin4_;
3880 if (current3_ == end3_) {
3881 current3_ = begin3_;
3884 if (current2_ == end2_) {
3885 current2_ = begin2_;
3888 ComputeCurrentValue();
3890 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3891 return new Iterator(*
this);
3893 virtual const ParamType* Current()
const {
return ¤t_value_; }
3894 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3898 <<
"The program attempted to compare iterators " 3899 <<
"from different generators." << std::endl;
3900 const Iterator* typed_other =
3901 CheckedDowncastToActualType<const Iterator>(&other);
3905 return (AtEnd() && typed_other->AtEnd()) ||
3907 current1_ == typed_other->current1_ &&
3908 current2_ == typed_other->current2_ &&
3909 current3_ == typed_other->current3_ &&
3910 current4_ == typed_other->current4_ &&
3911 current5_ == typed_other->current5_ &&
3912 current6_ == typed_other->current6_ &&
3913 current7_ == typed_other->current7_ &&
3914 current8_ == typed_other->current8_);
3918 Iterator(
const Iterator& other)
3919 : base_(other.base_),
3920 begin1_(other.begin1_),
3922 current1_(other.current1_),
3923 begin2_(other.begin2_),
3925 current2_(other.current2_),
3926 begin3_(other.begin3_),
3928 current3_(other.current3_),
3929 begin4_(other.begin4_),
3931 current4_(other.current4_),
3932 begin5_(other.begin5_),
3934 current5_(other.current5_),
3935 begin6_(other.begin6_),
3937 current6_(other.current6_),
3938 begin7_(other.begin7_),
3940 current7_(other.current7_),
3941 begin8_(other.begin8_),
3943 current8_(other.current8_) {
3944 ComputeCurrentValue();
3947 void ComputeCurrentValue() {
3949 current_value_ = ParamType(*current1_, *current2_, *current3_,
3950 *current4_, *current5_, *current6_, *current7_, *current8_);
3952 bool AtEnd()
const {
3956 current1_ == end1_ ||
3957 current2_ == end2_ ||
3958 current3_ == end3_ ||
3959 current4_ == end4_ ||
3960 current5_ == end5_ ||
3961 current6_ == end6_ ||
3962 current7_ == end7_ ||
3967 void operator=(
const Iterator& other);
3969 const ParamGeneratorInterface<ParamType>*
const base_;
3972 const typename ParamGenerator<T1>::iterator begin1_;
3973 const typename ParamGenerator<T1>::iterator end1_;
3974 typename ParamGenerator<T1>::iterator current1_;
3975 const typename ParamGenerator<T2>::iterator begin2_;
3976 const typename ParamGenerator<T2>::iterator end2_;
3977 typename ParamGenerator<T2>::iterator current2_;
3978 const typename ParamGenerator<T3>::iterator begin3_;
3979 const typename ParamGenerator<T3>::iterator end3_;
3980 typename ParamGenerator<T3>::iterator current3_;
3981 const typename ParamGenerator<T4>::iterator begin4_;
3982 const typename ParamGenerator<T4>::iterator end4_;
3983 typename ParamGenerator<T4>::iterator current4_;
3984 const typename ParamGenerator<T5>::iterator begin5_;
3985 const typename ParamGenerator<T5>::iterator end5_;
3986 typename ParamGenerator<T5>::iterator current5_;
3987 const typename ParamGenerator<T6>::iterator begin6_;
3988 const typename ParamGenerator<T6>::iterator end6_;
3989 typename ParamGenerator<T6>::iterator current6_;
3990 const typename ParamGenerator<T7>::iterator begin7_;
3991 const typename ParamGenerator<T7>::iterator end7_;
3992 typename ParamGenerator<T7>::iterator current7_;
3993 const typename ParamGenerator<T8>::iterator begin8_;
3994 const typename ParamGenerator<T8>::iterator end8_;
3995 typename ParamGenerator<T8>::iterator current8_;
3996 ParamType current_value_;
4000 void operator=(
const CartesianProductGenerator8& other);
4002 const ParamGenerator<T1> g1_;
4003 const ParamGenerator<T2> g2_;
4004 const ParamGenerator<T3> g3_;
4005 const ParamGenerator<T4> g4_;
4006 const ParamGenerator<T5> g5_;
4007 const ParamGenerator<T6> g6_;
4008 const ParamGenerator<T7> g7_;
4009 const ParamGenerator<T8> g8_;
4013 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4014 typename T6,
typename T7,
typename T8,
typename T9>
4015 class CartesianProductGenerator9
4016 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4019 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4021 CartesianProductGenerator9(
const ParamGenerator<T1>& g1,
4022 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4023 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4024 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4025 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9)
4026 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4028 virtual ~CartesianProductGenerator9() {}
4030 virtual ParamIteratorInterface<ParamType>* Begin()
const {
4031 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4032 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4033 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4035 virtual ParamIteratorInterface<ParamType>*
End()
const {
4036 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4037 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4038 g8_.end(), g9_, g9_.end());
4042 class Iterator :
public ParamIteratorInterface<ParamType> {
4044 Iterator(
const ParamGeneratorInterface<ParamType>* base,
4045 const ParamGenerator<T1>& g1,
4046 const typename ParamGenerator<T1>::iterator& current1,
4047 const ParamGenerator<T2>& g2,
4048 const typename ParamGenerator<T2>::iterator& current2,
4049 const ParamGenerator<T3>& g3,
4050 const typename ParamGenerator<T3>::iterator& current3,
4051 const ParamGenerator<T4>& g4,
4052 const typename ParamGenerator<T4>::iterator& current4,
4053 const ParamGenerator<T5>& g5,
4054 const typename ParamGenerator<T5>::iterator& current5,
4055 const ParamGenerator<T6>& g6,
4056 const typename ParamGenerator<T6>::iterator& current6,
4057 const ParamGenerator<T7>& g7,
4058 const typename ParamGenerator<T7>::iterator& current7,
4059 const ParamGenerator<T8>& g8,
4060 const typename ParamGenerator<T8>::iterator& current8,
4061 const ParamGenerator<T9>& g9,
4062 const typename ParamGenerator<T9>::iterator& current9)
4064 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4065 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4066 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4067 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4068 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4069 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4070 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4071 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4072 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4073 ComputeCurrentValue();
4075 virtual ~Iterator() {}
4077 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4082 virtual void Advance() {
4085 if (current9_ == end9_) {
4086 current9_ = begin9_;
4089 if (current8_ == end8_) {
4090 current8_ = begin8_;
4093 if (current7_ == end7_) {
4094 current7_ = begin7_;
4097 if (current6_ == end6_) {
4098 current6_ = begin6_;
4101 if (current5_ == end5_) {
4102 current5_ = begin5_;
4105 if (current4_ == end4_) {
4106 current4_ = begin4_;
4109 if (current3_ == end3_) {
4110 current3_ = begin3_;
4113 if (current2_ == end2_) {
4114 current2_ = begin2_;
4117 ComputeCurrentValue();
4119 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4120 return new Iterator(*
this);
4122 virtual const ParamType* Current()
const {
return ¤t_value_; }
4123 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4127 <<
"The program attempted to compare iterators " 4128 <<
"from different generators." << std::endl;
4129 const Iterator* typed_other =
4130 CheckedDowncastToActualType<const Iterator>(&other);
4134 return (AtEnd() && typed_other->AtEnd()) ||
4136 current1_ == typed_other->current1_ &&
4137 current2_ == typed_other->current2_ &&
4138 current3_ == typed_other->current3_ &&
4139 current4_ == typed_other->current4_ &&
4140 current5_ == typed_other->current5_ &&
4141 current6_ == typed_other->current6_ &&
4142 current7_ == typed_other->current7_ &&
4143 current8_ == typed_other->current8_ &&
4144 current9_ == typed_other->current9_);
4148 Iterator(
const Iterator& other)
4149 : base_(other.base_),
4150 begin1_(other.begin1_),
4152 current1_(other.current1_),
4153 begin2_(other.begin2_),
4155 current2_(other.current2_),
4156 begin3_(other.begin3_),
4158 current3_(other.current3_),
4159 begin4_(other.begin4_),
4161 current4_(other.current4_),
4162 begin5_(other.begin5_),
4164 current5_(other.current5_),
4165 begin6_(other.begin6_),
4167 current6_(other.current6_),
4168 begin7_(other.begin7_),
4170 current7_(other.current7_),
4171 begin8_(other.begin8_),
4173 current8_(other.current8_),
4174 begin9_(other.begin9_),
4176 current9_(other.current9_) {
4177 ComputeCurrentValue();
4180 void ComputeCurrentValue() {
4182 current_value_ = ParamType(*current1_, *current2_, *current3_,
4183 *current4_, *current5_, *current6_, *current7_, *current8_,
4186 bool AtEnd()
const {
4190 current1_ == end1_ ||
4191 current2_ == end2_ ||
4192 current3_ == end3_ ||
4193 current4_ == end4_ ||
4194 current5_ == end5_ ||
4195 current6_ == end6_ ||
4196 current7_ == end7_ ||
4197 current8_ == end8_ ||
4202 void operator=(
const Iterator& other);
4204 const ParamGeneratorInterface<ParamType>*
const base_;
4207 const typename ParamGenerator<T1>::iterator begin1_;
4208 const typename ParamGenerator<T1>::iterator end1_;
4209 typename ParamGenerator<T1>::iterator current1_;
4210 const typename ParamGenerator<T2>::iterator begin2_;
4211 const typename ParamGenerator<T2>::iterator end2_;
4212 typename ParamGenerator<T2>::iterator current2_;
4213 const typename ParamGenerator<T3>::iterator begin3_;
4214 const typename ParamGenerator<T3>::iterator end3_;
4215 typename ParamGenerator<T3>::iterator current3_;
4216 const typename ParamGenerator<T4>::iterator begin4_;
4217 const typename ParamGenerator<T4>::iterator end4_;
4218 typename ParamGenerator<T4>::iterator current4_;
4219 const typename ParamGenerator<T5>::iterator begin5_;
4220 const typename ParamGenerator<T5>::iterator end5_;
4221 typename ParamGenerator<T5>::iterator current5_;
4222 const typename ParamGenerator<T6>::iterator begin6_;
4223 const typename ParamGenerator<T6>::iterator end6_;
4224 typename ParamGenerator<T6>::iterator current6_;
4225 const typename ParamGenerator<T7>::iterator begin7_;
4226 const typename ParamGenerator<T7>::iterator end7_;
4227 typename ParamGenerator<T7>::iterator current7_;
4228 const typename ParamGenerator<T8>::iterator begin8_;
4229 const typename ParamGenerator<T8>::iterator end8_;
4230 typename ParamGenerator<T8>::iterator current8_;
4231 const typename ParamGenerator<T9>::iterator begin9_;
4232 const typename ParamGenerator<T9>::iterator end9_;
4233 typename ParamGenerator<T9>::iterator current9_;
4234 ParamType current_value_;
4238 void operator=(
const CartesianProductGenerator9& other);
4240 const ParamGenerator<T1> g1_;
4241 const ParamGenerator<T2> g2_;
4242 const ParamGenerator<T3> g3_;
4243 const ParamGenerator<T4> g4_;
4244 const ParamGenerator<T5> g5_;
4245 const ParamGenerator<T6> g6_;
4246 const ParamGenerator<T7> g7_;
4247 const ParamGenerator<T8> g8_;
4248 const ParamGenerator<T9> g9_;
4252 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4253 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4254 class CartesianProductGenerator10
4255 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4256 T7, T8, T9, T10> > {
4258 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4260 CartesianProductGenerator10(
const ParamGenerator<T1>& g1,
4261 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4262 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4263 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4264 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9,
4265 const ParamGenerator<T10>& g10)
4266 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4267 g9_(g9), g10_(g10) {}
4268 virtual ~CartesianProductGenerator10() {}
4270 virtual ParamIteratorInterface<ParamType>* Begin()
const {
4271 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4272 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4273 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4275 virtual ParamIteratorInterface<ParamType>*
End()
const {
4276 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4277 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4278 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4282 class Iterator :
public ParamIteratorInterface<ParamType> {
4284 Iterator(
const ParamGeneratorInterface<ParamType>* base,
4285 const ParamGenerator<T1>& g1,
4286 const typename ParamGenerator<T1>::iterator& current1,
4287 const ParamGenerator<T2>& g2,
4288 const typename ParamGenerator<T2>::iterator& current2,
4289 const ParamGenerator<T3>& g3,
4290 const typename ParamGenerator<T3>::iterator& current3,
4291 const ParamGenerator<T4>& g4,
4292 const typename ParamGenerator<T4>::iterator& current4,
4293 const ParamGenerator<T5>& g5,
4294 const typename ParamGenerator<T5>::iterator& current5,
4295 const ParamGenerator<T6>& g6,
4296 const typename ParamGenerator<T6>::iterator& current6,
4297 const ParamGenerator<T7>& g7,
4298 const typename ParamGenerator<T7>::iterator& current7,
4299 const ParamGenerator<T8>& g8,
4300 const typename ParamGenerator<T8>::iterator& current8,
4301 const ParamGenerator<T9>& g9,
4302 const typename ParamGenerator<T9>::iterator& current9,
4303 const ParamGenerator<T10>& g10,
4304 const typename ParamGenerator<T10>::iterator& current10)
4306 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4307 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4308 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4309 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4310 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4311 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4312 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4313 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4314 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4315 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
4316 ComputeCurrentValue();
4318 virtual ~Iterator() {}
4320 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4325 virtual void Advance() {
4328 if (current10_ == end10_) {
4329 current10_ = begin10_;
4332 if (current9_ == end9_) {
4333 current9_ = begin9_;
4336 if (current8_ == end8_) {
4337 current8_ = begin8_;
4340 if (current7_ == end7_) {
4341 current7_ = begin7_;
4344 if (current6_ == end6_) {
4345 current6_ = begin6_;
4348 if (current5_ == end5_) {
4349 current5_ = begin5_;
4352 if (current4_ == end4_) {
4353 current4_ = begin4_;
4356 if (current3_ == end3_) {
4357 current3_ = begin3_;
4360 if (current2_ == end2_) {
4361 current2_ = begin2_;
4364 ComputeCurrentValue();
4366 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4367 return new Iterator(*
this);
4369 virtual const ParamType* Current()
const {
return ¤t_value_; }
4370 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4374 <<
"The program attempted to compare iterators " 4375 <<
"from different generators." << std::endl;
4376 const Iterator* typed_other =
4377 CheckedDowncastToActualType<const Iterator>(&other);
4381 return (AtEnd() && typed_other->AtEnd()) ||
4383 current1_ == typed_other->current1_ &&
4384 current2_ == typed_other->current2_ &&
4385 current3_ == typed_other->current3_ &&
4386 current4_ == typed_other->current4_ &&
4387 current5_ == typed_other->current5_ &&
4388 current6_ == typed_other->current6_ &&
4389 current7_ == typed_other->current7_ &&
4390 current8_ == typed_other->current8_ &&
4391 current9_ == typed_other->current9_ &&
4392 current10_ == typed_other->current10_);
4396 Iterator(
const Iterator& other)
4397 : base_(other.base_),
4398 begin1_(other.begin1_),
4400 current1_(other.current1_),
4401 begin2_(other.begin2_),
4403 current2_(other.current2_),
4404 begin3_(other.begin3_),
4406 current3_(other.current3_),
4407 begin4_(other.begin4_),
4409 current4_(other.current4_),
4410 begin5_(other.begin5_),
4412 current5_(other.current5_),
4413 begin6_(other.begin6_),
4415 current6_(other.current6_),
4416 begin7_(other.begin7_),
4418 current7_(other.current7_),
4419 begin8_(other.begin8_),
4421 current8_(other.current8_),
4422 begin9_(other.begin9_),
4424 current9_(other.current9_),
4425 begin10_(other.begin10_),
4426 end10_(other.end10_),
4427 current10_(other.current10_) {
4428 ComputeCurrentValue();
4431 void ComputeCurrentValue() {
4433 current_value_ = ParamType(*current1_, *current2_, *current3_,
4434 *current4_, *current5_, *current6_, *current7_, *current8_,
4435 *current9_, *current10_);
4437 bool AtEnd()
const {
4441 current1_ == end1_ ||
4442 current2_ == end2_ ||
4443 current3_ == end3_ ||
4444 current4_ == end4_ ||
4445 current5_ == end5_ ||
4446 current6_ == end6_ ||
4447 current7_ == end7_ ||
4448 current8_ == end8_ ||
4449 current9_ == end9_ ||
4450 current10_ == end10_;
4454 void operator=(
const Iterator& other);
4456 const ParamGeneratorInterface<ParamType>*
const base_;
4459 const typename ParamGenerator<T1>::iterator begin1_;
4460 const typename ParamGenerator<T1>::iterator end1_;
4461 typename ParamGenerator<T1>::iterator current1_;
4462 const typename ParamGenerator<T2>::iterator begin2_;
4463 const typename ParamGenerator<T2>::iterator end2_;
4464 typename ParamGenerator<T2>::iterator current2_;
4465 const typename ParamGenerator<T3>::iterator begin3_;
4466 const typename ParamGenerator<T3>::iterator end3_;
4467 typename ParamGenerator<T3>::iterator current3_;
4468 const typename ParamGenerator<T4>::iterator begin4_;
4469 const typename ParamGenerator<T4>::iterator end4_;
4470 typename ParamGenerator<T4>::iterator current4_;
4471 const typename ParamGenerator<T5>::iterator begin5_;
4472 const typename ParamGenerator<T5>::iterator end5_;
4473 typename ParamGenerator<T5>::iterator current5_;
4474 const typename ParamGenerator<T6>::iterator begin6_;
4475 const typename ParamGenerator<T6>::iterator end6_;
4476 typename ParamGenerator<T6>::iterator current6_;
4477 const typename ParamGenerator<T7>::iterator begin7_;
4478 const typename ParamGenerator<T7>::iterator end7_;
4479 typename ParamGenerator<T7>::iterator current7_;
4480 const typename ParamGenerator<T8>::iterator begin8_;
4481 const typename ParamGenerator<T8>::iterator end8_;
4482 typename ParamGenerator<T8>::iterator current8_;
4483 const typename ParamGenerator<T9>::iterator begin9_;
4484 const typename ParamGenerator<T9>::iterator end9_;
4485 typename ParamGenerator<T9>::iterator current9_;
4486 const typename ParamGenerator<T10>::iterator begin10_;
4487 const typename ParamGenerator<T10>::iterator end10_;
4488 typename ParamGenerator<T10>::iterator current10_;
4489 ParamType current_value_;
4493 void operator=(
const CartesianProductGenerator10& other);
4495 const ParamGenerator<T1> g1_;
4496 const ParamGenerator<T2> g2_;
4497 const ParamGenerator<T3> g3_;
4498 const ParamGenerator<T4> g4_;
4499 const ParamGenerator<T5> g5_;
4500 const ParamGenerator<T6> g6_;
4501 const ParamGenerator<T7> g7_;
4502 const ParamGenerator<T8> g8_;
4503 const ParamGenerator<T9> g9_;
4504 const ParamGenerator<T10> g10_;
4514 template <
class Generator1,
class Generator2>
4515 class CartesianProductHolder2 {
4517 CartesianProductHolder2(
const Generator1& g1,
const Generator2& g2)
4518 : g1_(g1), g2_(g2) {}
4519 template <
typename T1,
typename T2>
4520 operator ParamGenerator< ::std::tr1::tuple<T1, T2> >()
const {
4521 return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
4522 new CartesianProductGenerator2<T1, T2>(
4523 static_cast<ParamGenerator<T1>
>(g1_),
4524 static_cast<ParamGenerator<T2>
>(g2_)));
4529 void operator=(
const CartesianProductHolder2& other);
4531 const Generator1 g1_;
4532 const Generator2 g2_;
4535 template <
class Generator1,
class Generator2,
class Generator3>
4536 class CartesianProductHolder3 {
4538 CartesianProductHolder3(
const Generator1& g1,
const Generator2& g2,
4539 const Generator3& g3)
4540 : g1_(g1), g2_(g2), g3_(g3) {}
4541 template <
typename T1,
typename T2,
typename T3>
4542 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >()
const {
4543 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
4544 new CartesianProductGenerator3<T1, T2, T3>(
4545 static_cast<ParamGenerator<T1>
>(g1_),
4546 static_cast<ParamGenerator<T2>
>(g2_),
4547 static_cast<ParamGenerator<T3>
>(g3_)));
4552 void operator=(
const CartesianProductHolder3& other);
4554 const Generator1 g1_;
4555 const Generator2 g2_;
4556 const Generator3 g3_;
4559 template <
class Generator1,
class Generator2,
class Generator3,
4561 class CartesianProductHolder4 {
4563 CartesianProductHolder4(
const Generator1& g1,
const Generator2& g2,
4564 const Generator3& g3,
const Generator4& g4)
4565 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4566 template <
typename T1,
typename T2,
typename T3,
typename T4>
4567 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >()
const {
4568 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
4569 new CartesianProductGenerator4<T1, T2, T3, T4>(
4570 static_cast<ParamGenerator<T1>
>(g1_),
4571 static_cast<ParamGenerator<T2>
>(g2_),
4572 static_cast<ParamGenerator<T3>
>(g3_),
4573 static_cast<ParamGenerator<T4>
>(g4_)));
4578 void operator=(
const CartesianProductHolder4& other);
4580 const Generator1 g1_;
4581 const Generator2 g2_;
4582 const Generator3 g3_;
4583 const Generator4 g4_;
4586 template <
class Generator1,
class Generator2,
class Generator3,
4587 class Generator4,
class Generator5>
4588 class CartesianProductHolder5 {
4590 CartesianProductHolder5(
const Generator1& g1,
const Generator2& g2,
4591 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
4592 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4593 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4594 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >()
const {
4595 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
4596 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4597 static_cast<ParamGenerator<T1>
>(g1_),
4598 static_cast<ParamGenerator<T2>
>(g2_),
4599 static_cast<ParamGenerator<T3>
>(g3_),
4600 static_cast<ParamGenerator<T4>
>(g4_),
4601 static_cast<ParamGenerator<T5>
>(g5_)));
4606 void operator=(
const CartesianProductHolder5& other);
4608 const Generator1 g1_;
4609 const Generator2 g2_;
4610 const Generator3 g3_;
4611 const Generator4 g4_;
4612 const Generator5 g5_;
4615 template <
class Generator1,
class Generator2,
class Generator3,
4616 class Generator4,
class Generator5,
class Generator6>
4617 class CartesianProductHolder6 {
4619 CartesianProductHolder6(
const Generator1& g1,
const Generator2& g2,
4620 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4621 const Generator6& g6)
4622 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4623 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4625 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >()
const {
4626 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
4627 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4628 static_cast<ParamGenerator<T1>
>(g1_),
4629 static_cast<ParamGenerator<T2>
>(g2_),
4630 static_cast<ParamGenerator<T3>
>(g3_),
4631 static_cast<ParamGenerator<T4>
>(g4_),
4632 static_cast<ParamGenerator<T5>
>(g5_),
4633 static_cast<ParamGenerator<T6>
>(g6_)));
4638 void operator=(
const CartesianProductHolder6& other);
4640 const Generator1 g1_;
4641 const Generator2 g2_;
4642 const Generator3 g3_;
4643 const Generator4 g4_;
4644 const Generator5 g5_;
4645 const Generator6 g6_;
4648 template <
class Generator1,
class Generator2,
class Generator3,
4649 class Generator4,
class Generator5,
class Generator6,
class Generator7>
4650 class CartesianProductHolder7 {
4652 CartesianProductHolder7(
const Generator1& g1,
const Generator2& g2,
4653 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4654 const Generator6& g6,
const Generator7& g7)
4655 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4656 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4657 typename T6,
typename T7>
4660 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4661 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4662 static_cast<ParamGenerator<T1>
>(g1_),
4663 static_cast<ParamGenerator<T2>
>(g2_),
4664 static_cast<ParamGenerator<T3>
>(g3_),
4665 static_cast<ParamGenerator<T4>
>(g4_),
4666 static_cast<ParamGenerator<T5>
>(g5_),
4667 static_cast<ParamGenerator<T6>
>(g6_),
4668 static_cast<ParamGenerator<T7>
>(g7_)));
4673 void operator=(
const CartesianProductHolder7& other);
4675 const Generator1 g1_;
4676 const Generator2 g2_;
4677 const Generator3 g3_;
4678 const Generator4 g4_;
4679 const Generator5 g5_;
4680 const Generator6 g6_;
4681 const Generator7 g7_;
4684 template <
class Generator1,
class Generator2,
class Generator3,
4685 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4687 class CartesianProductHolder8 {
4689 CartesianProductHolder8(
const Generator1& g1,
const Generator2& g2,
4690 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4691 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
4692 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4694 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4695 typename T6,
typename T7,
typename T8>
4698 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
4699 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
4700 static_cast<ParamGenerator<T1>
>(g1_),
4701 static_cast<ParamGenerator<T2>
>(g2_),
4702 static_cast<ParamGenerator<T3>
>(g3_),
4703 static_cast<ParamGenerator<T4>
>(g4_),
4704 static_cast<ParamGenerator<T5>
>(g5_),
4705 static_cast<ParamGenerator<T6>
>(g6_),
4706 static_cast<ParamGenerator<T7>
>(g7_),
4707 static_cast<ParamGenerator<T8>
>(g8_)));
4712 void operator=(
const CartesianProductHolder8& other);
4714 const Generator1 g1_;
4715 const Generator2 g2_;
4716 const Generator3 g3_;
4717 const Generator4 g4_;
4718 const Generator5 g5_;
4719 const Generator6 g6_;
4720 const Generator7 g7_;
4721 const Generator8 g8_;
4724 template <
class Generator1,
class Generator2,
class Generator3,
4725 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4726 class Generator8,
class Generator9>
4727 class CartesianProductHolder9 {
4729 CartesianProductHolder9(
const Generator1& g1,
const Generator2& g2,
4730 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4731 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
4732 const Generator9& g9)
4733 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4735 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4736 typename T6,
typename T7,
typename T8,
typename T9>
4741 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
4742 static_cast<ParamGenerator<T1>
>(g1_),
4743 static_cast<ParamGenerator<T2>
>(g2_),
4744 static_cast<ParamGenerator<T3>
>(g3_),
4745 static_cast<ParamGenerator<T4>
>(g4_),
4746 static_cast<ParamGenerator<T5>
>(g5_),
4747 static_cast<ParamGenerator<T6>
>(g6_),
4748 static_cast<ParamGenerator<T7>
>(g7_),
4749 static_cast<ParamGenerator<T8>
>(g8_),
4750 static_cast<ParamGenerator<T9>
>(g9_)));
4755 void operator=(
const CartesianProductHolder9& other);
4757 const Generator1 g1_;
4758 const Generator2 g2_;
4759 const Generator3 g3_;
4760 const Generator4 g4_;
4761 const Generator5 g5_;
4762 const Generator6 g6_;
4763 const Generator7 g7_;
4764 const Generator8 g8_;
4765 const Generator9 g9_;
4768 template <
class Generator1,
class Generator2,
class Generator3,
4769 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4770 class Generator8,
class Generator9,
class Generator10>
4771 class CartesianProductHolder10 {
4773 CartesianProductHolder10(
const Generator1& g1,
const Generator2& g2,
4774 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4775 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
4776 const Generator9& g9,
const Generator10& g10)
4777 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4778 g9_(g9), g10_(g10) {}
4779 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4780 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4782 T9, T10> >()
const {
4785 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
4787 static_cast<ParamGenerator<T1>
>(g1_),
4788 static_cast<ParamGenerator<T2>
>(g2_),
4789 static_cast<ParamGenerator<T3>
>(g3_),
4790 static_cast<ParamGenerator<T4>
>(g4_),
4791 static_cast<ParamGenerator<T5>
>(g5_),
4792 static_cast<ParamGenerator<T6>
>(g6_),
4793 static_cast<ParamGenerator<T7>
>(g7_),
4794 static_cast<ParamGenerator<T8>
>(g8_),
4795 static_cast<ParamGenerator<T9>
>(g9_),
4796 static_cast<ParamGenerator<T10>
>(g10_)));
4801 void operator=(
const CartesianProductHolder10& other);
4803 const Generator1 g1_;
4804 const Generator2 g2_;
4805 const Generator3 g3_;
4806 const Generator4 g4_;
4807 const Generator5 g5_;
4808 const Generator6 g6_;
4809 const Generator7 g7_;
4810 const Generator8 g8_;
4811 const Generator9 g9_;
4812 const Generator10 g10_;
4815 # endif // GTEST_HAS_COMBINE 4820 #endif // GTEST_HAS_PARAM_TEST 4822 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ Definition: gmock-actions.h:49
Definition: InputPrereqs.h:71
Definition: InputPrereqs.h:107
Definition: gtest-tuple.h:109
#define GTEST_CHECK_(condition)
Definition: gtest-port.h:944
Definition: InputPrereqs.h:183
Definition: InputPrereqs.h:78