44 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 45 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 53 #if GTEST_HAS_PARAM_TEST 59 template <
typename ForwardIterator>
60 internal::ParamGenerator<
61 typename ::std::iterator_traits<ForwardIterator>::value_type> ValuesIn(
62 ForwardIterator begin, ForwardIterator
end);
64 template <
typename T,
size_t N>
65 internal::ParamGenerator<T> ValuesIn(
const T (&
array)[
N]);
67 template <
class Container>
68 internal::ParamGenerator<typename Container::value_type> ValuesIn(
69 const Container& container);
74 template <
typename T1>
77 explicit ValueArray1(T1
v1) : v1_(v1) {}
80 operator ParamGenerator<T>()
const {
return ValuesIn(&v1_, &v1_ + 1); }
84 void operator=(
const ValueArray1& other);
89 template <
typename T1,
typename T2>
92 ValueArray2(T1
v1, T2
v2) : v1_(v1), v2_(v2) {}
95 operator ParamGenerator<T>()
const {
96 const T array[] = {v1_, v2_};
97 return ValuesIn(array);
102 void operator=(
const ValueArray2& other);
108 template <
typename T1,
typename T2,
typename T3>
111 ValueArray3(T1
v1, T2
v2, T3
v3) : v1_(v1), v2_(v2), v3_(v3) {}
113 template <
typename T>
114 operator ParamGenerator<T>()
const {
115 const T array[] = {v1_, v2_, v3_};
116 return ValuesIn(array);
121 void operator=(
const ValueArray3& other);
128 template <
typename T1,
typename T2,
typename T3,
typename T4>
131 ValueArray4(T1
v1, T2
v2, T3
v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
134 template <
typename T>
135 operator ParamGenerator<T>()
const {
136 const T array[] = {v1_, v2_, v3_, v4_};
137 return ValuesIn(array);
142 void operator=(
const ValueArray4& other);
150 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
153 ValueArray5(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
156 template <
typename T>
157 operator ParamGenerator<T>()
const {
158 const T array[] = {v1_, v2_, v3_, v4_, v5_};
159 return ValuesIn(array);
164 void operator=(
const ValueArray5& other);
173 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
177 ValueArray6(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
178 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
180 template <
typename T>
181 operator ParamGenerator<T>()
const {
182 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
183 return ValuesIn(array);
188 void operator=(
const ValueArray6& other);
198 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
199 typename T6,
typename T7>
202 ValueArray7(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
203 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
205 template <
typename T>
206 operator ParamGenerator<T>()
const {
207 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
208 return ValuesIn(array);
213 void operator=(
const ValueArray7& other);
224 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
225 typename T6,
typename T7,
typename T8>
228 ValueArray8(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7,
229 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
232 template <
typename T>
233 operator ParamGenerator<T>()
const {
234 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
235 return ValuesIn(array);
240 void operator=(
const ValueArray8& other);
252 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
253 typename T6,
typename T7,
typename T8,
typename T9>
256 ValueArray9(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
257 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
260 template <
typename T>
261 operator ParamGenerator<T>()
const {
262 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
263 return ValuesIn(array);
268 void operator=(
const ValueArray9& other);
281 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
282 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
285 ValueArray10(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
286 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
287 v8_(v8), v9_(v9), v10_(v10) {}
289 template <
typename T>
290 operator ParamGenerator<T>()
const {
291 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
292 return ValuesIn(array);
297 void operator=(
const ValueArray10& other);
311 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
312 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
316 ValueArray11(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
317 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
318 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
320 template <
typename T>
321 operator ParamGenerator<T>()
const {
322 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
323 return ValuesIn(array);
328 void operator=(
const ValueArray11& other);
343 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
344 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
345 typename T11,
typename T12>
348 ValueArray12(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
349 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
350 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
352 template <
typename T>
353 operator ParamGenerator<T>()
const {
354 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
356 return ValuesIn(array);
361 void operator=(
const ValueArray12& other);
377 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
378 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
379 typename T11,
typename T12,
typename T13>
382 ValueArray13(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
383 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
384 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
385 v12_(v12), v13_(v13) {}
387 template <
typename T>
388 operator ParamGenerator<T>()
const {
389 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
391 return ValuesIn(array);
396 void operator=(
const ValueArray13& other);
413 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
414 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
415 typename T11,
typename T12,
typename T13,
typename T14>
418 ValueArray14(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
419 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
420 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
421 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
423 template <
typename T>
424 operator ParamGenerator<T>()
const {
425 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
427 return ValuesIn(array);
432 void operator=(
const ValueArray14& other);
450 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
451 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
452 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
455 ValueArray15(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
456 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
457 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
458 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
460 template <
typename T>
461 operator ParamGenerator<T>()
const {
462 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
463 v12_, v13_, v14_, v15_};
464 return ValuesIn(array);
469 void operator=(
const ValueArray15& other);
488 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
489 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
490 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
494 ValueArray16(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
495 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
496 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
497 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
500 template <
typename T>
501 operator ParamGenerator<T>()
const {
502 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
503 v12_, v13_, v14_, v15_, v16_};
504 return ValuesIn(array);
509 void operator=(
const ValueArray16& other);
529 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
530 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
531 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
532 typename T16,
typename T17>
535 ValueArray17(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
536 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
537 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
538 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
539 v15_(v15), v16_(v16), v17_(v17) {}
541 template <
typename T>
542 operator ParamGenerator<T>()
const {
543 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
544 v12_, v13_, v14_, v15_, v16_, v17_};
545 return ValuesIn(array);
550 void operator=(
const ValueArray17& other);
571 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
572 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
573 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
574 typename T16,
typename T17,
typename T18>
577 ValueArray18(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
578 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
579 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
580 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
581 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
583 template <
typename T>
584 operator ParamGenerator<T>()
const {
585 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
586 v12_, v13_, v14_, v15_, v16_, v17_, v18_};
587 return ValuesIn(array);
592 void operator=(
const ValueArray18& other);
614 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
615 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
616 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
617 typename T16,
typename T17,
typename T18,
typename T19>
620 ValueArray19(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
621 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
622 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
623 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
624 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
626 template <
typename T>
627 operator ParamGenerator<T>()
const {
628 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
629 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
630 return ValuesIn(array);
635 void operator=(
const ValueArray19& other);
658 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
659 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
660 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
661 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
664 ValueArray20(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
665 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
666 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
667 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
668 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
669 v19_(v19), v20_(v20) {}
671 template <
typename T>
672 operator ParamGenerator<T>()
const {
673 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
674 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
675 return ValuesIn(array);
680 void operator=(
const ValueArray20& other);
704 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
705 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
706 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
707 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
711 ValueArray21(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
712 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
713 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
714 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
715 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
716 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
718 template <
typename T>
719 operator ParamGenerator<T>()
const {
720 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
721 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
722 return ValuesIn(array);
727 void operator=(
const ValueArray21& other);
752 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
753 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
754 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
755 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
756 typename T21,
typename T22>
759 ValueArray22(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
760 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
761 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
762 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
763 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
764 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
766 template <
typename T>
767 operator ParamGenerator<T>()
const {
768 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
769 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
770 return ValuesIn(array);
775 void operator=(
const ValueArray22& other);
801 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
802 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
803 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
804 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
805 typename T21,
typename T22,
typename T23>
808 ValueArray23(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
809 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
810 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
811 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
812 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
813 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
816 template <
typename T>
817 operator ParamGenerator<T>()
const {
818 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
819 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
821 return ValuesIn(array);
826 void operator=(
const ValueArray23& other);
853 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
854 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
855 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
856 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
857 typename T21,
typename T22,
typename T23,
typename T24>
860 ValueArray24(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
861 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
862 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
863 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
864 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
865 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
866 v22_(v22), v23_(v23), v24_(v24) {}
868 template <
typename T>
869 operator ParamGenerator<T>()
const {
870 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
871 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
873 return ValuesIn(array);
878 void operator=(
const ValueArray24& other);
906 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
907 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
908 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
909 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
910 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
913 ValueArray25(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
914 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
915 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
916 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
917 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
918 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
919 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
921 template <
typename T>
922 operator ParamGenerator<T>()
const {
923 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
924 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
926 return ValuesIn(array);
931 void operator=(
const ValueArray25& other);
960 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
961 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
962 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
963 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
964 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
968 ValueArray26(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
969 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
970 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
971 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
972 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
973 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
974 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
976 template <
typename T>
977 operator ParamGenerator<T>()
const {
978 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
979 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
981 return ValuesIn(array);
986 void operator=(
const ValueArray26& other);
1016 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1017 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1018 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1019 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1020 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1021 typename T26,
typename T27>
1022 class ValueArray27 {
1024 ValueArray27(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1025 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1026 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1027 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1028 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1029 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1030 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1031 v26_(v26), v27_(v27) {}
1033 template <
typename T>
1034 operator ParamGenerator<T>()
const {
1035 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1036 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1037 v24_, v25_, v26_, v27_};
1038 return ValuesIn(array);
1043 void operator=(
const ValueArray27& other);
1074 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1075 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1076 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1077 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1078 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1079 typename T26,
typename T27,
typename T28>
1080 class ValueArray28 {
1082 ValueArray28(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1083 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1084 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1085 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1086 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1087 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1088 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1089 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1091 template <
typename T>
1092 operator ParamGenerator<T>()
const {
1093 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1094 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1095 v24_, v25_, v26_, v27_, v28_};
1096 return ValuesIn(array);
1101 void operator=(
const ValueArray28& other);
1133 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1134 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1135 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1136 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1137 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1138 typename T26,
typename T27,
typename T28,
typename T29>
1139 class ValueArray29 {
1141 ValueArray29(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1142 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1143 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1144 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1145 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1146 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1147 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1148 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1150 template <
typename T>
1151 operator ParamGenerator<T>()
const {
1152 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1153 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1154 v24_, v25_, v26_, v27_, v28_, v29_};
1155 return ValuesIn(array);
1160 void operator=(
const ValueArray29& other);
1193 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1194 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1195 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1196 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1197 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1198 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
1199 class ValueArray30 {
1201 ValueArray30(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1202 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1203 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1204 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1205 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1206 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1207 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1208 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1209 v29_(v29), v30_(v30) {}
1211 template <
typename T>
1212 operator ParamGenerator<T>()
const {
1213 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1214 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1215 v24_, v25_, v26_, v27_, v28_, v29_, v30_};
1216 return ValuesIn(array);
1221 void operator=(
const ValueArray30& other);
1255 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1256 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1257 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1258 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1259 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1260 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1262 class ValueArray31 {
1264 ValueArray31(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1265 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1266 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1267 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1268 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1269 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1270 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1271 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1272 v29_(v29), v30_(v30), v31_(v31) {}
1274 template <
typename T>
1275 operator ParamGenerator<T>()
const {
1276 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1277 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1278 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
1279 return ValuesIn(array);
1284 void operator=(
const ValueArray31& other);
1319 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1320 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1321 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1322 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1323 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1324 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1325 typename T31,
typename T32>
1326 class ValueArray32 {
1328 ValueArray32(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1329 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1330 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1331 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1332 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1333 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1334 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1335 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1336 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1338 template <
typename T>
1339 operator ParamGenerator<T>()
const {
1340 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1341 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1342 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
1343 return ValuesIn(array);
1348 void operator=(
const ValueArray32& other);
1384 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1385 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1386 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1387 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1388 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1389 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1390 typename T31,
typename T32,
typename T33>
1391 class ValueArray33 {
1393 ValueArray33(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1394 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1395 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1396 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1397 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1398 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1399 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1400 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1401 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1404 template <
typename T>
1405 operator ParamGenerator<T>()
const {
1406 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1407 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1408 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
1409 return ValuesIn(array);
1414 void operator=(
const ValueArray33& other);
1451 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1452 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1453 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1454 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1455 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1456 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1457 typename T31,
typename T32,
typename T33,
typename T34>
1458 class ValueArray34 {
1460 ValueArray34(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1461 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1462 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1463 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1464 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1465 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1466 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1467 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1468 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1469 v33_(v33), v34_(v34) {}
1471 template <
typename T>
1472 operator ParamGenerator<T>()
const {
1473 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1474 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1475 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
1476 return ValuesIn(array);
1481 void operator=(
const ValueArray34& other);
1519 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1520 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1521 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1522 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1523 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1524 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1525 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
1526 class ValueArray35 {
1528 ValueArray35(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1529 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1530 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1531 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1532 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1533 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1534 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1535 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1536 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1537 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1539 template <
typename T>
1540 operator ParamGenerator<T>()
const {
1541 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1542 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1543 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
1545 return ValuesIn(array);
1550 void operator=(
const ValueArray35& other);
1589 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1590 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1591 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1592 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1593 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1594 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1595 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1597 class ValueArray36 {
1599 ValueArray36(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1600 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1601 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1602 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1603 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1604 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1605 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1606 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1607 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1608 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1610 template <
typename T>
1611 operator ParamGenerator<T>()
const {
1612 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1613 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1614 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1616 return ValuesIn(array);
1621 void operator=(
const ValueArray36& other);
1661 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1662 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1663 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1664 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1665 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1666 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1667 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1668 typename T36,
typename T37>
1669 class ValueArray37 {
1671 ValueArray37(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1672 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1673 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1674 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1675 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1676 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1677 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1678 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1679 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1680 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1681 v36_(v36), v37_(v37) {}
1683 template <
typename T>
1684 operator ParamGenerator<T>()
const {
1685 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1686 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1687 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1689 return ValuesIn(array);
1694 void operator=(
const ValueArray37& other);
1735 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1736 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1737 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1738 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1739 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1740 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1741 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1742 typename T36,
typename T37,
typename T38>
1743 class ValueArray38 {
1745 ValueArray38(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1746 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1747 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1748 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1749 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1750 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1751 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1752 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1753 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1754 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1755 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1757 template <
typename T>
1758 operator ParamGenerator<T>()
const {
1759 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1760 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1761 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1763 return ValuesIn(array);
1768 void operator=(
const ValueArray38& other);
1810 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1811 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1812 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1813 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1814 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1815 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1816 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1817 typename T36,
typename T37,
typename T38,
typename T39>
1818 class ValueArray39 {
1820 ValueArray39(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1821 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1822 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1823 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1824 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
1825 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1826 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1827 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1828 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1829 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1830 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
1832 template <
typename T>
1833 operator ParamGenerator<T>()
const {
1834 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1835 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1836 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1837 v36_, v37_, v38_, v39_};
1838 return ValuesIn(array);
1843 void operator=(
const ValueArray39& other);
1886 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1887 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1888 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1889 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1890 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1891 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1892 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1893 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
1894 class ValueArray40 {
1896 ValueArray40(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1897 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1898 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1899 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1900 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
1901 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1902 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1903 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1904 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1905 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
1906 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
1909 template <
typename T>
1910 operator ParamGenerator<T>()
const {
1911 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1912 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1913 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1914 v36_, v37_, v38_, v39_, v40_};
1915 return ValuesIn(array);
1920 void operator=(
const ValueArray40& other);
1964 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
1965 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
1966 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
1967 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
1968 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
1969 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
1970 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
1971 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
1973 class ValueArray41 {
1975 ValueArray41(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1976 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1977 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1978 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1979 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
1980 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1981 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1982 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1983 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1984 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1985 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
1986 v39_(v39), v40_(v40), v41_(v41) {}
1988 template <
typename T>
1989 operator ParamGenerator<T>()
const {
1990 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1991 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1992 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1993 v36_, v37_, v38_, v39_, v40_, v41_};
1994 return ValuesIn(array);
1999 void operator=(
const ValueArray41& other);
2044 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2045 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2046 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2047 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2048 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2049 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2050 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2051 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2052 typename T41,
typename T42>
2053 class ValueArray42 {
2055 ValueArray42(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2056 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2057 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2058 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2059 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2060 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2061 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2062 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2063 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2064 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2065 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2066 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2068 template <
typename T>
2069 operator ParamGenerator<T>()
const {
2070 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2071 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2072 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2073 v36_, v37_, v38_, v39_, v40_, v41_, v42_};
2074 return ValuesIn(array);
2079 void operator=(
const ValueArray42& other);
2125 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2126 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2127 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2128 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2129 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2130 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2131 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2132 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2133 typename T41,
typename T42,
typename T43>
2134 class ValueArray43 {
2136 ValueArray43(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2137 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2138 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2139 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2140 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2141 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2142 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2143 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2144 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2145 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2146 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2147 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2149 template <
typename T>
2150 operator ParamGenerator<T>()
const {
2151 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2152 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2153 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2154 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
2155 return ValuesIn(array);
2160 void operator=(
const ValueArray43& other);
2207 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2208 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2209 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2210 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2211 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2212 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2213 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2214 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2215 typename T41,
typename T42,
typename T43,
typename T44>
2216 class ValueArray44 {
2218 ValueArray44(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2219 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2220 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2221 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2222 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2223 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2224 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2225 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2226 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2227 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2228 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2229 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2230 v43_(v43), v44_(v44) {}
2232 template <
typename T>
2233 operator ParamGenerator<T>()
const {
2234 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2235 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2236 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2237 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
2238 return ValuesIn(array);
2243 void operator=(
const ValueArray44& other);
2291 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2292 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2293 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2294 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2295 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2296 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2297 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2298 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2299 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
2300 class ValueArray45 {
2302 ValueArray45(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2303 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2304 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2305 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2306 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2307 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2308 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2309 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2310 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2311 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2312 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2313 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2314 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2316 template <
typename T>
2317 operator ParamGenerator<T>()
const {
2318 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2319 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2320 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2321 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
2322 return ValuesIn(array);
2327 void operator=(
const ValueArray45& other);
2376 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2377 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2378 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2379 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2380 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2381 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2382 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2383 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2384 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2386 class ValueArray46 {
2388 ValueArray46(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2389 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2390 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2391 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2392 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2393 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2394 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2395 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2396 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2397 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2398 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2399 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2400 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2402 template <
typename T>
2403 operator ParamGenerator<T>()
const {
2404 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2405 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2406 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2407 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
2408 return ValuesIn(array);
2413 void operator=(
const ValueArray46& other);
2463 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2464 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2465 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2466 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2467 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2468 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2469 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2470 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2471 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2472 typename T46,
typename T47>
2473 class ValueArray47 {
2475 ValueArray47(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2476 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2477 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2478 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2479 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2480 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2481 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2482 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2483 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2484 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2485 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2486 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2487 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2490 template <
typename T>
2491 operator ParamGenerator<T>()
const {
2492 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2493 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2494 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2495 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
2497 return ValuesIn(array);
2502 void operator=(
const ValueArray47& other);
2553 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2554 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2555 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2556 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2557 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2558 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2559 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2560 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2561 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2562 typename T46,
typename T47,
typename T48>
2563 class ValueArray48 {
2565 ValueArray48(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2566 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2567 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2568 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2569 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2570 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2571 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2572 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2573 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2574 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2575 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2576 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2577 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2578 v46_(v46), v47_(v47), v48_(v48) {}
2580 template <
typename T>
2581 operator ParamGenerator<T>()
const {
2582 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2583 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2584 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2585 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2587 return ValuesIn(array);
2592 void operator=(
const ValueArray48& other);
2644 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2645 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2646 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2647 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2648 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2649 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2650 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2651 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2652 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2653 typename T46,
typename T47,
typename T48,
typename T49>
2654 class ValueArray49 {
2656 ValueArray49(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2657 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2658 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2659 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2660 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2661 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2662 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2663 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2664 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2665 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2666 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2667 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2668 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2669 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2671 template <
typename T>
2672 operator ParamGenerator<T>()
const {
2673 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2674 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2675 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2676 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2678 return ValuesIn(array);
2683 void operator=(
const ValueArray49& other);
2736 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
2737 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
2738 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
2739 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
2740 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
2741 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
2742 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
2743 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
2744 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
2745 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
2746 class ValueArray50 {
2748 ValueArray50(T1
v1, T2
v2, T3
v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2749 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2750 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2751 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2752 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2753 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
2754 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2755 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2756 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2757 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2758 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2759 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2760 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2761 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
2763 template <
typename T>
2764 operator ParamGenerator<T>()
const {
2765 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2766 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2767 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2768 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2770 return ValuesIn(array);
2775 void operator=(
const ValueArray50& other);
2829 #if GTEST_HAS_COMBINE 2835 template <
typename T1,
typename T2>
2836 class CartesianProductGenerator2
2837 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
2839 typedef ::std::tr1::tuple<T1, T2> ParamType;
2841 CartesianProductGenerator2(
const ParamGenerator<T1>& g1,
2842 const ParamGenerator<T2>& g2)
2843 : g1_(g1), g2_(g2) {}
2844 virtual ~CartesianProductGenerator2() {}
2846 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
2847 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
2849 virtual ParamIteratorInterface<ParamType>*
End()
const {
2850 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
2854 class Iterator :
public ParamIteratorInterface<ParamType> {
2856 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
2857 const ParamGenerator<T1>& g1,
2858 const typename ParamGenerator<T1>::iterator& current1,
2859 const ParamGenerator<T2>& g2,
2860 const typename ParamGenerator<T2>::iterator& current2)
2862 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
2863 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2) {
2864 ComputeCurrentValue();
2868 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
2873 virtual void Advance() {
2876 if (current2_ == end2_) {
2877 current2_ = begin2_;
2880 ComputeCurrentValue();
2882 virtual ParamIteratorInterface<ParamType>* Clone()
const {
2885 virtual const ParamType* Current()
const {
return ¤t_value_; }
2886 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
2890 <<
"The program attempted to compare iterators " 2891 <<
"from different generators." << std::endl;
2893 CheckedDowncastToActualType<const Iterator>(&other);
2897 return (AtEnd() && typed_other->AtEnd()) ||
2899 current1_ == typed_other->current1_ &&
2900 current2_ == typed_other->current2_);
2906 begin1_(other.begin1_),
2908 current1_(other.current1_),
2909 begin2_(other.begin2_),
2911 current2_(other.current2_) {
2912 ComputeCurrentValue();
2915 void ComputeCurrentValue() {
2917 current_value_ = ParamType(*current1_, *current2_);
2919 bool AtEnd()
const {
2923 current1_ == end1_ ||
2928 void operator=(
const Iterator& other);
2930 const ParamGeneratorInterface<ParamType>*
const base_;
2933 const typename ParamGenerator<T1>::iterator begin1_;
2934 const typename ParamGenerator<T1>::iterator end1_;
2935 typename ParamGenerator<T1>::iterator current1_;
2936 const typename ParamGenerator<T2>::iterator begin2_;
2937 const typename ParamGenerator<T2>::iterator end2_;
2938 typename ParamGenerator<T2>::iterator current2_;
2939 ParamType current_value_;
2943 void operator=(
const CartesianProductGenerator2& other);
2945 const ParamGenerator<T1> g1_;
2946 const ParamGenerator<T2> g2_;
2950 template <
typename T1,
typename T2,
typename T3>
2951 class CartesianProductGenerator3
2952 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
2954 typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
2956 CartesianProductGenerator3(
const ParamGenerator<T1>& g1,
2957 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3)
2958 : g1_(g1), g2_(g2), g3_(g3) {}
2959 virtual ~CartesianProductGenerator3() {}
2961 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
2962 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
2965 virtual ParamIteratorInterface<ParamType>*
End()
const {
2966 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
2970 class Iterator :
public ParamIteratorInterface<ParamType> {
2972 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
2973 const ParamGenerator<T1>& g1,
2974 const typename ParamGenerator<T1>::iterator& current1,
2975 const ParamGenerator<T2>& g2,
2976 const typename ParamGenerator<T2>::iterator& current2,
2977 const ParamGenerator<T3>& g3,
2978 const typename ParamGenerator<T3>::iterator& current3)
2980 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
2981 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
2982 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3) {
2983 ComputeCurrentValue();
2987 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
2992 virtual void Advance() {
2995 if (current3_ == end3_) {
2996 current3_ = begin3_;
2999 if (current2_ == end2_) {
3000 current2_ = begin2_;
3003 ComputeCurrentValue();
3005 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3008 virtual const ParamType* Current()
const {
return ¤t_value_; }
3009 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3013 <<
"The program attempted to compare iterators " 3014 <<
"from different generators." << std::endl;
3016 CheckedDowncastToActualType<const Iterator>(&other);
3020 return (AtEnd() && typed_other->AtEnd()) ||
3022 current1_ == typed_other->current1_ &&
3023 current2_ == typed_other->current2_ &&
3024 current3_ == typed_other->current3_);
3030 begin1_(other.begin1_),
3032 current1_(other.current1_),
3033 begin2_(other.begin2_),
3035 current2_(other.current2_),
3036 begin3_(other.begin3_),
3038 current3_(other.current3_) {
3039 ComputeCurrentValue();
3042 void ComputeCurrentValue() {
3044 current_value_ = ParamType(*current1_, *current2_, *current3_);
3046 bool AtEnd()
const {
3050 current1_ == end1_ ||
3051 current2_ == end2_ ||
3056 void operator=(
const Iterator& other);
3058 const ParamGeneratorInterface<ParamType>*
const base_;
3061 const typename ParamGenerator<T1>::iterator begin1_;
3062 const typename ParamGenerator<T1>::iterator end1_;
3063 typename ParamGenerator<T1>::iterator current1_;
3064 const typename ParamGenerator<T2>::iterator begin2_;
3065 const typename ParamGenerator<T2>::iterator end2_;
3066 typename ParamGenerator<T2>::iterator current2_;
3067 const typename ParamGenerator<T3>::iterator begin3_;
3068 const typename ParamGenerator<T3>::iterator end3_;
3069 typename ParamGenerator<T3>::iterator current3_;
3070 ParamType current_value_;
3074 void operator=(
const CartesianProductGenerator3& other);
3076 const ParamGenerator<T1> g1_;
3077 const ParamGenerator<T2> g2_;
3078 const ParamGenerator<T3> g3_;
3082 template <
typename T1,
typename T2,
typename T3,
typename T4>
3083 class CartesianProductGenerator4
3084 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3086 typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
3088 CartesianProductGenerator4(
const ParamGenerator<T1>& g1,
3089 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3090 const ParamGenerator<T4>& g4)
3091 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3092 virtual ~CartesianProductGenerator4() {}
3094 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
3095 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3096 g3_.begin(), g4_, g4_.begin());
3098 virtual ParamIteratorInterface<ParamType>*
End()
const {
3099 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3104 class Iterator :
public ParamIteratorInterface<ParamType> {
3106 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
3107 const ParamGenerator<T1>& g1,
3108 const typename ParamGenerator<T1>::iterator& current1,
3109 const ParamGenerator<T2>& g2,
3110 const typename ParamGenerator<T2>::iterator& current2,
3111 const ParamGenerator<T3>& g3,
3112 const typename ParamGenerator<T3>::iterator& current3,
3113 const ParamGenerator<T4>& g4,
3114 const typename ParamGenerator<T4>::iterator& current4)
3116 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
3117 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
3118 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
3119 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4) {
3120 ComputeCurrentValue();
3124 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3129 virtual void Advance() {
3132 if (current4_ == end4_) {
3133 current4_ = begin4_;
3136 if (current3_ == end3_) {
3137 current3_ = begin3_;
3140 if (current2_ == end2_) {
3141 current2_ = begin2_;
3144 ComputeCurrentValue();
3146 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3149 virtual const ParamType* Current()
const {
return ¤t_value_; }
3150 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3154 <<
"The program attempted to compare iterators " 3155 <<
"from different generators." << std::endl;
3157 CheckedDowncastToActualType<const Iterator>(&other);
3161 return (AtEnd() && typed_other->AtEnd()) ||
3163 current1_ == typed_other->current1_ &&
3164 current2_ == typed_other->current2_ &&
3165 current3_ == typed_other->current3_ &&
3166 current4_ == typed_other->current4_);
3172 begin1_(other.begin1_),
3174 current1_(other.current1_),
3175 begin2_(other.begin2_),
3177 current2_(other.current2_),
3178 begin3_(other.begin3_),
3180 current3_(other.current3_),
3181 begin4_(other.begin4_),
3183 current4_(other.current4_) {
3184 ComputeCurrentValue();
3187 void ComputeCurrentValue() {
3189 current_value_ = ParamType(*current1_, *current2_, *current3_,
3192 bool AtEnd()
const {
3196 current1_ == end1_ ||
3197 current2_ == end2_ ||
3198 current3_ == end3_ ||
3203 void operator=(
const Iterator& other);
3205 const ParamGeneratorInterface<ParamType>*
const base_;
3208 const typename ParamGenerator<T1>::iterator begin1_;
3209 const typename ParamGenerator<T1>::iterator end1_;
3210 typename ParamGenerator<T1>::iterator current1_;
3211 const typename ParamGenerator<T2>::iterator begin2_;
3212 const typename ParamGenerator<T2>::iterator end2_;
3213 typename ParamGenerator<T2>::iterator current2_;
3214 const typename ParamGenerator<T3>::iterator begin3_;
3215 const typename ParamGenerator<T3>::iterator end3_;
3216 typename ParamGenerator<T3>::iterator current3_;
3217 const typename ParamGenerator<T4>::iterator begin4_;
3218 const typename ParamGenerator<T4>::iterator end4_;
3219 typename ParamGenerator<T4>::iterator current4_;
3220 ParamType current_value_;
3224 void operator=(
const CartesianProductGenerator4& other);
3226 const ParamGenerator<T1> g1_;
3227 const ParamGenerator<T2> g2_;
3228 const ParamGenerator<T3> g3_;
3229 const ParamGenerator<T4> g4_;
3233 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
3234 class CartesianProductGenerator5
3235 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
3237 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
3239 CartesianProductGenerator5(
const ParamGenerator<T1>& g1,
3240 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3241 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5)
3242 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3243 virtual ~CartesianProductGenerator5() {}
3245 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
3246 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3247 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3249 virtual ParamIteratorInterface<ParamType>*
End()
const {
3250 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3251 g4_, g4_.end(), g5_, g5_.end());
3255 class Iterator :
public ParamIteratorInterface<ParamType> {
3257 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
3258 const ParamGenerator<T1>& g1,
3259 const typename ParamGenerator<T1>::iterator& current1,
3260 const ParamGenerator<T2>& g2,
3261 const typename ParamGenerator<T2>::iterator& current2,
3262 const ParamGenerator<T3>& g3,
3263 const typename ParamGenerator<T3>::iterator& current3,
3264 const ParamGenerator<T4>& g4,
3265 const typename ParamGenerator<T4>::iterator& current4,
3266 const ParamGenerator<T5>& g5,
3267 const typename ParamGenerator<T5>::iterator& current5)
3269 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
3270 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
3271 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
3272 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
3273 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5) {
3274 ComputeCurrentValue();
3278 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3283 virtual void Advance() {
3286 if (current5_ == end5_) {
3287 current5_ = begin5_;
3290 if (current4_ == end4_) {
3291 current4_ = begin4_;
3294 if (current3_ == end3_) {
3295 current3_ = begin3_;
3298 if (current2_ == end2_) {
3299 current2_ = begin2_;
3302 ComputeCurrentValue();
3304 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3307 virtual const ParamType* Current()
const {
return ¤t_value_; }
3308 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3312 <<
"The program attempted to compare iterators " 3313 <<
"from different generators." << std::endl;
3315 CheckedDowncastToActualType<const Iterator>(&other);
3319 return (AtEnd() && typed_other->AtEnd()) ||
3321 current1_ == typed_other->current1_ &&
3322 current2_ == typed_other->current2_ &&
3323 current3_ == typed_other->current3_ &&
3324 current4_ == typed_other->current4_ &&
3325 current5_ == typed_other->current5_);
3331 begin1_(other.begin1_),
3333 current1_(other.current1_),
3334 begin2_(other.begin2_),
3336 current2_(other.current2_),
3337 begin3_(other.begin3_),
3339 current3_(other.current3_),
3340 begin4_(other.begin4_),
3342 current4_(other.current4_),
3343 begin5_(other.begin5_),
3345 current5_(other.current5_) {
3346 ComputeCurrentValue();
3349 void ComputeCurrentValue() {
3351 current_value_ = ParamType(*current1_, *current2_, *current3_,
3352 *current4_, *current5_);
3354 bool AtEnd()
const {
3358 current1_ == end1_ ||
3359 current2_ == end2_ ||
3360 current3_ == end3_ ||
3361 current4_ == end4_ ||
3366 void operator=(
const Iterator& other);
3368 const ParamGeneratorInterface<ParamType>*
const base_;
3371 const typename ParamGenerator<T1>::iterator begin1_;
3372 const typename ParamGenerator<T1>::iterator end1_;
3373 typename ParamGenerator<T1>::iterator current1_;
3374 const typename ParamGenerator<T2>::iterator begin2_;
3375 const typename ParamGenerator<T2>::iterator end2_;
3376 typename ParamGenerator<T2>::iterator current2_;
3377 const typename ParamGenerator<T3>::iterator begin3_;
3378 const typename ParamGenerator<T3>::iterator end3_;
3379 typename ParamGenerator<T3>::iterator current3_;
3380 const typename ParamGenerator<T4>::iterator begin4_;
3381 const typename ParamGenerator<T4>::iterator end4_;
3382 typename ParamGenerator<T4>::iterator current4_;
3383 const typename ParamGenerator<T5>::iterator begin5_;
3384 const typename ParamGenerator<T5>::iterator end5_;
3385 typename ParamGenerator<T5>::iterator current5_;
3386 ParamType current_value_;
3390 void operator=(
const CartesianProductGenerator5& other);
3392 const ParamGenerator<T1> g1_;
3393 const ParamGenerator<T2> g2_;
3394 const ParamGenerator<T3> g3_;
3395 const ParamGenerator<T4> g4_;
3396 const ParamGenerator<T5> g5_;
3400 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3402 class CartesianProductGenerator6
3403 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3406 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3408 CartesianProductGenerator6(
const ParamGenerator<T1>& g1,
3409 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3410 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3411 const ParamGenerator<T6>& g6)
3412 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3413 virtual ~CartesianProductGenerator6() {}
3415 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
3416 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3417 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3419 virtual ParamIteratorInterface<ParamType>*
End()
const {
3420 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3421 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3425 class Iterator :
public ParamIteratorInterface<ParamType> {
3427 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
3428 const ParamGenerator<T1>& g1,
3429 const typename ParamGenerator<T1>::iterator& current1,
3430 const ParamGenerator<T2>& g2,
3431 const typename ParamGenerator<T2>::iterator& current2,
3432 const ParamGenerator<T3>& g3,
3433 const typename ParamGenerator<T3>::iterator& current3,
3434 const ParamGenerator<T4>& g4,
3435 const typename ParamGenerator<T4>::iterator& current4,
3436 const ParamGenerator<T5>& g5,
3437 const typename ParamGenerator<T5>::iterator& current5,
3438 const ParamGenerator<T6>& g6,
3439 const typename ParamGenerator<T6>::iterator& current6)
3441 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
3442 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
3443 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
3444 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
3445 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5),
3446 begin6_(g6.begin()), end6_(g6.
end()), current6_(current6) {
3447 ComputeCurrentValue();
3451 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3456 virtual void Advance() {
3459 if (current6_ == end6_) {
3460 current6_ = begin6_;
3463 if (current5_ == end5_) {
3464 current5_ = begin5_;
3467 if (current4_ == end4_) {
3468 current4_ = begin4_;
3471 if (current3_ == end3_) {
3472 current3_ = begin3_;
3475 if (current2_ == end2_) {
3476 current2_ = begin2_;
3479 ComputeCurrentValue();
3481 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3484 virtual const ParamType* Current()
const {
return ¤t_value_; }
3485 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3489 <<
"The program attempted to compare iterators " 3490 <<
"from different generators." << std::endl;
3492 CheckedDowncastToActualType<const Iterator>(&other);
3496 return (AtEnd() && typed_other->AtEnd()) ||
3498 current1_ == typed_other->current1_ &&
3499 current2_ == typed_other->current2_ &&
3500 current3_ == typed_other->current3_ &&
3501 current4_ == typed_other->current4_ &&
3502 current5_ == typed_other->current5_ &&
3503 current6_ == typed_other->current6_);
3509 begin1_(other.begin1_),
3511 current1_(other.current1_),
3512 begin2_(other.begin2_),
3514 current2_(other.current2_),
3515 begin3_(other.begin3_),
3517 current3_(other.current3_),
3518 begin4_(other.begin4_),
3520 current4_(other.current4_),
3521 begin5_(other.begin5_),
3523 current5_(other.current5_),
3524 begin6_(other.begin6_),
3526 current6_(other.current6_) {
3527 ComputeCurrentValue();
3530 void ComputeCurrentValue() {
3532 current_value_ = ParamType(*current1_, *current2_, *current3_,
3533 *current4_, *current5_, *current6_);
3535 bool AtEnd()
const {
3539 current1_ == end1_ ||
3540 current2_ == end2_ ||
3541 current3_ == end3_ ||
3542 current4_ == end4_ ||
3543 current5_ == end5_ ||
3548 void operator=(
const Iterator& other);
3550 const ParamGeneratorInterface<ParamType>*
const base_;
3553 const typename ParamGenerator<T1>::iterator begin1_;
3554 const typename ParamGenerator<T1>::iterator end1_;
3555 typename ParamGenerator<T1>::iterator current1_;
3556 const typename ParamGenerator<T2>::iterator begin2_;
3557 const typename ParamGenerator<T2>::iterator end2_;
3558 typename ParamGenerator<T2>::iterator current2_;
3559 const typename ParamGenerator<T3>::iterator begin3_;
3560 const typename ParamGenerator<T3>::iterator end3_;
3561 typename ParamGenerator<T3>::iterator current3_;
3562 const typename ParamGenerator<T4>::iterator begin4_;
3563 const typename ParamGenerator<T4>::iterator end4_;
3564 typename ParamGenerator<T4>::iterator current4_;
3565 const typename ParamGenerator<T5>::iterator begin5_;
3566 const typename ParamGenerator<T5>::iterator end5_;
3567 typename ParamGenerator<T5>::iterator current5_;
3568 const typename ParamGenerator<T6>::iterator begin6_;
3569 const typename ParamGenerator<T6>::iterator end6_;
3570 typename ParamGenerator<T6>::iterator current6_;
3571 ParamType current_value_;
3575 void operator=(
const CartesianProductGenerator6& other);
3577 const ParamGenerator<T1> g1_;
3578 const ParamGenerator<T2> g2_;
3579 const ParamGenerator<T3> g3_;
3580 const ParamGenerator<T4> g4_;
3581 const ParamGenerator<T5> g5_;
3582 const ParamGenerator<T6> g6_;
3586 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3587 typename T6,
typename T7>
3588 class CartesianProductGenerator7
3589 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3592 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3594 CartesianProductGenerator7(
const ParamGenerator<T1>& g1,
3595 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3596 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3597 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7)
3598 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3599 virtual ~CartesianProductGenerator7() {}
3601 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
3602 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3603 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3606 virtual ParamIteratorInterface<ParamType>*
End()
const {
3607 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3608 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3612 class Iterator :
public ParamIteratorInterface<ParamType> {
3614 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
3615 const ParamGenerator<T1>& g1,
3616 const typename ParamGenerator<T1>::iterator& current1,
3617 const ParamGenerator<T2>& g2,
3618 const typename ParamGenerator<T2>::iterator& current2,
3619 const ParamGenerator<T3>& g3,
3620 const typename ParamGenerator<T3>::iterator& current3,
3621 const ParamGenerator<T4>& g4,
3622 const typename ParamGenerator<T4>::iterator& current4,
3623 const ParamGenerator<T5>& g5,
3624 const typename ParamGenerator<T5>::iterator& current5,
3625 const ParamGenerator<T6>& g6,
3626 const typename ParamGenerator<T6>::iterator& current6,
3627 const ParamGenerator<T7>& g7,
3628 const typename ParamGenerator<T7>::iterator& current7)
3630 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
3631 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
3632 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
3633 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
3634 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5),
3635 begin6_(g6.begin()), end6_(g6.
end()), current6_(current6),
3636 begin7_(g7.begin()), end7_(g7.
end()), current7_(current7) {
3637 ComputeCurrentValue();
3641 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3646 virtual void Advance() {
3649 if (current7_ == end7_) {
3650 current7_ = begin7_;
3653 if (current6_ == end6_) {
3654 current6_ = begin6_;
3657 if (current5_ == end5_) {
3658 current5_ = begin5_;
3661 if (current4_ == end4_) {
3662 current4_ = begin4_;
3665 if (current3_ == end3_) {
3666 current3_ = begin3_;
3669 if (current2_ == end2_) {
3670 current2_ = begin2_;
3673 ComputeCurrentValue();
3675 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3678 virtual const ParamType* Current()
const {
return ¤t_value_; }
3679 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3683 <<
"The program attempted to compare iterators " 3684 <<
"from different generators." << std::endl;
3686 CheckedDowncastToActualType<const Iterator>(&other);
3690 return (AtEnd() && typed_other->AtEnd()) ||
3692 current1_ == typed_other->current1_ &&
3693 current2_ == typed_other->current2_ &&
3694 current3_ == typed_other->current3_ &&
3695 current4_ == typed_other->current4_ &&
3696 current5_ == typed_other->current5_ &&
3697 current6_ == typed_other->current6_ &&
3698 current7_ == typed_other->current7_);
3704 begin1_(other.begin1_),
3706 current1_(other.current1_),
3707 begin2_(other.begin2_),
3709 current2_(other.current2_),
3710 begin3_(other.begin3_),
3712 current3_(other.current3_),
3713 begin4_(other.begin4_),
3715 current4_(other.current4_),
3716 begin5_(other.begin5_),
3718 current5_(other.current5_),
3719 begin6_(other.begin6_),
3721 current6_(other.current6_),
3722 begin7_(other.begin7_),
3724 current7_(other.current7_) {
3725 ComputeCurrentValue();
3728 void ComputeCurrentValue() {
3730 current_value_ = ParamType(*current1_, *current2_, *current3_,
3731 *current4_, *current5_, *current6_, *current7_);
3733 bool AtEnd()
const {
3737 current1_ == end1_ ||
3738 current2_ == end2_ ||
3739 current3_ == end3_ ||
3740 current4_ == end4_ ||
3741 current5_ == end5_ ||
3742 current6_ == end6_ ||
3747 void operator=(
const Iterator& other);
3749 const ParamGeneratorInterface<ParamType>*
const base_;
3752 const typename ParamGenerator<T1>::iterator begin1_;
3753 const typename ParamGenerator<T1>::iterator end1_;
3754 typename ParamGenerator<T1>::iterator current1_;
3755 const typename ParamGenerator<T2>::iterator begin2_;
3756 const typename ParamGenerator<T2>::iterator end2_;
3757 typename ParamGenerator<T2>::iterator current2_;
3758 const typename ParamGenerator<T3>::iterator begin3_;
3759 const typename ParamGenerator<T3>::iterator end3_;
3760 typename ParamGenerator<T3>::iterator current3_;
3761 const typename ParamGenerator<T4>::iterator begin4_;
3762 const typename ParamGenerator<T4>::iterator end4_;
3763 typename ParamGenerator<T4>::iterator current4_;
3764 const typename ParamGenerator<T5>::iterator begin5_;
3765 const typename ParamGenerator<T5>::iterator end5_;
3766 typename ParamGenerator<T5>::iterator current5_;
3767 const typename ParamGenerator<T6>::iterator begin6_;
3768 const typename ParamGenerator<T6>::iterator end6_;
3769 typename ParamGenerator<T6>::iterator current6_;
3770 const typename ParamGenerator<T7>::iterator begin7_;
3771 const typename ParamGenerator<T7>::iterator end7_;
3772 typename ParamGenerator<T7>::iterator current7_;
3773 ParamType current_value_;
3777 void operator=(
const CartesianProductGenerator7& other);
3779 const ParamGenerator<T1> g1_;
3780 const ParamGenerator<T2> g2_;
3781 const ParamGenerator<T3> g3_;
3782 const ParamGenerator<T4> g4_;
3783 const ParamGenerator<T5> g5_;
3784 const ParamGenerator<T6> g6_;
3785 const ParamGenerator<T7> g7_;
3789 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3790 typename T6,
typename T7,
typename T8>
3791 class CartesianProductGenerator8
3792 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3795 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
3797 CartesianProductGenerator8(
const ParamGenerator<T1>& g1,
3798 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
3799 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
3800 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
3801 const ParamGenerator<T8>& g8)
3802 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
3804 virtual ~CartesianProductGenerator8() {}
3806 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
3807 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3808 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3809 g7_.begin(), g8_, g8_.begin());
3811 virtual ParamIteratorInterface<ParamType>*
End()
const {
3812 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3813 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
3818 class Iterator :
public ParamIteratorInterface<ParamType> {
3820 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
3821 const ParamGenerator<T1>& g1,
3822 const typename ParamGenerator<T1>::iterator& current1,
3823 const ParamGenerator<T2>& g2,
3824 const typename ParamGenerator<T2>::iterator& current2,
3825 const ParamGenerator<T3>& g3,
3826 const typename ParamGenerator<T3>::iterator& current3,
3827 const ParamGenerator<T4>& g4,
3828 const typename ParamGenerator<T4>::iterator& current4,
3829 const ParamGenerator<T5>& g5,
3830 const typename ParamGenerator<T5>::iterator& current5,
3831 const ParamGenerator<T6>& g6,
3832 const typename ParamGenerator<T6>::iterator& current6,
3833 const ParamGenerator<T7>& g7,
3834 const typename ParamGenerator<T7>::iterator& current7,
3835 const ParamGenerator<T8>& g8,
3836 const typename ParamGenerator<T8>::iterator& current8)
3838 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
3839 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
3840 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
3841 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
3842 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5),
3843 begin6_(g6.begin()), end6_(g6.
end()), current6_(current6),
3844 begin7_(g7.begin()), end7_(g7.
end()), current7_(current7),
3845 begin8_(g8.begin()), end8_(g8.
end()), current8_(current8) {
3846 ComputeCurrentValue();
3850 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
3855 virtual void Advance() {
3858 if (current8_ == end8_) {
3859 current8_ = begin8_;
3862 if (current7_ == end7_) {
3863 current7_ = begin7_;
3866 if (current6_ == end6_) {
3867 current6_ = begin6_;
3870 if (current5_ == end5_) {
3871 current5_ = begin5_;
3874 if (current4_ == end4_) {
3875 current4_ = begin4_;
3878 if (current3_ == end3_) {
3879 current3_ = begin3_;
3882 if (current2_ == end2_) {
3883 current2_ = begin2_;
3886 ComputeCurrentValue();
3888 virtual ParamIteratorInterface<ParamType>* Clone()
const {
3891 virtual const ParamType* Current()
const {
return ¤t_value_; }
3892 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
3896 <<
"The program attempted to compare iterators " 3897 <<
"from different generators." << std::endl;
3899 CheckedDowncastToActualType<const Iterator>(&other);
3903 return (AtEnd() && typed_other->AtEnd()) ||
3905 current1_ == typed_other->current1_ &&
3906 current2_ == typed_other->current2_ &&
3907 current3_ == typed_other->current3_ &&
3908 current4_ == typed_other->current4_ &&
3909 current5_ == typed_other->current5_ &&
3910 current6_ == typed_other->current6_ &&
3911 current7_ == typed_other->current7_ &&
3912 current8_ == typed_other->current8_);
3918 begin1_(other.begin1_),
3920 current1_(other.current1_),
3921 begin2_(other.begin2_),
3923 current2_(other.current2_),
3924 begin3_(other.begin3_),
3926 current3_(other.current3_),
3927 begin4_(other.begin4_),
3929 current4_(other.current4_),
3930 begin5_(other.begin5_),
3932 current5_(other.current5_),
3933 begin6_(other.begin6_),
3935 current6_(other.current6_),
3936 begin7_(other.begin7_),
3938 current7_(other.current7_),
3939 begin8_(other.begin8_),
3941 current8_(other.current8_) {
3942 ComputeCurrentValue();
3945 void ComputeCurrentValue() {
3947 current_value_ = ParamType(*current1_, *current2_, *current3_,
3948 *current4_, *current5_, *current6_, *current7_, *current8_);
3950 bool AtEnd()
const {
3954 current1_ == end1_ ||
3955 current2_ == end2_ ||
3956 current3_ == end3_ ||
3957 current4_ == end4_ ||
3958 current5_ == end5_ ||
3959 current6_ == end6_ ||
3960 current7_ == end7_ ||
3965 void operator=(
const Iterator& other);
3967 const ParamGeneratorInterface<ParamType>*
const base_;
3970 const typename ParamGenerator<T1>::iterator begin1_;
3971 const typename ParamGenerator<T1>::iterator end1_;
3972 typename ParamGenerator<T1>::iterator current1_;
3973 const typename ParamGenerator<T2>::iterator begin2_;
3974 const typename ParamGenerator<T2>::iterator end2_;
3975 typename ParamGenerator<T2>::iterator current2_;
3976 const typename ParamGenerator<T3>::iterator begin3_;
3977 const typename ParamGenerator<T3>::iterator end3_;
3978 typename ParamGenerator<T3>::iterator current3_;
3979 const typename ParamGenerator<T4>::iterator begin4_;
3980 const typename ParamGenerator<T4>::iterator end4_;
3981 typename ParamGenerator<T4>::iterator current4_;
3982 const typename ParamGenerator<T5>::iterator begin5_;
3983 const typename ParamGenerator<T5>::iterator end5_;
3984 typename ParamGenerator<T5>::iterator current5_;
3985 const typename ParamGenerator<T6>::iterator begin6_;
3986 const typename ParamGenerator<T6>::iterator end6_;
3987 typename ParamGenerator<T6>::iterator current6_;
3988 const typename ParamGenerator<T7>::iterator begin7_;
3989 const typename ParamGenerator<T7>::iterator end7_;
3990 typename ParamGenerator<T7>::iterator current7_;
3991 const typename ParamGenerator<T8>::iterator begin8_;
3992 const typename ParamGenerator<T8>::iterator end8_;
3993 typename ParamGenerator<T8>::iterator current8_;
3994 ParamType current_value_;
3998 void operator=(
const CartesianProductGenerator8& other);
4000 const ParamGenerator<T1> g1_;
4001 const ParamGenerator<T2> g2_;
4002 const ParamGenerator<T3> g3_;
4003 const ParamGenerator<T4> g4_;
4004 const ParamGenerator<T5> g5_;
4005 const ParamGenerator<T6> g6_;
4006 const ParamGenerator<T7> g7_;
4007 const ParamGenerator<T8> g8_;
4011 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4012 typename T6,
typename T7,
typename T8,
typename T9>
4013 class CartesianProductGenerator9
4014 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4017 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4019 CartesianProductGenerator9(
const ParamGenerator<T1>& g1,
4020 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4021 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4022 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4023 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9)
4024 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4026 virtual ~CartesianProductGenerator9() {}
4028 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
4029 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4030 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4031 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4033 virtual ParamIteratorInterface<ParamType>*
End()
const {
4034 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4035 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4036 g8_.end(), g9_, g9_.end());
4040 class Iterator :
public ParamIteratorInterface<ParamType> {
4042 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
4043 const ParamGenerator<T1>& g1,
4044 const typename ParamGenerator<T1>::iterator& current1,
4045 const ParamGenerator<T2>& g2,
4046 const typename ParamGenerator<T2>::iterator& current2,
4047 const ParamGenerator<T3>& g3,
4048 const typename ParamGenerator<T3>::iterator& current3,
4049 const ParamGenerator<T4>& g4,
4050 const typename ParamGenerator<T4>::iterator& current4,
4051 const ParamGenerator<T5>& g5,
4052 const typename ParamGenerator<T5>::iterator& current5,
4053 const ParamGenerator<T6>& g6,
4054 const typename ParamGenerator<T6>::iterator& current6,
4055 const ParamGenerator<T7>& g7,
4056 const typename ParamGenerator<T7>::iterator& current7,
4057 const ParamGenerator<T8>& g8,
4058 const typename ParamGenerator<T8>::iterator& current8,
4059 const ParamGenerator<T9>& g9,
4060 const typename ParamGenerator<T9>::iterator& current9)
4062 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
4063 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
4064 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
4065 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
4066 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5),
4067 begin6_(g6.begin()), end6_(g6.
end()), current6_(current6),
4068 begin7_(g7.begin()), end7_(g7.
end()), current7_(current7),
4069 begin8_(g8.begin()), end8_(g8.
end()), current8_(current8),
4070 begin9_(g9.begin()), end9_(g9.
end()), current9_(current9) {
4071 ComputeCurrentValue();
4075 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4080 virtual void Advance() {
4083 if (current9_ == end9_) {
4084 current9_ = begin9_;
4087 if (current8_ == end8_) {
4088 current8_ = begin8_;
4091 if (current7_ == end7_) {
4092 current7_ = begin7_;
4095 if (current6_ == end6_) {
4096 current6_ = begin6_;
4099 if (current5_ == end5_) {
4100 current5_ = begin5_;
4103 if (current4_ == end4_) {
4104 current4_ = begin4_;
4107 if (current3_ == end3_) {
4108 current3_ = begin3_;
4111 if (current2_ == end2_) {
4112 current2_ = begin2_;
4115 ComputeCurrentValue();
4117 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4120 virtual const ParamType* Current()
const {
return ¤t_value_; }
4121 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4125 <<
"The program attempted to compare iterators " 4126 <<
"from different generators." << std::endl;
4128 CheckedDowncastToActualType<const Iterator>(&other);
4132 return (AtEnd() && typed_other->AtEnd()) ||
4134 current1_ == typed_other->current1_ &&
4135 current2_ == typed_other->current2_ &&
4136 current3_ == typed_other->current3_ &&
4137 current4_ == typed_other->current4_ &&
4138 current5_ == typed_other->current5_ &&
4139 current6_ == typed_other->current6_ &&
4140 current7_ == typed_other->current7_ &&
4141 current8_ == typed_other->current8_ &&
4142 current9_ == typed_other->current9_);
4148 begin1_(other.begin1_),
4150 current1_(other.current1_),
4151 begin2_(other.begin2_),
4153 current2_(other.current2_),
4154 begin3_(other.begin3_),
4156 current3_(other.current3_),
4157 begin4_(other.begin4_),
4159 current4_(other.current4_),
4160 begin5_(other.begin5_),
4162 current5_(other.current5_),
4163 begin6_(other.begin6_),
4165 current6_(other.current6_),
4166 begin7_(other.begin7_),
4168 current7_(other.current7_),
4169 begin8_(other.begin8_),
4171 current8_(other.current8_),
4172 begin9_(other.begin9_),
4174 current9_(other.current9_) {
4175 ComputeCurrentValue();
4178 void ComputeCurrentValue() {
4180 current_value_ = ParamType(*current1_, *current2_, *current3_,
4181 *current4_, *current5_, *current6_, *current7_, *current8_,
4184 bool AtEnd()
const {
4188 current1_ == end1_ ||
4189 current2_ == end2_ ||
4190 current3_ == end3_ ||
4191 current4_ == end4_ ||
4192 current5_ == end5_ ||
4193 current6_ == end6_ ||
4194 current7_ == end7_ ||
4195 current8_ == end8_ ||
4200 void operator=(
const Iterator& other);
4202 const ParamGeneratorInterface<ParamType>*
const base_;
4205 const typename ParamGenerator<T1>::iterator begin1_;
4206 const typename ParamGenerator<T1>::iterator end1_;
4207 typename ParamGenerator<T1>::iterator current1_;
4208 const typename ParamGenerator<T2>::iterator begin2_;
4209 const typename ParamGenerator<T2>::iterator end2_;
4210 typename ParamGenerator<T2>::iterator current2_;
4211 const typename ParamGenerator<T3>::iterator begin3_;
4212 const typename ParamGenerator<T3>::iterator end3_;
4213 typename ParamGenerator<T3>::iterator current3_;
4214 const typename ParamGenerator<T4>::iterator begin4_;
4215 const typename ParamGenerator<T4>::iterator end4_;
4216 typename ParamGenerator<T4>::iterator current4_;
4217 const typename ParamGenerator<T5>::iterator begin5_;
4218 const typename ParamGenerator<T5>::iterator end5_;
4219 typename ParamGenerator<T5>::iterator current5_;
4220 const typename ParamGenerator<T6>::iterator begin6_;
4221 const typename ParamGenerator<T6>::iterator end6_;
4222 typename ParamGenerator<T6>::iterator current6_;
4223 const typename ParamGenerator<T7>::iterator begin7_;
4224 const typename ParamGenerator<T7>::iterator end7_;
4225 typename ParamGenerator<T7>::iterator current7_;
4226 const typename ParamGenerator<T8>::iterator begin8_;
4227 const typename ParamGenerator<T8>::iterator end8_;
4228 typename ParamGenerator<T8>::iterator current8_;
4229 const typename ParamGenerator<T9>::iterator begin9_;
4230 const typename ParamGenerator<T9>::iterator end9_;
4231 typename ParamGenerator<T9>::iterator current9_;
4232 ParamType current_value_;
4236 void operator=(
const CartesianProductGenerator9& other);
4238 const ParamGenerator<T1> g1_;
4239 const ParamGenerator<T2> g2_;
4240 const ParamGenerator<T3> g3_;
4241 const ParamGenerator<T4> g4_;
4242 const ParamGenerator<T5> g5_;
4243 const ParamGenerator<T6> g6_;
4244 const ParamGenerator<T7> g7_;
4245 const ParamGenerator<T8> g8_;
4246 const ParamGenerator<T9> g9_;
4250 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4251 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4252 class CartesianProductGenerator10
4253 :
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4254 T7, T8, T9, T10> > {
4256 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4258 CartesianProductGenerator10(
const ParamGenerator<T1>& g1,
4259 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
4260 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
4261 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
4262 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9,
4263 const ParamGenerator<T10>& g10)
4264 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4265 g9_(g9), g10_(g10) {}
4266 virtual ~CartesianProductGenerator10() {}
4268 virtual ParamIteratorInterface<ParamType>*
Begin()
const {
4269 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4270 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4271 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4273 virtual ParamIteratorInterface<ParamType>*
End()
const {
4274 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4275 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4276 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4280 class Iterator :
public ParamIteratorInterface<ParamType> {
4282 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
4283 const ParamGenerator<T1>& g1,
4284 const typename ParamGenerator<T1>::iterator& current1,
4285 const ParamGenerator<T2>& g2,
4286 const typename ParamGenerator<T2>::iterator& current2,
4287 const ParamGenerator<T3>& g3,
4288 const typename ParamGenerator<T3>::iterator& current3,
4289 const ParamGenerator<T4>& g4,
4290 const typename ParamGenerator<T4>::iterator& current4,
4291 const ParamGenerator<T5>& g5,
4292 const typename ParamGenerator<T5>::iterator& current5,
4293 const ParamGenerator<T6>& g6,
4294 const typename ParamGenerator<T6>::iterator& current6,
4295 const ParamGenerator<T7>& g7,
4296 const typename ParamGenerator<T7>::iterator& current7,
4297 const ParamGenerator<T8>& g8,
4298 const typename ParamGenerator<T8>::iterator& current8,
4299 const ParamGenerator<T9>& g9,
4300 const typename ParamGenerator<T9>::iterator& current9,
4301 const ParamGenerator<T10>& g10,
4302 const typename ParamGenerator<T10>::iterator& current10)
4304 begin1_(g1.begin()), end1_(g1.
end()), current1_(current1),
4305 begin2_(g2.begin()), end2_(g2.
end()), current2_(current2),
4306 begin3_(g3.begin()), end3_(g3.
end()), current3_(current3),
4307 begin4_(g4.begin()), end4_(g4.
end()), current4_(current4),
4308 begin5_(g5.begin()), end5_(g5.
end()), current5_(current5),
4309 begin6_(g6.begin()), end6_(g6.
end()), current6_(current6),
4310 begin7_(g7.begin()), end7_(g7.
end()), current7_(current7),
4311 begin8_(g8.begin()), end8_(g8.
end()), current8_(current8),
4312 begin9_(g9.begin()), end9_(g9.
end()), current9_(current9),
4313 begin10_(g10.begin()), end10_(g10.
end()), current10_(current10) {
4314 ComputeCurrentValue();
4318 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
4323 virtual void Advance() {
4326 if (current10_ == end10_) {
4327 current10_ = begin10_;
4330 if (current9_ == end9_) {
4331 current9_ = begin9_;
4334 if (current8_ == end8_) {
4335 current8_ = begin8_;
4338 if (current7_ == end7_) {
4339 current7_ = begin7_;
4342 if (current6_ == end6_) {
4343 current6_ = begin6_;
4346 if (current5_ == end5_) {
4347 current5_ = begin5_;
4350 if (current4_ == end4_) {
4351 current4_ = begin4_;
4354 if (current3_ == end3_) {
4355 current3_ = begin3_;
4358 if (current2_ == end2_) {
4359 current2_ = begin2_;
4362 ComputeCurrentValue();
4364 virtual ParamIteratorInterface<ParamType>* Clone()
const {
4367 virtual const ParamType* Current()
const {
return ¤t_value_; }
4368 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
4372 <<
"The program attempted to compare iterators " 4373 <<
"from different generators." << std::endl;
4375 CheckedDowncastToActualType<const Iterator>(&other);
4379 return (AtEnd() && typed_other->AtEnd()) ||
4381 current1_ == typed_other->current1_ &&
4382 current2_ == typed_other->current2_ &&
4383 current3_ == typed_other->current3_ &&
4384 current4_ == typed_other->current4_ &&
4385 current5_ == typed_other->current5_ &&
4386 current6_ == typed_other->current6_ &&
4387 current7_ == typed_other->current7_ &&
4388 current8_ == typed_other->current8_ &&
4389 current9_ == typed_other->current9_ &&
4390 current10_ == typed_other->current10_);
4396 begin1_(other.begin1_),
4398 current1_(other.current1_),
4399 begin2_(other.begin2_),
4401 current2_(other.current2_),
4402 begin3_(other.begin3_),
4404 current3_(other.current3_),
4405 begin4_(other.begin4_),
4407 current4_(other.current4_),
4408 begin5_(other.begin5_),
4410 current5_(other.current5_),
4411 begin6_(other.begin6_),
4413 current6_(other.current6_),
4414 begin7_(other.begin7_),
4416 current7_(other.current7_),
4417 begin8_(other.begin8_),
4419 current8_(other.current8_),
4420 begin9_(other.begin9_),
4422 current9_(other.current9_),
4423 begin10_(other.begin10_),
4424 end10_(other.end10_),
4425 current10_(other.current10_) {
4426 ComputeCurrentValue();
4429 void ComputeCurrentValue() {
4431 current_value_ = ParamType(*current1_, *current2_, *current3_,
4432 *current4_, *current5_, *current6_, *current7_, *current8_,
4433 *current9_, *current10_);
4435 bool AtEnd()
const {
4439 current1_ == end1_ ||
4440 current2_ == end2_ ||
4441 current3_ == end3_ ||
4442 current4_ == end4_ ||
4443 current5_ == end5_ ||
4444 current6_ == end6_ ||
4445 current7_ == end7_ ||
4446 current8_ == end8_ ||
4447 current9_ == end9_ ||
4448 current10_ == end10_;
4452 void operator=(
const Iterator& other);
4454 const ParamGeneratorInterface<ParamType>*
const base_;
4457 const typename ParamGenerator<T1>::iterator begin1_;
4458 const typename ParamGenerator<T1>::iterator end1_;
4459 typename ParamGenerator<T1>::iterator current1_;
4460 const typename ParamGenerator<T2>::iterator begin2_;
4461 const typename ParamGenerator<T2>::iterator end2_;
4462 typename ParamGenerator<T2>::iterator current2_;
4463 const typename ParamGenerator<T3>::iterator begin3_;
4464 const typename ParamGenerator<T3>::iterator end3_;
4465 typename ParamGenerator<T3>::iterator current3_;
4466 const typename ParamGenerator<T4>::iterator begin4_;
4467 const typename ParamGenerator<T4>::iterator end4_;
4468 typename ParamGenerator<T4>::iterator current4_;
4469 const typename ParamGenerator<T5>::iterator begin5_;
4470 const typename ParamGenerator<T5>::iterator end5_;
4471 typename ParamGenerator<T5>::iterator current5_;
4472 const typename ParamGenerator<T6>::iterator begin6_;
4473 const typename ParamGenerator<T6>::iterator end6_;
4474 typename ParamGenerator<T6>::iterator current6_;
4475 const typename ParamGenerator<T7>::iterator begin7_;
4476 const typename ParamGenerator<T7>::iterator end7_;
4477 typename ParamGenerator<T7>::iterator current7_;
4478 const typename ParamGenerator<T8>::iterator begin8_;
4479 const typename ParamGenerator<T8>::iterator end8_;
4480 typename ParamGenerator<T8>::iterator current8_;
4481 const typename ParamGenerator<T9>::iterator begin9_;
4482 const typename ParamGenerator<T9>::iterator end9_;
4483 typename ParamGenerator<T9>::iterator current9_;
4484 const typename ParamGenerator<T10>::iterator begin10_;
4485 const typename ParamGenerator<T10>::iterator end10_;
4486 typename ParamGenerator<T10>::iterator current10_;
4487 ParamType current_value_;
4491 void operator=(
const CartesianProductGenerator10& other);
4493 const ParamGenerator<T1> g1_;
4494 const ParamGenerator<T2> g2_;
4495 const ParamGenerator<T3> g3_;
4496 const ParamGenerator<T4> g4_;
4497 const ParamGenerator<T5> g5_;
4498 const ParamGenerator<T6> g6_;
4499 const ParamGenerator<T7> g7_;
4500 const ParamGenerator<T8> g8_;
4501 const ParamGenerator<T9> g9_;
4502 const ParamGenerator<T10> g10_;
4512 template <
class Generator1,
class Generator2>
4513 class CartesianProductHolder2 {
4515 CartesianProductHolder2(
const Generator1& g1,
const Generator2& g2)
4516 : g1_(g1), g2_(g2) {}
4517 template <
typename T1,
typename T2>
4518 operator ParamGenerator< ::std::tr1::tuple<T1, T2> >()
const {
4519 return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
4520 new CartesianProductGenerator2<T1, T2>(
4521 static_cast<ParamGenerator<T1>
>(g1_),
4522 static_cast<ParamGenerator<T2>
>(g2_)));
4527 void operator=(
const CartesianProductHolder2& other);
4529 const Generator1 g1_;
4530 const Generator2 g2_;
4533 template <
class Generator1,
class Generator2,
class Generator3>
4534 class CartesianProductHolder3 {
4536 CartesianProductHolder3(
const Generator1& g1,
const Generator2& g2,
4537 const Generator3& g3)
4538 : g1_(g1), g2_(g2), g3_(g3) {}
4539 template <
typename T1,
typename T2,
typename T3>
4540 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >()
const {
4541 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
4542 new CartesianProductGenerator3<T1, T2, T3>(
4543 static_cast<ParamGenerator<T1>
>(g1_),
4544 static_cast<ParamGenerator<T2>
>(g2_),
4545 static_cast<ParamGenerator<T3>
>(g3_)));
4550 void operator=(
const CartesianProductHolder3& other);
4552 const Generator1 g1_;
4553 const Generator2 g2_;
4554 const Generator3 g3_;
4557 template <
class Generator1,
class Generator2,
class Generator3,
4559 class CartesianProductHolder4 {
4561 CartesianProductHolder4(
const Generator1& g1,
const Generator2& g2,
4562 const Generator3& g3,
const Generator4& g4)
4563 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4564 template <
typename T1,
typename T2,
typename T3,
typename T4>
4565 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >()
const {
4566 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
4567 new CartesianProductGenerator4<T1, T2, T3, T4>(
4568 static_cast<ParamGenerator<T1>
>(g1_),
4569 static_cast<ParamGenerator<T2>
>(g2_),
4570 static_cast<ParamGenerator<T3>
>(g3_),
4571 static_cast<ParamGenerator<T4>
>(g4_)));
4576 void operator=(
const CartesianProductHolder4& other);
4578 const Generator1 g1_;
4579 const Generator2 g2_;
4580 const Generator3 g3_;
4581 const Generator4 g4_;
4584 template <
class Generator1,
class Generator2,
class Generator3,
4585 class Generator4,
class Generator5>
4586 class CartesianProductHolder5 {
4588 CartesianProductHolder5(
const Generator1& g1,
const Generator2& g2,
4589 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
4590 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4591 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4592 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >()
const {
4593 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
4594 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4595 static_cast<ParamGenerator<T1>
>(g1_),
4596 static_cast<ParamGenerator<T2>
>(g2_),
4597 static_cast<ParamGenerator<T3>
>(g3_),
4598 static_cast<ParamGenerator<T4>
>(g4_),
4599 static_cast<ParamGenerator<T5>
>(g5_)));
4604 void operator=(
const CartesianProductHolder5& other);
4606 const Generator1 g1_;
4607 const Generator2 g2_;
4608 const Generator3 g3_;
4609 const Generator4 g4_;
4610 const Generator5 g5_;
4613 template <
class Generator1,
class Generator2,
class Generator3,
4614 class Generator4,
class Generator5,
class Generator6>
4615 class CartesianProductHolder6 {
4617 CartesianProductHolder6(
const Generator1& g1,
const Generator2& g2,
4618 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4619 const Generator6& g6)
4620 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4621 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4623 operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >()
const {
4624 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
4625 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4626 static_cast<ParamGenerator<T1>
>(g1_),
4627 static_cast<ParamGenerator<T2>
>(g2_),
4628 static_cast<ParamGenerator<T3>
>(g3_),
4629 static_cast<ParamGenerator<T4>
>(g4_),
4630 static_cast<ParamGenerator<T5>
>(g5_),
4631 static_cast<ParamGenerator<T6>
>(g6_)));
4636 void operator=(
const CartesianProductHolder6& other);
4638 const Generator1 g1_;
4639 const Generator2 g2_;
4640 const Generator3 g3_;
4641 const Generator4 g4_;
4642 const Generator5 g5_;
4643 const Generator6 g6_;
4646 template <
class Generator1,
class Generator2,
class Generator3,
4647 class Generator4,
class Generator5,
class Generator6,
class Generator7>
4648 class CartesianProductHolder7 {
4650 CartesianProductHolder7(
const Generator1& g1,
const Generator2& g2,
4651 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4652 const Generator6& g6,
const Generator7& g7)
4653 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4654 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4655 typename T6,
typename T7>
4658 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4659 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4660 static_cast<ParamGenerator<T1>
>(g1_),
4661 static_cast<ParamGenerator<T2>
>(g2_),
4662 static_cast<ParamGenerator<T3>
>(g3_),
4663 static_cast<ParamGenerator<T4>
>(g4_),
4664 static_cast<ParamGenerator<T5>
>(g5_),
4665 static_cast<ParamGenerator<T6>
>(g6_),
4666 static_cast<ParamGenerator<T7>
>(g7_)));
4671 void operator=(
const CartesianProductHolder7& other);
4673 const Generator1 g1_;
4674 const Generator2 g2_;
4675 const Generator3 g3_;
4676 const Generator4 g4_;
4677 const Generator5 g5_;
4678 const Generator6 g6_;
4679 const Generator7 g7_;
4682 template <
class Generator1,
class Generator2,
class Generator3,
4683 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4685 class CartesianProductHolder8 {
4687 CartesianProductHolder8(
const Generator1& g1,
const Generator2& g2,
4688 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4689 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
4690 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4692 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4693 typename T6,
typename T7,
typename T8>
4696 return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
4697 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
4698 static_cast<ParamGenerator<T1>
>(g1_),
4699 static_cast<ParamGenerator<T2>
>(g2_),
4700 static_cast<ParamGenerator<T3>
>(g3_),
4701 static_cast<ParamGenerator<T4>
>(g4_),
4702 static_cast<ParamGenerator<T5>
>(g5_),
4703 static_cast<ParamGenerator<T6>
>(g6_),
4704 static_cast<ParamGenerator<T7>
>(g7_),
4705 static_cast<ParamGenerator<T8>
>(g8_)));
4710 void operator=(
const CartesianProductHolder8& other);
4712 const Generator1 g1_;
4713 const Generator2 g2_;
4714 const Generator3 g3_;
4715 const Generator4 g4_;
4716 const Generator5 g5_;
4717 const Generator6 g6_;
4718 const Generator7 g7_;
4719 const Generator8 g8_;
4722 template <
class Generator1,
class Generator2,
class Generator3,
4723 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4724 class Generator8,
class Generator9>
4725 class CartesianProductHolder9 {
4727 CartesianProductHolder9(
const Generator1& g1,
const Generator2& g2,
4728 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4729 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
4730 const Generator9& g9)
4731 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4733 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4734 typename T6,
typename T7,
typename T8,
typename T9>
4739 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
4740 static_cast<ParamGenerator<T1>
>(g1_),
4741 static_cast<ParamGenerator<T2>
>(g2_),
4742 static_cast<ParamGenerator<T3>
>(g3_),
4743 static_cast<ParamGenerator<T4>
>(g4_),
4744 static_cast<ParamGenerator<T5>
>(g5_),
4745 static_cast<ParamGenerator<T6>
>(g6_),
4746 static_cast<ParamGenerator<T7>
>(g7_),
4747 static_cast<ParamGenerator<T8>
>(g8_),
4748 static_cast<ParamGenerator<T9>
>(g9_)));
4753 void operator=(
const CartesianProductHolder9& other);
4755 const Generator1 g1_;
4756 const Generator2 g2_;
4757 const Generator3 g3_;
4758 const Generator4 g4_;
4759 const Generator5 g5_;
4760 const Generator6 g6_;
4761 const Generator7 g7_;
4762 const Generator8 g8_;
4763 const Generator9 g9_;
4766 template <
class Generator1,
class Generator2,
class Generator3,
4767 class Generator4,
class Generator5,
class Generator6,
class Generator7,
4768 class Generator8,
class Generator9,
class Generator10>
4769 class CartesianProductHolder10 {
4771 CartesianProductHolder10(
const Generator1& g1,
const Generator2& g2,
4772 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
4773 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
4774 const Generator9& g9,
const Generator10& g10)
4775 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4776 g9_(g9), g10_(g10) {}
4777 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4778 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4780 T9, T10> >()
const {
4783 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
4785 static_cast<ParamGenerator<T1>
>(g1_),
4786 static_cast<ParamGenerator<T2>
>(g2_),
4787 static_cast<ParamGenerator<T3>
>(g3_),
4788 static_cast<ParamGenerator<T4>
>(g4_),
4789 static_cast<ParamGenerator<T5>
>(g5_),
4790 static_cast<ParamGenerator<T6>
>(g6_),
4791 static_cast<ParamGenerator<T7>
>(g7_),
4792 static_cast<ParamGenerator<T8>
>(g8_),
4793 static_cast<ParamGenerator<T9>
>(g9_),
4794 static_cast<ParamGenerator<T10>
>(g10_)));
4799 void operator=(
const CartesianProductHolder10& other);
4801 const Generator1 g1_;
4802 const Generator2 g2_;
4803 const Generator3 g3_;
4804 const Generator4 g4_;
4805 const Generator5 g5_;
4806 const Generator6 g6_;
4807 const Generator7 g7_;
4808 const Generator8 g8_;
4809 const Generator9 g9_;
4810 const Generator10 g10_;
4813 #endif // GTEST_HAS_COMBINE 4818 #endif // GTEST_HAS_PARAM_TEST 4820 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ Definition: testutils.h:40
Iterator
Definition: six.py:544
GLuint GLuint end
Definition: gl2ext.h:323
Definition: gtest-tuple.h:109
Definition: RenderStyleConstants.h:245
CFArrayRef array
Definition: AVFoundationCFSoftLinking.h:129
TestSubObjConstructor T
Definition: TestTypedefs.idl:84
#define GTEST_CHECK_(condition)
Definition: gtest-port.h:810
uint16_t base_
Definition: transport_feedback_packet_loss_tracker_unittest.cc:36
#define N
Definition: gcc-loops.cpp:14
Definition: safe_conversions.h:16
Definition: document.h:393
GLfloat GLfloat GLfloat v2
Definition: gl2.h:500
GLfloat GLfloat GLfloat GLfloat v3
Definition: gl2.h:504
GLfloat GLfloat v1
Definition: gl2.h:496