1 // Copyright (C) 2018 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
6 // This file was GENERATED by command:
7 // pump.py gtest-param-util-generated.h.pump
8 // DO NOT EDIT BY HAND!!!
10 // Copyright 2008 Google Inc.
11 // All Rights Reserved.
13 // Redistribution and use in source and binary forms, with or without
14 // modification, are permitted provided that the following conditions are
17 // * Redistributions of source code must retain the above copyright
18 // notice, this list of conditions and the following disclaimer.
19 // * Redistributions in binary form must reproduce the above
20 // copyright notice, this list of conditions and the following disclaimer
21 // in the documentation and/or other materials provided with the
23 // * Neither the name of Google Inc. nor the names of its
24 // contributors may be used to endorse or promote products derived from
25 // this software without specific prior written permission.
27 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 // Author: vladl@google.com (Vlad Losev)
41 // Type and function utilities for implementing parameterized tests.
42 // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
44 // Currently Google Test supports at most 50 arguments in Values,
45 // and at most 10 arguments in Combine. Please contact
46 // googletestframework@googlegroups.com if you need more.
47 // Please note that the number of arguments to Combine is limited
48 // by the maximum arity of the implementation of tuple which is
49 // currently set at 10.
51 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
52 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
54 // scripts/fuse_gtest.py depends on gtest's own header being #included
55 // *unconditionally*. Therefore these #includes cannot be moved
56 // inside #if GTEST_HAS_PARAM_TEST.
57 #include "gtest/internal/gtest-param-util.h"
58 #include "gtest/internal/gtest-port.h"
60 #if GTEST_HAS_PARAM_TEST
64 // Forward declarations of ValuesIn(), which is implemented in
65 // include/gtest/gtest-param-test.h.
66 template <typename ForwardIterator>
67 internal::ParamGenerator<
68 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
69 ValuesIn(ForwardIterator begin, ForwardIterator end);
71 template <typename T, size_t N>
72 internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
74 template <class Container>
75 internal::ParamGenerator<typename Container::value_type> ValuesIn(
76 const Container& container);
80 // Used in the Values() function to provide polymorphic capabilities.
81 template <typename T1>
84 explicit ValueArray1(T1 v1) : v1_(v1) {}
87 operator ParamGenerator<T>() const {
88 const T array[] = {static_cast<T>(v1_)};
89 return ValuesIn(array);
93 // No implementation - assignment is unsupported.
94 void operator=(const ValueArray1& other);
99 template <typename T1, typename T2>
102 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
104 template <typename T>
105 operator ParamGenerator<T>() const {
106 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
107 return ValuesIn(array);
111 // No implementation - assignment is unsupported.
112 void operator=(const ValueArray2& other);
118 template <typename T1, typename T2, typename T3>
121 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
123 template <typename T>
124 operator ParamGenerator<T>() const {
125 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
126 static_cast<T>(v3_)};
127 return ValuesIn(array);
131 // No implementation - assignment is unsupported.
132 void operator=(const ValueArray3& other);
139 template <typename T1, typename T2, typename T3, typename T4>
142 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
145 template <typename T>
146 operator ParamGenerator<T>() const {
147 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
148 static_cast<T>(v3_), static_cast<T>(v4_)};
149 return ValuesIn(array);
153 // No implementation - assignment is unsupported.
154 void operator=(const ValueArray4& other);
162 template <typename T1, typename T2, typename T3, typename T4, typename T5>
165 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
168 template <typename T>
169 operator ParamGenerator<T>() const {
170 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
171 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
172 return ValuesIn(array);
176 // No implementation - assignment is unsupported.
177 void operator=(const ValueArray5& other);
186 template <typename T1, typename T2, typename T3, typename T4, typename T5,
190 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
191 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
193 template <typename T>
194 operator ParamGenerator<T>() const {
195 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
196 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
197 static_cast<T>(v6_)};
198 return ValuesIn(array);
202 // No implementation - assignment is unsupported.
203 void operator=(const ValueArray6& other);
213 template <typename T1, typename T2, typename T3, typename T4, typename T5,
214 typename T6, typename T7>
217 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
218 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
220 template <typename T>
221 operator ParamGenerator<T>() const {
222 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
223 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
224 static_cast<T>(v6_), static_cast<T>(v7_)};
225 return ValuesIn(array);
229 // No implementation - assignment is unsupported.
230 void operator=(const ValueArray7& other);
241 template <typename T1, typename T2, typename T3, typename T4, typename T5,
242 typename T6, typename T7, typename T8>
245 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
246 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
249 template <typename T>
250 operator ParamGenerator<T>() const {
251 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
252 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
253 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
254 return ValuesIn(array);
258 // No implementation - assignment is unsupported.
259 void operator=(const ValueArray8& other);
271 template <typename T1, typename T2, typename T3, typename T4, typename T5,
272 typename T6, typename T7, typename T8, typename T9>
275 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
276 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
279 template <typename T>
280 operator ParamGenerator<T>() const {
281 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
282 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
283 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
284 static_cast<T>(v9_)};
285 return ValuesIn(array);
289 // No implementation - assignment is unsupported.
290 void operator=(const ValueArray9& other);
303 template <typename T1, typename T2, typename T3, typename T4, typename T5,
304 typename T6, typename T7, typename T8, typename T9, typename T10>
307 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
308 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
309 v8_(v8), v9_(v9), v10_(v10) {}
311 template <typename T>
312 operator ParamGenerator<T>() const {
313 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
314 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
315 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
316 static_cast<T>(v9_), static_cast<T>(v10_)};
317 return ValuesIn(array);
321 // No implementation - assignment is unsupported.
322 void operator=(const ValueArray10& other);
336 template <typename T1, typename T2, typename T3, typename T4, typename T5,
337 typename T6, typename T7, typename T8, typename T9, typename T10,
341 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
342 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
343 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
345 template <typename T>
346 operator ParamGenerator<T>() const {
347 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
348 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
349 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
350 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
351 return ValuesIn(array);
355 // No implementation - assignment is unsupported.
356 void operator=(const ValueArray11& other);
371 template <typename T1, typename T2, typename T3, typename T4, typename T5,
372 typename T6, typename T7, typename T8, typename T9, typename T10,
373 typename T11, typename T12>
376 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
377 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
378 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
380 template <typename T>
381 operator ParamGenerator<T>() const {
382 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
383 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
384 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
385 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
386 static_cast<T>(v12_)};
387 return ValuesIn(array);
391 // No implementation - assignment is unsupported.
392 void operator=(const ValueArray12& other);
408 template <typename T1, typename T2, typename T3, typename T4, typename T5,
409 typename T6, typename T7, typename T8, typename T9, typename T10,
410 typename T11, typename T12, typename T13>
413 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
414 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
415 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
416 v12_(v12), v13_(v13) {}
418 template <typename T>
419 operator ParamGenerator<T>() const {
420 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
421 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
422 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
423 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
424 static_cast<T>(v12_), static_cast<T>(v13_)};
425 return ValuesIn(array);
429 // No implementation - assignment is unsupported.
430 void operator=(const ValueArray13& other);
447 template <typename T1, typename T2, typename T3, typename T4, typename T5,
448 typename T6, typename T7, typename T8, typename T9, typename T10,
449 typename T11, typename T12, typename T13, typename T14>
452 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
453 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
454 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
455 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
457 template <typename T>
458 operator ParamGenerator<T>() const {
459 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
460 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
461 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
462 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
463 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
464 return ValuesIn(array);
468 // No implementation - assignment is unsupported.
469 void operator=(const ValueArray14& other);
487 template <typename T1, typename T2, typename T3, typename T4, typename T5,
488 typename T6, typename T7, typename T8, typename T9, typename T10,
489 typename T11, typename T12, typename T13, typename T14, typename T15>
492 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
493 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
494 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
495 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
497 template <typename T>
498 operator ParamGenerator<T>() const {
499 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
500 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
501 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
502 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
503 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
504 static_cast<T>(v15_)};
505 return ValuesIn(array);
509 // No implementation - assignment is unsupported.
510 void operator=(const ValueArray15& 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,
535 ValueArray16(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) : v1_(v1),
537 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
538 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
541 template <typename T>
542 operator ParamGenerator<T>() const {
543 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
544 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
545 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
546 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
547 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
548 static_cast<T>(v15_), static_cast<T>(v16_)};
549 return ValuesIn(array);
553 // No implementation - assignment is unsupported.
554 void operator=(const ValueArray16& other);
574 template <typename T1, typename T2, typename T3, typename T4, typename T5,
575 typename T6, typename T7, typename T8, typename T9, typename T10,
576 typename T11, typename T12, typename T13, typename T14, typename T15,
577 typename T16, typename T17>
580 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
581 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
582 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
583 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
584 v15_(v15), v16_(v16), v17_(v17) {}
586 template <typename T>
587 operator ParamGenerator<T>() const {
588 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
589 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
590 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
591 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
592 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
593 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
594 return ValuesIn(array);
598 // No implementation - assignment is unsupported.
599 void operator=(const ValueArray17& other);
620 template <typename T1, typename T2, typename T3, typename T4, typename T5,
621 typename T6, typename T7, typename T8, typename T9, typename T10,
622 typename T11, typename T12, typename T13, typename T14, typename T15,
623 typename T16, typename T17, typename T18>
626 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
627 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
628 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
629 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
630 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
632 template <typename T>
633 operator ParamGenerator<T>() const {
634 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
635 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
636 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
637 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
638 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
639 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
640 static_cast<T>(v18_)};
641 return ValuesIn(array);
645 // No implementation - assignment is unsupported.
646 void operator=(const ValueArray18& other);
668 template <typename T1, typename T2, typename T3, typename T4, typename T5,
669 typename T6, typename T7, typename T8, typename T9, typename T10,
670 typename T11, typename T12, typename T13, typename T14, typename T15,
671 typename T16, typename T17, typename T18, typename T19>
674 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
675 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
676 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
677 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
678 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
680 template <typename T>
681 operator ParamGenerator<T>() const {
682 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
683 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
684 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
685 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
686 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
687 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
688 static_cast<T>(v18_), static_cast<T>(v19_)};
689 return ValuesIn(array);
693 // No implementation - assignment is unsupported.
694 void operator=(const ValueArray19& other);
717 template <typename T1, typename T2, typename T3, typename T4, typename T5,
718 typename T6, typename T7, typename T8, typename T9, typename T10,
719 typename T11, typename T12, typename T13, typename T14, typename T15,
720 typename T16, typename T17, typename T18, typename T19, typename T20>
723 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
724 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
725 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
726 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
727 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
728 v19_(v19), v20_(v20) {}
730 template <typename T>
731 operator ParamGenerator<T>() const {
732 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
733 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
734 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
735 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
736 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
737 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
738 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
739 return ValuesIn(array);
743 // No implementation - assignment is unsupported.
744 void operator=(const ValueArray20& other);
768 template <typename T1, typename T2, typename T3, typename T4, typename T5,
769 typename T6, typename T7, typename T8, typename T9, typename T10,
770 typename T11, typename T12, typename T13, typename T14, typename T15,
771 typename T16, typename T17, typename T18, typename T19, typename T20,
775 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
776 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
777 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
778 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
779 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
780 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
782 template <typename T>
783 operator ParamGenerator<T>() const {
784 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
785 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
786 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
787 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
788 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
789 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
790 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
791 static_cast<T>(v21_)};
792 return ValuesIn(array);
796 // No implementation - assignment is unsupported.
797 void operator=(const ValueArray21& other);
822 template <typename T1, typename T2, typename T3, typename T4, typename T5,
823 typename T6, typename T7, typename T8, typename T9, typename T10,
824 typename T11, typename T12, typename T13, typename T14, typename T15,
825 typename T16, typename T17, typename T18, typename T19, typename T20,
826 typename T21, typename T22>
829 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
830 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
831 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
832 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
833 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
834 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
836 template <typename T>
837 operator ParamGenerator<T>() const {
838 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
839 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
840 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
841 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
842 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
843 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
844 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
845 static_cast<T>(v21_), static_cast<T>(v22_)};
846 return ValuesIn(array);
850 // No implementation - assignment is unsupported.
851 void operator=(const ValueArray22& other);
877 template <typename T1, typename T2, typename T3, typename T4, typename T5,
878 typename T6, typename T7, typename T8, typename T9, typename T10,
879 typename T11, typename T12, typename T13, typename T14, typename T15,
880 typename T16, typename T17, typename T18, typename T19, typename T20,
881 typename T21, typename T22, typename T23>
884 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
885 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
886 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
887 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
888 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
889 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
892 template <typename T>
893 operator ParamGenerator<T>() const {
894 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
895 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
896 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
897 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
898 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
899 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
900 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
901 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
902 return ValuesIn(array);
906 // No implementation - assignment is unsupported.
907 void operator=(const ValueArray23& other);
934 template <typename T1, typename T2, typename T3, typename T4, typename T5,
935 typename T6, typename T7, typename T8, typename T9, typename T10,
936 typename T11, typename T12, typename T13, typename T14, typename T15,
937 typename T16, typename T17, typename T18, typename T19, typename T20,
938 typename T21, typename T22, typename T23, typename T24>
941 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
942 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
943 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
944 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
945 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
946 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
947 v22_(v22), v23_(v23), v24_(v24) {}
949 template <typename T>
950 operator ParamGenerator<T>() const {
951 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
952 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
953 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
954 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
955 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
956 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
957 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
958 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
959 static_cast<T>(v24_)};
960 return ValuesIn(array);
964 // No implementation - assignment is unsupported.
965 void operator=(const ValueArray24& other);
993 template <typename T1, typename T2, typename T3, typename T4, typename T5,
994 typename T6, typename T7, typename T8, typename T9, typename T10,
995 typename T11, typename T12, typename T13, typename T14, typename T15,
996 typename T16, typename T17, typename T18, typename T19, typename T20,
997 typename T21, typename T22, typename T23, typename T24, typename T25>
1000 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1001 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1002 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
1003 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1004 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1005 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1006 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
1008 template <typename T>
1009 operator ParamGenerator<T>() const {
1010 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1011 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1012 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1013 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1014 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1015 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1016 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1017 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1018 static_cast<T>(v24_), static_cast<T>(v25_)};
1019 return ValuesIn(array);
1023 // No implementation - assignment is unsupported.
1024 void operator=(const ValueArray25& other);
1053 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1054 typename T6, typename T7, typename T8, typename T9, typename T10,
1055 typename T11, typename T12, typename T13, typename T14, typename T15,
1056 typename T16, typename T17, typename T18, typename T19, typename T20,
1057 typename T21, typename T22, typename T23, typename T24, typename T25,
1059 class ValueArray26 {
1061 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1062 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1063 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1064 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1065 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1066 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1067 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
1069 template <typename T>
1070 operator ParamGenerator<T>() const {
1071 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1072 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1073 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1074 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1075 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1076 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1077 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1078 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1079 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
1080 return ValuesIn(array);
1084 // No implementation - assignment is unsupported.
1085 void operator=(const ValueArray26& other);
1115 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1116 typename T6, typename T7, typename T8, typename T9, typename T10,
1117 typename T11, typename T12, typename T13, typename T14, typename T15,
1118 typename T16, typename T17, typename T18, typename T19, typename T20,
1119 typename T21, typename T22, typename T23, typename T24, typename T25,
1120 typename T26, typename T27>
1121 class ValueArray27 {
1123 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1124 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1125 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1126 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1127 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1128 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1129 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1130 v26_(v26), v27_(v27) {}
1132 template <typename T>
1133 operator ParamGenerator<T>() const {
1134 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1135 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1136 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1137 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1138 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1139 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1140 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1141 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1142 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1143 static_cast<T>(v27_)};
1144 return ValuesIn(array);
1148 // No implementation - assignment is unsupported.
1149 void operator=(const ValueArray27& other);
1180 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1181 typename T6, typename T7, typename T8, typename T9, typename T10,
1182 typename T11, typename T12, typename T13, typename T14, typename T15,
1183 typename T16, typename T17, typename T18, typename T19, typename T20,
1184 typename T21, typename T22, typename T23, typename T24, typename T25,
1185 typename T26, typename T27, typename T28>
1186 class ValueArray28 {
1188 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1189 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1190 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1191 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1192 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1193 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1194 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1195 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1197 template <typename T>
1198 operator ParamGenerator<T>() const {
1199 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1200 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1201 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1202 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1203 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1204 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1205 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1206 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1207 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1208 static_cast<T>(v27_), static_cast<T>(v28_)};
1209 return ValuesIn(array);
1213 // No implementation - assignment is unsupported.
1214 void operator=(const ValueArray28& other);
1246 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1247 typename T6, typename T7, typename T8, typename T9, typename T10,
1248 typename T11, typename T12, typename T13, typename T14, typename T15,
1249 typename T16, typename T17, typename T18, typename T19, typename T20,
1250 typename T21, typename T22, typename T23, typename T24, typename T25,
1251 typename T26, typename T27, typename T28, typename T29>
1252 class ValueArray29 {
1254 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1255 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1256 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1257 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1258 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1259 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1260 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1261 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1263 template <typename T>
1264 operator ParamGenerator<T>() const {
1265 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1266 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1267 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1268 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1269 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1270 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1271 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1272 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1273 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1274 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
1275 return ValuesIn(array);
1279 // No implementation - assignment is unsupported.
1280 void operator=(const ValueArray29& other);
1313 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1314 typename T6, typename T7, typename T8, typename T9, typename T10,
1315 typename T11, typename T12, typename T13, typename T14, typename T15,
1316 typename T16, typename T17, typename T18, typename T19, typename T20,
1317 typename T21, typename T22, typename T23, typename T24, typename T25,
1318 typename T26, typename T27, typename T28, typename T29, typename T30>
1319 class ValueArray30 {
1321 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1322 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1323 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1324 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1325 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1326 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1327 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1328 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1329 v29_(v29), v30_(v30) {}
1331 template <typename T>
1332 operator ParamGenerator<T>() const {
1333 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1334 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1335 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1336 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1337 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1338 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1339 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1340 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1341 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1342 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1343 static_cast<T>(v30_)};
1344 return ValuesIn(array);
1348 // No implementation - assignment is unsupported.
1349 void operator=(const ValueArray30& other);
1383 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1384 typename T6, typename T7, typename T8, typename T9, typename T10,
1385 typename T11, typename T12, typename T13, typename T14, typename T15,
1386 typename T16, typename T17, typename T18, typename T19, typename T20,
1387 typename T21, typename T22, typename T23, typename T24, typename T25,
1388 typename T26, typename T27, typename T28, typename T29, typename T30,
1390 class ValueArray31 {
1392 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1393 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1394 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1395 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1396 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1397 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1398 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1399 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1400 v29_(v29), v30_(v30), v31_(v31) {}
1402 template <typename T>
1403 operator ParamGenerator<T>() const {
1404 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1405 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1406 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1407 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1408 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1409 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1410 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1411 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1412 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1413 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1414 static_cast<T>(v30_), static_cast<T>(v31_)};
1415 return ValuesIn(array);
1419 // No implementation - assignment is unsupported.
1420 void operator=(const ValueArray31& other);
1455 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1456 typename T6, typename T7, typename T8, typename T9, typename T10,
1457 typename T11, typename T12, typename T13, typename T14, typename T15,
1458 typename T16, typename T17, typename T18, typename T19, typename T20,
1459 typename T21, typename T22, typename T23, typename T24, typename T25,
1460 typename T26, typename T27, typename T28, typename T29, typename T30,
1461 typename T31, typename T32>
1462 class ValueArray32 {
1464 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1465 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1466 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1467 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1468 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1469 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1470 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1471 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1472 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1474 template <typename T>
1475 operator ParamGenerator<T>() const {
1476 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1477 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1478 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1479 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1480 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1481 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1482 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1483 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1484 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1485 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1486 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
1487 return ValuesIn(array);
1491 // No implementation - assignment is unsupported.
1492 void operator=(const ValueArray32& other);
1528 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1529 typename T6, typename T7, typename T8, typename T9, typename T10,
1530 typename T11, typename T12, typename T13, typename T14, typename T15,
1531 typename T16, typename T17, typename T18, typename T19, typename T20,
1532 typename T21, typename T22, typename T23, typename T24, typename T25,
1533 typename T26, typename T27, typename T28, typename T29, typename T30,
1534 typename T31, typename T32, typename T33>
1535 class ValueArray33 {
1537 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1538 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1539 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1540 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1541 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1542 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1543 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1544 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1545 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1548 template <typename T>
1549 operator ParamGenerator<T>() const {
1550 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1551 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1552 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1553 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1554 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1555 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1556 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1557 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1558 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1559 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1560 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1561 static_cast<T>(v33_)};
1562 return ValuesIn(array);
1566 // No implementation - assignment is unsupported.
1567 void operator=(const ValueArray33& other);
1604 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1605 typename T6, typename T7, typename T8, typename T9, typename T10,
1606 typename T11, typename T12, typename T13, typename T14, typename T15,
1607 typename T16, typename T17, typename T18, typename T19, typename T20,
1608 typename T21, typename T22, typename T23, typename T24, typename T25,
1609 typename T26, typename T27, typename T28, typename T29, typename T30,
1610 typename T31, typename T32, typename T33, typename T34>
1611 class ValueArray34 {
1613 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1614 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1615 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1616 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1617 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1618 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1619 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1620 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1621 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1622 v33_(v33), v34_(v34) {}
1624 template <typename T>
1625 operator ParamGenerator<T>() const {
1626 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1627 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1628 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1629 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1630 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1631 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1632 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1633 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1634 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1635 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1636 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1637 static_cast<T>(v33_), static_cast<T>(v34_)};
1638 return ValuesIn(array);
1642 // No implementation - assignment is unsupported.
1643 void operator=(const ValueArray34& other);
1681 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1682 typename T6, typename T7, typename T8, typename T9, typename T10,
1683 typename T11, typename T12, typename T13, typename T14, typename T15,
1684 typename T16, typename T17, typename T18, typename T19, typename T20,
1685 typename T21, typename T22, typename T23, typename T24, typename T25,
1686 typename T26, typename T27, typename T28, typename T29, typename T30,
1687 typename T31, typename T32, typename T33, typename T34, typename T35>
1688 class ValueArray35 {
1690 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1691 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1692 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1693 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1694 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1695 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1696 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1697 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1698 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1699 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1701 template <typename T>
1702 operator ParamGenerator<T>() const {
1703 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1704 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1705 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1706 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1707 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1708 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1709 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1710 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1711 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1712 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1713 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1714 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
1715 return ValuesIn(array);
1719 // No implementation - assignment is unsupported.
1720 void operator=(const ValueArray35& other);
1759 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1760 typename T6, typename T7, typename T8, typename T9, typename T10,
1761 typename T11, typename T12, typename T13, typename T14, typename T15,
1762 typename T16, typename T17, typename T18, typename T19, typename T20,
1763 typename T21, typename T22, typename T23, typename T24, typename T25,
1764 typename T26, typename T27, typename T28, typename T29, typename T30,
1765 typename T31, typename T32, typename T33, typename T34, typename T35,
1767 class ValueArray36 {
1769 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1770 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1771 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1772 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1773 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1774 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1775 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1776 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1777 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1778 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1780 template <typename T>
1781 operator ParamGenerator<T>() const {
1782 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1783 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1784 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1785 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1786 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1787 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1788 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1789 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1790 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1791 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1792 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1793 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1794 static_cast<T>(v36_)};
1795 return ValuesIn(array);
1799 // No implementation - assignment is unsupported.
1800 void operator=(const ValueArray36& other);
1840 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1841 typename T6, typename T7, typename T8, typename T9, typename T10,
1842 typename T11, typename T12, typename T13, typename T14, typename T15,
1843 typename T16, typename T17, typename T18, typename T19, typename T20,
1844 typename T21, typename T22, typename T23, typename T24, typename T25,
1845 typename T26, typename T27, typename T28, typename T29, typename T30,
1846 typename T31, typename T32, typename T33, typename T34, typename T35,
1847 typename T36, typename T37>
1848 class ValueArray37 {
1850 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1851 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1852 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1853 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1854 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1855 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1856 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1857 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1858 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1859 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1860 v36_(v36), v37_(v37) {}
1862 template <typename T>
1863 operator ParamGenerator<T>() const {
1864 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1865 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1866 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1867 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1868 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1869 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1870 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1871 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1872 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1873 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1874 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1875 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1876 static_cast<T>(v36_), static_cast<T>(v37_)};
1877 return ValuesIn(array);
1881 // No implementation - assignment is unsupported.
1882 void operator=(const ValueArray37& other);
1923 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1924 typename T6, typename T7, typename T8, typename T9, typename T10,
1925 typename T11, typename T12, typename T13, typename T14, typename T15,
1926 typename T16, typename T17, typename T18, typename T19, typename T20,
1927 typename T21, typename T22, typename T23, typename T24, typename T25,
1928 typename T26, typename T27, typename T28, typename T29, typename T30,
1929 typename T31, typename T32, typename T33, typename T34, typename T35,
1930 typename T36, typename T37, typename T38>
1931 class ValueArray38 {
1933 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1934 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1935 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1936 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1937 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1938 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1939 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1940 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1941 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1942 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1943 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1945 template <typename T>
1946 operator ParamGenerator<T>() const {
1947 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1948 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1949 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1950 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1951 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1952 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1953 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1954 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1955 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1956 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1957 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1958 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1959 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
1960 return ValuesIn(array);
1964 // No implementation - assignment is unsupported.
1965 void operator=(const ValueArray38& other);
2007 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2008 typename T6, typename T7, typename T8, typename T9, typename T10,
2009 typename T11, typename T12, typename T13, typename T14, typename T15,
2010 typename T16, typename T17, typename T18, typename T19, typename T20,
2011 typename T21, typename T22, typename T23, typename T24, typename T25,
2012 typename T26, typename T27, typename T28, typename T29, typename T30,
2013 typename T31, typename T32, typename T33, typename T34, typename T35,
2014 typename T36, typename T37, typename T38, typename T39>
2015 class ValueArray39 {
2017 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2018 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2019 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2020 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2021 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
2022 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2023 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2024 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2025 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2026 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2027 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
2029 template <typename T>
2030 operator ParamGenerator<T>() const {
2031 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2032 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2033 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2034 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2035 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2036 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2037 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2038 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2039 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2040 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2041 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2042 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2043 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2044 static_cast<T>(v39_)};
2045 return ValuesIn(array);
2049 // No implementation - assignment is unsupported.
2050 void operator=(const ValueArray39& other);
2093 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2094 typename T6, typename T7, typename T8, typename T9, typename T10,
2095 typename T11, typename T12, typename T13, typename T14, typename T15,
2096 typename T16, typename T17, typename T18, typename T19, typename T20,
2097 typename T21, typename T22, typename T23, typename T24, typename T25,
2098 typename T26, typename T27, typename T28, typename T29, typename T30,
2099 typename T31, typename T32, typename T33, typename T34, typename T35,
2100 typename T36, typename T37, typename T38, typename T39, typename T40>
2101 class ValueArray40 {
2103 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2104 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2105 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2106 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2107 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
2108 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2109 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2110 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2111 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2112 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2113 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2116 template <typename T>
2117 operator ParamGenerator<T>() const {
2118 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2119 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2120 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2121 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2122 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2123 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2124 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2125 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2126 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2127 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2128 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2129 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2130 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2131 static_cast<T>(v39_), static_cast<T>(v40_)};
2132 return ValuesIn(array);
2136 // No implementation - assignment is unsupported.
2137 void operator=(const ValueArray40& other);
2181 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2182 typename T6, typename T7, typename T8, typename T9, typename T10,
2183 typename T11, typename T12, typename T13, typename T14, typename T15,
2184 typename T16, typename T17, typename T18, typename T19, typename T20,
2185 typename T21, typename T22, typename T23, typename T24, typename T25,
2186 typename T26, typename T27, typename T28, typename T29, typename T30,
2187 typename T31, typename T32, typename T33, typename T34, typename T35,
2188 typename T36, typename T37, typename T38, typename T39, typename T40,
2190 class ValueArray41 {
2192 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2193 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2194 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2195 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2196 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
2197 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2198 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2199 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2200 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2201 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2202 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2203 v39_(v39), v40_(v40), v41_(v41) {}
2205 template <typename T>
2206 operator ParamGenerator<T>() const {
2207 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2208 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2209 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2210 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2211 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2212 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2213 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2214 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2215 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2216 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2217 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2218 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2219 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2220 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
2221 return ValuesIn(array);
2225 // No implementation - assignment is unsupported.
2226 void operator=(const ValueArray41& other);
2271 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2272 typename T6, typename T7, typename T8, typename T9, typename T10,
2273 typename T11, typename T12, typename T13, typename T14, typename T15,
2274 typename T16, typename T17, typename T18, typename T19, typename T20,
2275 typename T21, typename T22, typename T23, typename T24, typename T25,
2276 typename T26, typename T27, typename T28, typename T29, typename T30,
2277 typename T31, typename T32, typename T33, typename T34, typename T35,
2278 typename T36, typename T37, typename T38, typename T39, typename T40,
2279 typename T41, typename T42>
2280 class ValueArray42 {
2282 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2283 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2284 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2285 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2286 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2287 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2288 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2289 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2290 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2291 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2292 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2293 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2295 template <typename T>
2296 operator ParamGenerator<T>() const {
2297 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2298 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2299 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2300 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2301 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2302 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2303 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2304 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2305 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2306 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2307 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2308 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2309 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2310 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2311 static_cast<T>(v42_)};
2312 return ValuesIn(array);
2316 // No implementation - assignment is unsupported.
2317 void operator=(const ValueArray42& other);
2363 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2364 typename T6, typename T7, typename T8, typename T9, typename T10,
2365 typename T11, typename T12, typename T13, typename T14, typename T15,
2366 typename T16, typename T17, typename T18, typename T19, typename T20,
2367 typename T21, typename T22, typename T23, typename T24, typename T25,
2368 typename T26, typename T27, typename T28, typename T29, typename T30,
2369 typename T31, typename T32, typename T33, typename T34, typename T35,
2370 typename T36, typename T37, typename T38, typename T39, typename T40,
2371 typename T41, typename T42, typename T43>
2372 class ValueArray43 {
2374 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2375 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2376 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2377 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2378 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2379 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2380 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2381 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2382 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2383 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2384 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2385 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2387 template <typename T>
2388 operator ParamGenerator<T>() const {
2389 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2390 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2391 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2392 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2393 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2394 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2395 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2396 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2397 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2398 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2399 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2400 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2401 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2402 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2403 static_cast<T>(v42_), static_cast<T>(v43_)};
2404 return ValuesIn(array);
2408 // No implementation - assignment is unsupported.
2409 void operator=(const ValueArray43& other);
2456 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2457 typename T6, typename T7, typename T8, typename T9, typename T10,
2458 typename T11, typename T12, typename T13, typename T14, typename T15,
2459 typename T16, typename T17, typename T18, typename T19, typename T20,
2460 typename T21, typename T22, typename T23, typename T24, typename T25,
2461 typename T26, typename T27, typename T28, typename T29, typename T30,
2462 typename T31, typename T32, typename T33, typename T34, typename T35,
2463 typename T36, typename T37, typename T38, typename T39, typename T40,
2464 typename T41, typename T42, typename T43, typename T44>
2465 class ValueArray44 {
2467 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2468 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2469 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2470 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2471 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2472 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2473 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2474 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2475 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2476 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2477 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2478 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2479 v43_(v43), v44_(v44) {}
2481 template <typename T>
2482 operator ParamGenerator<T>() const {
2483 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2484 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2485 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2486 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2487 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2488 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2489 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2490 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2491 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2492 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2493 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2494 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2495 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2496 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2497 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
2498 return ValuesIn(array);
2502 // No implementation - assignment is unsupported.
2503 void operator=(const ValueArray44& other);
2551 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2552 typename T6, typename T7, typename T8, typename T9, typename T10,
2553 typename T11, typename T12, typename T13, typename T14, typename T15,
2554 typename T16, typename T17, typename T18, typename T19, typename T20,
2555 typename T21, typename T22, typename T23, typename T24, typename T25,
2556 typename T26, typename T27, typename T28, typename T29, typename T30,
2557 typename T31, typename T32, typename T33, typename T34, typename T35,
2558 typename T36, typename T37, typename T38, typename T39, typename T40,
2559 typename T41, typename T42, typename T43, typename T44, typename T45>
2560 class ValueArray45 {
2562 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2563 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2564 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2565 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2566 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2567 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2568 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2569 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2570 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2571 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2572 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2573 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2574 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2576 template <typename T>
2577 operator ParamGenerator<T>() const {
2578 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2579 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2580 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2581 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2582 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2583 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2584 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2585 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2586 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2587 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2588 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2589 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2590 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2591 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2592 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2593 static_cast<T>(v45_)};
2594 return ValuesIn(array);
2598 // No implementation - assignment is unsupported.
2599 void operator=(const ValueArray45& other);
2648 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2649 typename T6, typename T7, typename T8, typename T9, typename T10,
2650 typename T11, typename T12, typename T13, typename T14, typename T15,
2651 typename T16, typename T17, typename T18, typename T19, typename T20,
2652 typename T21, typename T22, typename T23, typename T24, typename T25,
2653 typename T26, typename T27, typename T28, typename T29, typename T30,
2654 typename T31, typename T32, typename T33, typename T34, typename T35,
2655 typename T36, typename T37, typename T38, typename T39, typename T40,
2656 typename T41, typename T42, typename T43, typename T44, typename T45,
2658 class ValueArray46 {
2660 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2661 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2662 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2663 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2664 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2665 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2666 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2667 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2668 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2669 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2670 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2671 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2672 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2674 template <typename T>
2675 operator ParamGenerator<T>() const {
2676 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2677 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2678 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2679 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2680 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2681 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2682 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2683 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2684 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2685 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2686 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2687 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2688 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2689 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2690 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2691 static_cast<T>(v45_), static_cast<T>(v46_)};
2692 return ValuesIn(array);
2696 // No implementation - assignment is unsupported.
2697 void operator=(const ValueArray46& other);
2747 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2748 typename T6, typename T7, typename T8, typename T9, typename T10,
2749 typename T11, typename T12, typename T13, typename T14, typename T15,
2750 typename T16, typename T17, typename T18, typename T19, typename T20,
2751 typename T21, typename T22, typename T23, typename T24, typename T25,
2752 typename T26, typename T27, typename T28, typename T29, typename T30,
2753 typename T31, typename T32, typename T33, typename T34, typename T35,
2754 typename T36, typename T37, typename T38, typename T39, typename T40,
2755 typename T41, typename T42, typename T43, typename T44, typename T45,
2756 typename T46, typename T47>
2757 class ValueArray47 {
2759 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2760 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2761 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2762 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2763 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2764 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2765 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2766 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2767 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2768 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2769 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2770 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2771 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2774 template <typename T>
2775 operator ParamGenerator<T>() const {
2776 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2777 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2778 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2779 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2780 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2781 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2782 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2783 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2784 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2785 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2786 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2787 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2788 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2789 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2790 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2791 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
2792 return ValuesIn(array);
2796 // No implementation - assignment is unsupported.
2797 void operator=(const ValueArray47& other);
2848 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2849 typename T6, typename T7, typename T8, typename T9, typename T10,
2850 typename T11, typename T12, typename T13, typename T14, typename T15,
2851 typename T16, typename T17, typename T18, typename T19, typename T20,
2852 typename T21, typename T22, typename T23, typename T24, typename T25,
2853 typename T26, typename T27, typename T28, typename T29, typename T30,
2854 typename T31, typename T32, typename T33, typename T34, typename T35,
2855 typename T36, typename T37, typename T38, typename T39, typename T40,
2856 typename T41, typename T42, typename T43, typename T44, typename T45,
2857 typename T46, typename T47, typename T48>
2858 class ValueArray48 {
2860 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2861 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2862 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2863 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2864 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2865 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2866 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2867 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2868 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2869 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2870 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2871 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2872 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2873 v46_(v46), v47_(v47), v48_(v48) {}
2875 template <typename T>
2876 operator ParamGenerator<T>() const {
2877 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2878 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2879 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2880 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2881 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2882 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2883 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2884 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2885 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2886 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2887 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2888 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2889 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2890 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2891 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2892 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2893 static_cast<T>(v48_)};
2894 return ValuesIn(array);
2898 // No implementation - assignment is unsupported.
2899 void operator=(const ValueArray48& other);
2951 template <typename T1, typename T2, typename T3, typename T4, typename T5,
2952 typename T6, typename T7, typename T8, typename T9, typename T10,
2953 typename T11, typename T12, typename T13, typename T14, typename T15,
2954 typename T16, typename T17, typename T18, typename T19, typename T20,
2955 typename T21, typename T22, typename T23, typename T24, typename T25,
2956 typename T26, typename T27, typename T28, typename T29, typename T30,
2957 typename T31, typename T32, typename T33, typename T34, typename T35,
2958 typename T36, typename T37, typename T38, typename T39, typename T40,
2959 typename T41, typename T42, typename T43, typename T44, typename T45,
2960 typename T46, typename T47, typename T48, typename T49>
2961 class ValueArray49 {
2963 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2964 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2965 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2966 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2967 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2968 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2969 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2970 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2971 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2972 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2973 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2974 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2975 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2976 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2978 template <typename T>
2979 operator ParamGenerator<T>() const {
2980 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2981 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2982 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2983 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2984 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2985 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2986 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2987 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2988 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2989 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2990 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2991 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2992 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2993 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2994 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2995 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2996 static_cast<T>(v48_), static_cast<T>(v49_)};
2997 return ValuesIn(array);
3001 // No implementation - assignment is unsupported.
3002 void operator=(const ValueArray49& other);
3055 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3056 typename T6, typename T7, typename T8, typename T9, typename T10,
3057 typename T11, typename T12, typename T13, typename T14, typename T15,
3058 typename T16, typename T17, typename T18, typename T19, typename T20,
3059 typename T21, typename T22, typename T23, typename T24, typename T25,
3060 typename T26, typename T27, typename T28, typename T29, typename T30,
3061 typename T31, typename T32, typename T33, typename T34, typename T35,
3062 typename T36, typename T37, typename T38, typename T39, typename T40,
3063 typename T41, typename T42, typename T43, typename T44, typename T45,
3064 typename T46, typename T47, typename T48, typename T49, typename T50>
3065 class ValueArray50 {
3067 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3068 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3069 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3070 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3071 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3072 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3073 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3074 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3075 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3076 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3077 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3078 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3079 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3080 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3082 template <typename T>
3083 operator ParamGenerator<T>() const {
3084 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3085 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3086 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3087 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3088 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3089 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3090 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3091 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3092 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3093 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3094 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3095 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3096 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3097 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3098 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3099 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3100 static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
3101 return ValuesIn(array);
3105 // No implementation - assignment is unsupported.
3106 void operator=(const ValueArray50& other);
3160 # if GTEST_HAS_COMBINE
3161 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
3163 // Generates values from the Cartesian product of values produced
3164 // by the argument generators.
3166 template <typename T1, typename T2>
3167 class CartesianProductGenerator2
3168 : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {
3170 typedef ::testing::tuple<T1, T2> ParamType;
3172 CartesianProductGenerator2(const ParamGenerator<T1>& g1,
3173 const ParamGenerator<T2>& g2)
3174 : g1_(g1), g2_(g2) {}
3175 virtual ~CartesianProductGenerator2() {}
3177 virtual ParamIteratorInterface<ParamType>* Begin() const {
3178 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
3180 virtual ParamIteratorInterface<ParamType>* End() const {
3181 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
3185 class Iterator : public ParamIteratorInterface<ParamType> {
3187 Iterator(const ParamGeneratorInterface<ParamType>* base,
3188 const ParamGenerator<T1>& g1,
3189 const typename ParamGenerator<T1>::iterator& current1,
3190 const ParamGenerator<T2>& g2,
3191 const typename ParamGenerator<T2>::iterator& current2)
3193 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3194 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3195 ComputeCurrentValue();
3197 virtual ~Iterator() {}
3199 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3202 // Advance should not be called on beyond-of-range iterators
3203 // so no component iterators must be beyond end of range, either.
3204 virtual void Advance() {
3207 if (current2_ == end2_) {
3208 current2_ = begin2_;
3211 ComputeCurrentValue();
3213 virtual ParamIteratorInterface<ParamType>* Clone() const {
3214 return new Iterator(*this);
3216 virtual const ParamType* Current() const { return ¤t_value_; }
3217 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3218 // Having the same base generator guarantees that the other
3219 // iterator is of the same type and we can downcast.
3220 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3221 << "The program attempted to compare iterators "
3222 << "from different generators." << std::endl;
3223 const Iterator* typed_other =
3224 CheckedDowncastToActualType<const Iterator>(&other);
3225 // We must report iterators equal if they both point beyond their
3226 // respective ranges. That can happen in a variety of fashions,
3227 // so we have to consult AtEnd().
3228 return (AtEnd() && typed_other->AtEnd()) ||
3230 current1_ == typed_other->current1_ &&
3231 current2_ == typed_other->current2_);
3235 Iterator(const Iterator& other)
3236 : base_(other.base_),
3237 begin1_(other.begin1_),
3239 current1_(other.current1_),
3240 begin2_(other.begin2_),
3242 current2_(other.current2_) {
3243 ComputeCurrentValue();
3246 void ComputeCurrentValue() {
3248 current_value_ = ParamType(*current1_, *current2_);
3250 bool AtEnd() const {
3251 // We must report iterator past the end of the range when either of the
3252 // component iterators has reached the end of its range.
3254 current1_ == end1_ ||
3258 // No implementation - assignment is unsupported.
3259 void operator=(const Iterator& other);
3261 const ParamGeneratorInterface<ParamType>* const base_;
3262 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3263 // current[i]_ is the actual traversing iterator.
3264 const typename ParamGenerator<T1>::iterator begin1_;
3265 const typename ParamGenerator<T1>::iterator end1_;
3266 typename ParamGenerator<T1>::iterator current1_;
3267 const typename ParamGenerator<T2>::iterator begin2_;
3268 const typename ParamGenerator<T2>::iterator end2_;
3269 typename ParamGenerator<T2>::iterator current2_;
3270 ParamType current_value_;
3271 }; // class CartesianProductGenerator2::Iterator
3273 // No implementation - assignment is unsupported.
3274 void operator=(const CartesianProductGenerator2& other);
3276 const ParamGenerator<T1> g1_;
3277 const ParamGenerator<T2> g2_;
3278 }; // class CartesianProductGenerator2
3281 template <typename T1, typename T2, typename T3>
3282 class CartesianProductGenerator3
3283 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
3285 typedef ::testing::tuple<T1, T2, T3> ParamType;
3287 CartesianProductGenerator3(const ParamGenerator<T1>& g1,
3288 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
3289 : g1_(g1), g2_(g2), g3_(g3) {}
3290 virtual ~CartesianProductGenerator3() {}
3292 virtual ParamIteratorInterface<ParamType>* Begin() const {
3293 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3296 virtual ParamIteratorInterface<ParamType>* End() const {
3297 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3301 class Iterator : public ParamIteratorInterface<ParamType> {
3303 Iterator(const ParamGeneratorInterface<ParamType>* base,
3304 const ParamGenerator<T1>& g1,
3305 const typename ParamGenerator<T1>::iterator& current1,
3306 const ParamGenerator<T2>& g2,
3307 const typename ParamGenerator<T2>::iterator& current2,
3308 const ParamGenerator<T3>& g3,
3309 const typename ParamGenerator<T3>::iterator& current3)
3311 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3312 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3313 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
3314 ComputeCurrentValue();
3316 virtual ~Iterator() {}
3318 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3321 // Advance should not be called on beyond-of-range iterators
3322 // so no component iterators must be beyond end of range, either.
3323 virtual void Advance() {
3326 if (current3_ == end3_) {
3327 current3_ = begin3_;
3330 if (current2_ == end2_) {
3331 current2_ = begin2_;
3334 ComputeCurrentValue();
3336 virtual ParamIteratorInterface<ParamType>* Clone() const {
3337 return new Iterator(*this);
3339 virtual const ParamType* Current() const { return ¤t_value_; }
3340 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3341 // Having the same base generator guarantees that the other
3342 // iterator is of the same type and we can downcast.
3343 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3344 << "The program attempted to compare iterators "
3345 << "from different generators." << std::endl;
3346 const Iterator* typed_other =
3347 CheckedDowncastToActualType<const Iterator>(&other);
3348 // We must report iterators equal if they both point beyond their
3349 // respective ranges. That can happen in a variety of fashions,
3350 // so we have to consult AtEnd().
3351 return (AtEnd() && typed_other->AtEnd()) ||
3353 current1_ == typed_other->current1_ &&
3354 current2_ == typed_other->current2_ &&
3355 current3_ == typed_other->current3_);
3359 Iterator(const Iterator& other)
3360 : base_(other.base_),
3361 begin1_(other.begin1_),
3363 current1_(other.current1_),
3364 begin2_(other.begin2_),
3366 current2_(other.current2_),
3367 begin3_(other.begin3_),
3369 current3_(other.current3_) {
3370 ComputeCurrentValue();
3373 void ComputeCurrentValue() {
3375 current_value_ = ParamType(*current1_, *current2_, *current3_);
3377 bool AtEnd() const {
3378 // We must report iterator past the end of the range when either of the
3379 // component iterators has reached the end of its range.
3381 current1_ == end1_ ||
3382 current2_ == end2_ ||
3386 // No implementation - assignment is unsupported.
3387 void operator=(const Iterator& other);
3389 const ParamGeneratorInterface<ParamType>* const base_;
3390 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3391 // current[i]_ is the actual traversing iterator.
3392 const typename ParamGenerator<T1>::iterator begin1_;
3393 const typename ParamGenerator<T1>::iterator end1_;
3394 typename ParamGenerator<T1>::iterator current1_;
3395 const typename ParamGenerator<T2>::iterator begin2_;
3396 const typename ParamGenerator<T2>::iterator end2_;
3397 typename ParamGenerator<T2>::iterator current2_;
3398 const typename ParamGenerator<T3>::iterator begin3_;
3399 const typename ParamGenerator<T3>::iterator end3_;
3400 typename ParamGenerator<T3>::iterator current3_;
3401 ParamType current_value_;
3402 }; // class CartesianProductGenerator3::Iterator
3404 // No implementation - assignment is unsupported.
3405 void operator=(const CartesianProductGenerator3& other);
3407 const ParamGenerator<T1> g1_;
3408 const ParamGenerator<T2> g2_;
3409 const ParamGenerator<T3> g3_;
3410 }; // class CartesianProductGenerator3
3413 template <typename T1, typename T2, typename T3, typename T4>
3414 class CartesianProductGenerator4
3415 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
3417 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
3419 CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3420 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3421 const ParamGenerator<T4>& g4)
3422 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3423 virtual ~CartesianProductGenerator4() {}
3425 virtual ParamIteratorInterface<ParamType>* Begin() const {
3426 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3427 g3_.begin(), g4_, g4_.begin());
3429 virtual ParamIteratorInterface<ParamType>* End() const {
3430 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3435 class Iterator : public ParamIteratorInterface<ParamType> {
3437 Iterator(const ParamGeneratorInterface<ParamType>* base,
3438 const ParamGenerator<T1>& g1,
3439 const typename ParamGenerator<T1>::iterator& current1,
3440 const ParamGenerator<T2>& g2,
3441 const typename ParamGenerator<T2>::iterator& current2,
3442 const ParamGenerator<T3>& g3,
3443 const typename ParamGenerator<T3>::iterator& current3,
3444 const ParamGenerator<T4>& g4,
3445 const typename ParamGenerator<T4>::iterator& current4)
3447 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3448 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3449 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3450 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3451 ComputeCurrentValue();
3453 virtual ~Iterator() {}
3455 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3458 // Advance should not be called on beyond-of-range iterators
3459 // so no component iterators must be beyond end of range, either.
3460 virtual void Advance() {
3463 if (current4_ == end4_) {
3464 current4_ = begin4_;
3467 if (current3_ == end3_) {
3468 current3_ = begin3_;
3471 if (current2_ == end2_) {
3472 current2_ = begin2_;
3475 ComputeCurrentValue();
3477 virtual ParamIteratorInterface<ParamType>* Clone() const {
3478 return new Iterator(*this);
3480 virtual const ParamType* Current() const { return ¤t_value_; }
3481 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3482 // Having the same base generator guarantees that the other
3483 // iterator is of the same type and we can downcast.
3484 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3485 << "The program attempted to compare iterators "
3486 << "from different generators." << std::endl;
3487 const Iterator* typed_other =
3488 CheckedDowncastToActualType<const Iterator>(&other);
3489 // We must report iterators equal if they both point beyond their
3490 // respective ranges. That can happen in a variety of fashions,
3491 // so we have to consult AtEnd().
3492 return (AtEnd() && typed_other->AtEnd()) ||
3494 current1_ == typed_other->current1_ &&
3495 current2_ == typed_other->current2_ &&
3496 current3_ == typed_other->current3_ &&
3497 current4_ == typed_other->current4_);
3501 Iterator(const Iterator& other)
3502 : base_(other.base_),
3503 begin1_(other.begin1_),
3505 current1_(other.current1_),
3506 begin2_(other.begin2_),
3508 current2_(other.current2_),
3509 begin3_(other.begin3_),
3511 current3_(other.current3_),
3512 begin4_(other.begin4_),
3514 current4_(other.current4_) {
3515 ComputeCurrentValue();
3518 void ComputeCurrentValue() {
3520 current_value_ = ParamType(*current1_, *current2_, *current3_,
3523 bool AtEnd() const {
3524 // We must report iterator past the end of the range when either of the
3525 // component iterators has reached the end of its range.
3527 current1_ == end1_ ||
3528 current2_ == end2_ ||
3529 current3_ == end3_ ||
3533 // No implementation - assignment is unsupported.
3534 void operator=(const Iterator& other);
3536 const ParamGeneratorInterface<ParamType>* const base_;
3537 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3538 // current[i]_ is the actual traversing iterator.
3539 const typename ParamGenerator<T1>::iterator begin1_;
3540 const typename ParamGenerator<T1>::iterator end1_;
3541 typename ParamGenerator<T1>::iterator current1_;
3542 const typename ParamGenerator<T2>::iterator begin2_;
3543 const typename ParamGenerator<T2>::iterator end2_;
3544 typename ParamGenerator<T2>::iterator current2_;
3545 const typename ParamGenerator<T3>::iterator begin3_;
3546 const typename ParamGenerator<T3>::iterator end3_;
3547 typename ParamGenerator<T3>::iterator current3_;
3548 const typename ParamGenerator<T4>::iterator begin4_;
3549 const typename ParamGenerator<T4>::iterator end4_;
3550 typename ParamGenerator<T4>::iterator current4_;
3551 ParamType current_value_;
3552 }; // class CartesianProductGenerator4::Iterator
3554 // No implementation - assignment is unsupported.
3555 void operator=(const CartesianProductGenerator4& other);
3557 const ParamGenerator<T1> g1_;
3558 const ParamGenerator<T2> g2_;
3559 const ParamGenerator<T3> g3_;
3560 const ParamGenerator<T4> g4_;
3561 }; // class CartesianProductGenerator4
3564 template <typename T1, typename T2, typename T3, typename T4, typename T5>
3565 class CartesianProductGenerator5
3566 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
3568 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
3570 CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3571 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3572 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3573 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3574 virtual ~CartesianProductGenerator5() {}
3576 virtual ParamIteratorInterface<ParamType>* Begin() const {
3577 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3578 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3580 virtual ParamIteratorInterface<ParamType>* End() const {
3581 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3582 g4_, g4_.end(), g5_, g5_.end());
3586 class Iterator : public ParamIteratorInterface<ParamType> {
3588 Iterator(const ParamGeneratorInterface<ParamType>* base,
3589 const ParamGenerator<T1>& g1,
3590 const typename ParamGenerator<T1>::iterator& current1,
3591 const ParamGenerator<T2>& g2,
3592 const typename ParamGenerator<T2>::iterator& current2,
3593 const ParamGenerator<T3>& g3,
3594 const typename ParamGenerator<T3>::iterator& current3,
3595 const ParamGenerator<T4>& g4,
3596 const typename ParamGenerator<T4>::iterator& current4,
3597 const ParamGenerator<T5>& g5,
3598 const typename ParamGenerator<T5>::iterator& current5)
3600 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3601 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3602 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3603 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3604 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
3605 ComputeCurrentValue();
3607 virtual ~Iterator() {}
3609 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3612 // Advance should not be called on beyond-of-range iterators
3613 // so no component iterators must be beyond end of range, either.
3614 virtual void Advance() {
3617 if (current5_ == end5_) {
3618 current5_ = begin5_;
3621 if (current4_ == end4_) {
3622 current4_ = begin4_;
3625 if (current3_ == end3_) {
3626 current3_ = begin3_;
3629 if (current2_ == end2_) {
3630 current2_ = begin2_;
3633 ComputeCurrentValue();
3635 virtual ParamIteratorInterface<ParamType>* Clone() const {
3636 return new Iterator(*this);
3638 virtual const ParamType* Current() const { return ¤t_value_; }
3639 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3640 // Having the same base generator guarantees that the other
3641 // iterator is of the same type and we can downcast.
3642 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3643 << "The program attempted to compare iterators "
3644 << "from different generators." << std::endl;
3645 const Iterator* typed_other =
3646 CheckedDowncastToActualType<const Iterator>(&other);
3647 // We must report iterators equal if they both point beyond their
3648 // respective ranges. That can happen in a variety of fashions,
3649 // so we have to consult AtEnd().
3650 return (AtEnd() && typed_other->AtEnd()) ||
3652 current1_ == typed_other->current1_ &&
3653 current2_ == typed_other->current2_ &&
3654 current3_ == typed_other->current3_ &&
3655 current4_ == typed_other->current4_ &&
3656 current5_ == typed_other->current5_);
3660 Iterator(const Iterator& other)
3661 : base_(other.base_),
3662 begin1_(other.begin1_),
3664 current1_(other.current1_),
3665 begin2_(other.begin2_),
3667 current2_(other.current2_),
3668 begin3_(other.begin3_),
3670 current3_(other.current3_),
3671 begin4_(other.begin4_),
3673 current4_(other.current4_),
3674 begin5_(other.begin5_),
3676 current5_(other.current5_) {
3677 ComputeCurrentValue();
3680 void ComputeCurrentValue() {
3682 current_value_ = ParamType(*current1_, *current2_, *current3_,
3683 *current4_, *current5_);
3685 bool AtEnd() const {
3686 // We must report iterator past the end of the range when either of the
3687 // component iterators has reached the end of its range.
3689 current1_ == end1_ ||
3690 current2_ == end2_ ||
3691 current3_ == end3_ ||
3692 current4_ == end4_ ||
3696 // No implementation - assignment is unsupported.
3697 void operator=(const Iterator& other);
3699 const ParamGeneratorInterface<ParamType>* const base_;
3700 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3701 // current[i]_ is the actual traversing iterator.
3702 const typename ParamGenerator<T1>::iterator begin1_;
3703 const typename ParamGenerator<T1>::iterator end1_;
3704 typename ParamGenerator<T1>::iterator current1_;
3705 const typename ParamGenerator<T2>::iterator begin2_;
3706 const typename ParamGenerator<T2>::iterator end2_;
3707 typename ParamGenerator<T2>::iterator current2_;
3708 const typename ParamGenerator<T3>::iterator begin3_;
3709 const typename ParamGenerator<T3>::iterator end3_;
3710 typename ParamGenerator<T3>::iterator current3_;
3711 const typename ParamGenerator<T4>::iterator begin4_;
3712 const typename ParamGenerator<T4>::iterator end4_;
3713 typename ParamGenerator<T4>::iterator current4_;
3714 const typename ParamGenerator<T5>::iterator begin5_;
3715 const typename ParamGenerator<T5>::iterator end5_;
3716 typename ParamGenerator<T5>::iterator current5_;
3717 ParamType current_value_;
3718 }; // class CartesianProductGenerator5::Iterator
3720 // No implementation - assignment is unsupported.
3721 void operator=(const CartesianProductGenerator5& other);
3723 const ParamGenerator<T1> g1_;
3724 const ParamGenerator<T2> g2_;
3725 const ParamGenerator<T3> g3_;
3726 const ParamGenerator<T4> g4_;
3727 const ParamGenerator<T5> g5_;
3728 }; // class CartesianProductGenerator5
3731 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3733 class CartesianProductGenerator6
3734 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
3737 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3739 CartesianProductGenerator6(const ParamGenerator<T1>& g1,
3740 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3741 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3742 const ParamGenerator<T6>& g6)
3743 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3744 virtual ~CartesianProductGenerator6() {}
3746 virtual ParamIteratorInterface<ParamType>* Begin() const {
3747 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3748 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3750 virtual ParamIteratorInterface<ParamType>* End() const {
3751 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3752 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3756 class Iterator : public ParamIteratorInterface<ParamType> {
3758 Iterator(const ParamGeneratorInterface<ParamType>* base,
3759 const ParamGenerator<T1>& g1,
3760 const typename ParamGenerator<T1>::iterator& current1,
3761 const ParamGenerator<T2>& g2,
3762 const typename ParamGenerator<T2>::iterator& current2,
3763 const ParamGenerator<T3>& g3,
3764 const typename ParamGenerator<T3>::iterator& current3,
3765 const ParamGenerator<T4>& g4,
3766 const typename ParamGenerator<T4>::iterator& current4,
3767 const ParamGenerator<T5>& g5,
3768 const typename ParamGenerator<T5>::iterator& current5,
3769 const ParamGenerator<T6>& g6,
3770 const typename ParamGenerator<T6>::iterator& current6)
3772 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3773 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3774 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3775 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3776 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3777 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
3778 ComputeCurrentValue();
3780 virtual ~Iterator() {}
3782 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3785 // Advance should not be called on beyond-of-range iterators
3786 // so no component iterators must be beyond end of range, either.
3787 virtual void Advance() {
3790 if (current6_ == end6_) {
3791 current6_ = begin6_;
3794 if (current5_ == end5_) {
3795 current5_ = begin5_;
3798 if (current4_ == end4_) {
3799 current4_ = begin4_;
3802 if (current3_ == end3_) {
3803 current3_ = begin3_;
3806 if (current2_ == end2_) {
3807 current2_ = begin2_;
3810 ComputeCurrentValue();
3812 virtual ParamIteratorInterface<ParamType>* Clone() const {
3813 return new Iterator(*this);
3815 virtual const ParamType* Current() const { return ¤t_value_; }
3816 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3817 // Having the same base generator guarantees that the other
3818 // iterator is of the same type and we can downcast.
3819 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3820 << "The program attempted to compare iterators "
3821 << "from different generators." << std::endl;
3822 const Iterator* typed_other =
3823 CheckedDowncastToActualType<const Iterator>(&other);
3824 // We must report iterators equal if they both point beyond their
3825 // respective ranges. That can happen in a variety of fashions,
3826 // so we have to consult AtEnd().
3827 return (AtEnd() && typed_other->AtEnd()) ||
3829 current1_ == typed_other->current1_ &&
3830 current2_ == typed_other->current2_ &&
3831 current3_ == typed_other->current3_ &&
3832 current4_ == typed_other->current4_ &&
3833 current5_ == typed_other->current5_ &&
3834 current6_ == typed_other->current6_);
3838 Iterator(const Iterator& other)
3839 : base_(other.base_),
3840 begin1_(other.begin1_),
3842 current1_(other.current1_),
3843 begin2_(other.begin2_),
3845 current2_(other.current2_),
3846 begin3_(other.begin3_),
3848 current3_(other.current3_),
3849 begin4_(other.begin4_),
3851 current4_(other.current4_),
3852 begin5_(other.begin5_),
3854 current5_(other.current5_),
3855 begin6_(other.begin6_),
3857 current6_(other.current6_) {
3858 ComputeCurrentValue();
3861 void ComputeCurrentValue() {
3863 current_value_ = ParamType(*current1_, *current2_, *current3_,
3864 *current4_, *current5_, *current6_);
3866 bool AtEnd() const {
3867 // We must report iterator past the end of the range when either of the
3868 // component iterators has reached the end of its range.
3870 current1_ == end1_ ||
3871 current2_ == end2_ ||
3872 current3_ == end3_ ||
3873 current4_ == end4_ ||
3874 current5_ == end5_ ||
3878 // No implementation - assignment is unsupported.
3879 void operator=(const Iterator& other);
3881 const ParamGeneratorInterface<ParamType>* const base_;
3882 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3883 // current[i]_ is the actual traversing iterator.
3884 const typename ParamGenerator<T1>::iterator begin1_;
3885 const typename ParamGenerator<T1>::iterator end1_;
3886 typename ParamGenerator<T1>::iterator current1_;
3887 const typename ParamGenerator<T2>::iterator begin2_;
3888 const typename ParamGenerator<T2>::iterator end2_;
3889 typename ParamGenerator<T2>::iterator current2_;
3890 const typename ParamGenerator<T3>::iterator begin3_;
3891 const typename ParamGenerator<T3>::iterator end3_;
3892 typename ParamGenerator<T3>::iterator current3_;
3893 const typename ParamGenerator<T4>::iterator begin4_;
3894 const typename ParamGenerator<T4>::iterator end4_;
3895 typename ParamGenerator<T4>::iterator current4_;
3896 const typename ParamGenerator<T5>::iterator begin5_;
3897 const typename ParamGenerator<T5>::iterator end5_;
3898 typename ParamGenerator<T5>::iterator current5_;
3899 const typename ParamGenerator<T6>::iterator begin6_;
3900 const typename ParamGenerator<T6>::iterator end6_;
3901 typename ParamGenerator<T6>::iterator current6_;
3902 ParamType current_value_;
3903 }; // class CartesianProductGenerator6::Iterator
3905 // No implementation - assignment is unsupported.
3906 void operator=(const CartesianProductGenerator6& other);
3908 const ParamGenerator<T1> g1_;
3909 const ParamGenerator<T2> g2_;
3910 const ParamGenerator<T3> g3_;
3911 const ParamGenerator<T4> g4_;
3912 const ParamGenerator<T5> g5_;
3913 const ParamGenerator<T6> g6_;
3914 }; // class CartesianProductGenerator6
3917 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3918 typename T6, typename T7>
3919 class CartesianProductGenerator7
3920 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
3923 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3925 CartesianProductGenerator7(const ParamGenerator<T1>& g1,
3926 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3927 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3928 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
3929 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3930 virtual ~CartesianProductGenerator7() {}
3932 virtual ParamIteratorInterface<ParamType>* Begin() const {
3933 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3934 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3937 virtual ParamIteratorInterface<ParamType>* End() const {
3938 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3939 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3943 class Iterator : public ParamIteratorInterface<ParamType> {
3945 Iterator(const ParamGeneratorInterface<ParamType>* base,
3946 const ParamGenerator<T1>& g1,
3947 const typename ParamGenerator<T1>::iterator& current1,
3948 const ParamGenerator<T2>& g2,
3949 const typename ParamGenerator<T2>::iterator& current2,
3950 const ParamGenerator<T3>& g3,
3951 const typename ParamGenerator<T3>::iterator& current3,
3952 const ParamGenerator<T4>& g4,
3953 const typename ParamGenerator<T4>::iterator& current4,
3954 const ParamGenerator<T5>& g5,
3955 const typename ParamGenerator<T5>::iterator& current5,
3956 const ParamGenerator<T6>& g6,
3957 const typename ParamGenerator<T6>::iterator& current6,
3958 const ParamGenerator<T7>& g7,
3959 const typename ParamGenerator<T7>::iterator& current7)
3961 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3962 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3963 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3964 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3965 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3966 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3967 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
3968 ComputeCurrentValue();
3970 virtual ~Iterator() {}
3972 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3975 // Advance should not be called on beyond-of-range iterators
3976 // so no component iterators must be beyond end of range, either.
3977 virtual void Advance() {
3980 if (current7_ == end7_) {
3981 current7_ = begin7_;
3984 if (current6_ == end6_) {
3985 current6_ = begin6_;
3988 if (current5_ == end5_) {
3989 current5_ = begin5_;
3992 if (current4_ == end4_) {
3993 current4_ = begin4_;
3996 if (current3_ == end3_) {
3997 current3_ = begin3_;
4000 if (current2_ == end2_) {
4001 current2_ = begin2_;
4004 ComputeCurrentValue();
4006 virtual ParamIteratorInterface<ParamType>* Clone() const {
4007 return new Iterator(*this);
4009 virtual const ParamType* Current() const { return ¤t_value_; }
4010 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4011 // Having the same base generator guarantees that the other
4012 // iterator is of the same type and we can downcast.
4013 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4014 << "The program attempted to compare iterators "
4015 << "from different generators." << std::endl;
4016 const Iterator* typed_other =
4017 CheckedDowncastToActualType<const Iterator>(&other);
4018 // We must report iterators equal if they both point beyond their
4019 // respective ranges. That can happen in a variety of fashions,
4020 // so we have to consult AtEnd().
4021 return (AtEnd() && typed_other->AtEnd()) ||
4023 current1_ == typed_other->current1_ &&
4024 current2_ == typed_other->current2_ &&
4025 current3_ == typed_other->current3_ &&
4026 current4_ == typed_other->current4_ &&
4027 current5_ == typed_other->current5_ &&
4028 current6_ == typed_other->current6_ &&
4029 current7_ == typed_other->current7_);
4033 Iterator(const Iterator& other)
4034 : base_(other.base_),
4035 begin1_(other.begin1_),
4037 current1_(other.current1_),
4038 begin2_(other.begin2_),
4040 current2_(other.current2_),
4041 begin3_(other.begin3_),
4043 current3_(other.current3_),
4044 begin4_(other.begin4_),
4046 current4_(other.current4_),
4047 begin5_(other.begin5_),
4049 current5_(other.current5_),
4050 begin6_(other.begin6_),
4052 current6_(other.current6_),
4053 begin7_(other.begin7_),
4055 current7_(other.current7_) {
4056 ComputeCurrentValue();
4059 void ComputeCurrentValue() {
4061 current_value_ = ParamType(*current1_, *current2_, *current3_,
4062 *current4_, *current5_, *current6_, *current7_);
4064 bool AtEnd() const {
4065 // We must report iterator past the end of the range when either of the
4066 // component iterators has reached the end of its range.
4068 current1_ == end1_ ||
4069 current2_ == end2_ ||
4070 current3_ == end3_ ||
4071 current4_ == end4_ ||
4072 current5_ == end5_ ||
4073 current6_ == end6_ ||
4077 // No implementation - assignment is unsupported.
4078 void operator=(const Iterator& other);
4080 const ParamGeneratorInterface<ParamType>* const base_;
4081 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4082 // current[i]_ is the actual traversing iterator.
4083 const typename ParamGenerator<T1>::iterator begin1_;
4084 const typename ParamGenerator<T1>::iterator end1_;
4085 typename ParamGenerator<T1>::iterator current1_;
4086 const typename ParamGenerator<T2>::iterator begin2_;
4087 const typename ParamGenerator<T2>::iterator end2_;
4088 typename ParamGenerator<T2>::iterator current2_;
4089 const typename ParamGenerator<T3>::iterator begin3_;
4090 const typename ParamGenerator<T3>::iterator end3_;
4091 typename ParamGenerator<T3>::iterator current3_;
4092 const typename ParamGenerator<T4>::iterator begin4_;
4093 const typename ParamGenerator<T4>::iterator end4_;
4094 typename ParamGenerator<T4>::iterator current4_;
4095 const typename ParamGenerator<T5>::iterator begin5_;
4096 const typename ParamGenerator<T5>::iterator end5_;
4097 typename ParamGenerator<T5>::iterator current5_;
4098 const typename ParamGenerator<T6>::iterator begin6_;
4099 const typename ParamGenerator<T6>::iterator end6_;
4100 typename ParamGenerator<T6>::iterator current6_;
4101 const typename ParamGenerator<T7>::iterator begin7_;
4102 const typename ParamGenerator<T7>::iterator end7_;
4103 typename ParamGenerator<T7>::iterator current7_;
4104 ParamType current_value_;
4105 }; // class CartesianProductGenerator7::Iterator
4107 // No implementation - assignment is unsupported.
4108 void operator=(const CartesianProductGenerator7& other);
4110 const ParamGenerator<T1> g1_;
4111 const ParamGenerator<T2> g2_;
4112 const ParamGenerator<T3> g3_;
4113 const ParamGenerator<T4> g4_;
4114 const ParamGenerator<T5> g5_;
4115 const ParamGenerator<T6> g6_;
4116 const ParamGenerator<T7> g7_;
4117 }; // class CartesianProductGenerator7
4120 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4121 typename T6, typename T7, typename T8>
4122 class CartesianProductGenerator8
4123 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4126 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4128 CartesianProductGenerator8(const ParamGenerator<T1>& g1,
4129 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4130 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4131 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4132 const ParamGenerator<T8>& g8)
4133 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4135 virtual ~CartesianProductGenerator8() {}
4137 virtual ParamIteratorInterface<ParamType>* Begin() const {
4138 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4139 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4140 g7_.begin(), g8_, g8_.begin());
4142 virtual ParamIteratorInterface<ParamType>* End() const {
4143 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4144 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4149 class Iterator : public ParamIteratorInterface<ParamType> {
4151 Iterator(const ParamGeneratorInterface<ParamType>* base,
4152 const ParamGenerator<T1>& g1,
4153 const typename ParamGenerator<T1>::iterator& current1,
4154 const ParamGenerator<T2>& g2,
4155 const typename ParamGenerator<T2>::iterator& current2,
4156 const ParamGenerator<T3>& g3,
4157 const typename ParamGenerator<T3>::iterator& current3,
4158 const ParamGenerator<T4>& g4,
4159 const typename ParamGenerator<T4>::iterator& current4,
4160 const ParamGenerator<T5>& g5,
4161 const typename ParamGenerator<T5>::iterator& current5,
4162 const ParamGenerator<T6>& g6,
4163 const typename ParamGenerator<T6>::iterator& current6,
4164 const ParamGenerator<T7>& g7,
4165 const typename ParamGenerator<T7>::iterator& current7,
4166 const ParamGenerator<T8>& g8,
4167 const typename ParamGenerator<T8>::iterator& current8)
4169 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4170 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4171 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4172 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4173 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4174 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4175 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4176 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
4177 ComputeCurrentValue();
4179 virtual ~Iterator() {}
4181 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4184 // Advance should not be called on beyond-of-range iterators
4185 // so no component iterators must be beyond end of range, either.
4186 virtual void Advance() {
4189 if (current8_ == end8_) {
4190 current8_ = begin8_;
4193 if (current7_ == end7_) {
4194 current7_ = begin7_;
4197 if (current6_ == end6_) {
4198 current6_ = begin6_;
4201 if (current5_ == end5_) {
4202 current5_ = begin5_;
4205 if (current4_ == end4_) {
4206 current4_ = begin4_;
4209 if (current3_ == end3_) {
4210 current3_ = begin3_;
4213 if (current2_ == end2_) {
4214 current2_ = begin2_;
4217 ComputeCurrentValue();
4219 virtual ParamIteratorInterface<ParamType>* Clone() const {
4220 return new Iterator(*this);
4222 virtual const ParamType* Current() const { return ¤t_value_; }
4223 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4224 // Having the same base generator guarantees that the other
4225 // iterator is of the same type and we can downcast.
4226 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4227 << "The program attempted to compare iterators "
4228 << "from different generators." << std::endl;
4229 const Iterator* typed_other =
4230 CheckedDowncastToActualType<const Iterator>(&other);
4231 // We must report iterators equal if they both point beyond their
4232 // respective ranges. That can happen in a variety of fashions,
4233 // so we have to consult AtEnd().
4234 return (AtEnd() && typed_other->AtEnd()) ||
4236 current1_ == typed_other->current1_ &&
4237 current2_ == typed_other->current2_ &&
4238 current3_ == typed_other->current3_ &&
4239 current4_ == typed_other->current4_ &&
4240 current5_ == typed_other->current5_ &&
4241 current6_ == typed_other->current6_ &&
4242 current7_ == typed_other->current7_ &&
4243 current8_ == typed_other->current8_);
4247 Iterator(const Iterator& other)
4248 : base_(other.base_),
4249 begin1_(other.begin1_),
4251 current1_(other.current1_),
4252 begin2_(other.begin2_),
4254 current2_(other.current2_),
4255 begin3_(other.begin3_),
4257 current3_(other.current3_),
4258 begin4_(other.begin4_),
4260 current4_(other.current4_),
4261 begin5_(other.begin5_),
4263 current5_(other.current5_),
4264 begin6_(other.begin6_),
4266 current6_(other.current6_),
4267 begin7_(other.begin7_),
4269 current7_(other.current7_),
4270 begin8_(other.begin8_),
4272 current8_(other.current8_) {
4273 ComputeCurrentValue();
4276 void ComputeCurrentValue() {
4278 current_value_ = ParamType(*current1_, *current2_, *current3_,
4279 *current4_, *current5_, *current6_, *current7_, *current8_);
4281 bool AtEnd() const {
4282 // We must report iterator past the end of the range when either of the
4283 // component iterators has reached the end of its range.
4285 current1_ == end1_ ||
4286 current2_ == end2_ ||
4287 current3_ == end3_ ||
4288 current4_ == end4_ ||
4289 current5_ == end5_ ||
4290 current6_ == end6_ ||
4291 current7_ == end7_ ||
4295 // No implementation - assignment is unsupported.
4296 void operator=(const Iterator& other);
4298 const ParamGeneratorInterface<ParamType>* const base_;
4299 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4300 // current[i]_ is the actual traversing iterator.
4301 const typename ParamGenerator<T1>::iterator begin1_;
4302 const typename ParamGenerator<T1>::iterator end1_;
4303 typename ParamGenerator<T1>::iterator current1_;
4304 const typename ParamGenerator<T2>::iterator begin2_;
4305 const typename ParamGenerator<T2>::iterator end2_;
4306 typename ParamGenerator<T2>::iterator current2_;
4307 const typename ParamGenerator<T3>::iterator begin3_;
4308 const typename ParamGenerator<T3>::iterator end3_;
4309 typename ParamGenerator<T3>::iterator current3_;
4310 const typename ParamGenerator<T4>::iterator begin4_;
4311 const typename ParamGenerator<T4>::iterator end4_;
4312 typename ParamGenerator<T4>::iterator current4_;
4313 const typename ParamGenerator<T5>::iterator begin5_;
4314 const typename ParamGenerator<T5>::iterator end5_;
4315 typename ParamGenerator<T5>::iterator current5_;
4316 const typename ParamGenerator<T6>::iterator begin6_;
4317 const typename ParamGenerator<T6>::iterator end6_;
4318 typename ParamGenerator<T6>::iterator current6_;
4319 const typename ParamGenerator<T7>::iterator begin7_;
4320 const typename ParamGenerator<T7>::iterator end7_;
4321 typename ParamGenerator<T7>::iterator current7_;
4322 const typename ParamGenerator<T8>::iterator begin8_;
4323 const typename ParamGenerator<T8>::iterator end8_;
4324 typename ParamGenerator<T8>::iterator current8_;
4325 ParamType current_value_;
4326 }; // class CartesianProductGenerator8::Iterator
4328 // No implementation - assignment is unsupported.
4329 void operator=(const CartesianProductGenerator8& other);
4331 const ParamGenerator<T1> g1_;
4332 const ParamGenerator<T2> g2_;
4333 const ParamGenerator<T3> g3_;
4334 const ParamGenerator<T4> g4_;
4335 const ParamGenerator<T5> g5_;
4336 const ParamGenerator<T6> g6_;
4337 const ParamGenerator<T7> g7_;
4338 const ParamGenerator<T8> g8_;
4339 }; // class CartesianProductGenerator8
4342 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4343 typename T6, typename T7, typename T8, typename T9>
4344 class CartesianProductGenerator9
4345 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4348 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4350 CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4351 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4352 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4353 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4354 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4355 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4357 virtual ~CartesianProductGenerator9() {}
4359 virtual ParamIteratorInterface<ParamType>* Begin() const {
4360 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4361 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4362 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4364 virtual ParamIteratorInterface<ParamType>* End() const {
4365 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4366 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4367 g8_.end(), g9_, g9_.end());
4371 class Iterator : public ParamIteratorInterface<ParamType> {
4373 Iterator(const ParamGeneratorInterface<ParamType>* base,
4374 const ParamGenerator<T1>& g1,
4375 const typename ParamGenerator<T1>::iterator& current1,
4376 const ParamGenerator<T2>& g2,
4377 const typename ParamGenerator<T2>::iterator& current2,
4378 const ParamGenerator<T3>& g3,
4379 const typename ParamGenerator<T3>::iterator& current3,
4380 const ParamGenerator<T4>& g4,
4381 const typename ParamGenerator<T4>::iterator& current4,
4382 const ParamGenerator<T5>& g5,
4383 const typename ParamGenerator<T5>::iterator& current5,
4384 const ParamGenerator<T6>& g6,
4385 const typename ParamGenerator<T6>::iterator& current6,
4386 const ParamGenerator<T7>& g7,
4387 const typename ParamGenerator<T7>::iterator& current7,
4388 const ParamGenerator<T8>& g8,
4389 const typename ParamGenerator<T8>::iterator& current8,
4390 const ParamGenerator<T9>& g9,
4391 const typename ParamGenerator<T9>::iterator& current9)
4393 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4394 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4395 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4396 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4397 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4398 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4399 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4400 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4401 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4402 ComputeCurrentValue();
4404 virtual ~Iterator() {}
4406 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4409 // Advance should not be called on beyond-of-range iterators
4410 // so no component iterators must be beyond end of range, either.
4411 virtual void Advance() {
4414 if (current9_ == end9_) {
4415 current9_ = begin9_;
4418 if (current8_ == end8_) {
4419 current8_ = begin8_;
4422 if (current7_ == end7_) {
4423 current7_ = begin7_;
4426 if (current6_ == end6_) {
4427 current6_ = begin6_;
4430 if (current5_ == end5_) {
4431 current5_ = begin5_;
4434 if (current4_ == end4_) {
4435 current4_ = begin4_;
4438 if (current3_ == end3_) {
4439 current3_ = begin3_;
4442 if (current2_ == end2_) {
4443 current2_ = begin2_;
4446 ComputeCurrentValue();
4448 virtual ParamIteratorInterface<ParamType>* Clone() const {
4449 return new Iterator(*this);
4451 virtual const ParamType* Current() const { return ¤t_value_; }
4452 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4453 // Having the same base generator guarantees that the other
4454 // iterator is of the same type and we can downcast.
4455 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4456 << "The program attempted to compare iterators "
4457 << "from different generators." << std::endl;
4458 const Iterator* typed_other =
4459 CheckedDowncastToActualType<const Iterator>(&other);
4460 // We must report iterators equal if they both point beyond their
4461 // respective ranges. That can happen in a variety of fashions,
4462 // so we have to consult AtEnd().
4463 return (AtEnd() && typed_other->AtEnd()) ||
4465 current1_ == typed_other->current1_ &&
4466 current2_ == typed_other->current2_ &&
4467 current3_ == typed_other->current3_ &&
4468 current4_ == typed_other->current4_ &&
4469 current5_ == typed_other->current5_ &&
4470 current6_ == typed_other->current6_ &&
4471 current7_ == typed_other->current7_ &&
4472 current8_ == typed_other->current8_ &&
4473 current9_ == typed_other->current9_);
4477 Iterator(const Iterator& other)
4478 : base_(other.base_),
4479 begin1_(other.begin1_),
4481 current1_(other.current1_),
4482 begin2_(other.begin2_),
4484 current2_(other.current2_),
4485 begin3_(other.begin3_),
4487 current3_(other.current3_),
4488 begin4_(other.begin4_),
4490 current4_(other.current4_),
4491 begin5_(other.begin5_),
4493 current5_(other.current5_),
4494 begin6_(other.begin6_),
4496 current6_(other.current6_),
4497 begin7_(other.begin7_),
4499 current7_(other.current7_),
4500 begin8_(other.begin8_),
4502 current8_(other.current8_),
4503 begin9_(other.begin9_),
4505 current9_(other.current9_) {
4506 ComputeCurrentValue();
4509 void ComputeCurrentValue() {
4511 current_value_ = ParamType(*current1_, *current2_, *current3_,
4512 *current4_, *current5_, *current6_, *current7_, *current8_,
4515 bool AtEnd() const {
4516 // We must report iterator past the end of the range when either of the
4517 // component iterators has reached the end of its range.
4519 current1_ == end1_ ||
4520 current2_ == end2_ ||
4521 current3_ == end3_ ||
4522 current4_ == end4_ ||
4523 current5_ == end5_ ||
4524 current6_ == end6_ ||
4525 current7_ == end7_ ||
4526 current8_ == end8_ ||
4530 // No implementation - assignment is unsupported.
4531 void operator=(const Iterator& other);
4533 const ParamGeneratorInterface<ParamType>* const base_;
4534 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4535 // current[i]_ is the actual traversing iterator.
4536 const typename ParamGenerator<T1>::iterator begin1_;
4537 const typename ParamGenerator<T1>::iterator end1_;
4538 typename ParamGenerator<T1>::iterator current1_;
4539 const typename ParamGenerator<T2>::iterator begin2_;
4540 const typename ParamGenerator<T2>::iterator end2_;
4541 typename ParamGenerator<T2>::iterator current2_;
4542 const typename ParamGenerator<T3>::iterator begin3_;
4543 const typename ParamGenerator<T3>::iterator end3_;
4544 typename ParamGenerator<T3>::iterator current3_;
4545 const typename ParamGenerator<T4>::iterator begin4_;
4546 const typename ParamGenerator<T4>::iterator end4_;
4547 typename ParamGenerator<T4>::iterator current4_;
4548 const typename ParamGenerator<T5>::iterator begin5_;
4549 const typename ParamGenerator<T5>::iterator end5_;
4550 typename ParamGenerator<T5>::iterator current5_;
4551 const typename ParamGenerator<T6>::iterator begin6_;
4552 const typename ParamGenerator<T6>::iterator end6_;
4553 typename ParamGenerator<T6>::iterator current6_;
4554 const typename ParamGenerator<T7>::iterator begin7_;
4555 const typename ParamGenerator<T7>::iterator end7_;
4556 typename ParamGenerator<T7>::iterator current7_;
4557 const typename ParamGenerator<T8>::iterator begin8_;
4558 const typename ParamGenerator<T8>::iterator end8_;
4559 typename ParamGenerator<T8>::iterator current8_;
4560 const typename ParamGenerator<T9>::iterator begin9_;
4561 const typename ParamGenerator<T9>::iterator end9_;
4562 typename ParamGenerator<T9>::iterator current9_;
4563 ParamType current_value_;
4564 }; // class CartesianProductGenerator9::Iterator
4566 // No implementation - assignment is unsupported.
4567 void operator=(const CartesianProductGenerator9& other);
4569 const ParamGenerator<T1> g1_;
4570 const ParamGenerator<T2> g2_;
4571 const ParamGenerator<T3> g3_;
4572 const ParamGenerator<T4> g4_;
4573 const ParamGenerator<T5> g5_;
4574 const ParamGenerator<T6> g6_;
4575 const ParamGenerator<T7> g7_;
4576 const ParamGenerator<T8> g8_;
4577 const ParamGenerator<T9> g9_;
4578 }; // class CartesianProductGenerator9
4581 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4582 typename T6, typename T7, typename T8, typename T9, typename T10>
4583 class CartesianProductGenerator10
4584 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4585 T7, T8, T9, T10> > {
4587 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4589 CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4590 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4591 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4592 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4593 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4594 const ParamGenerator<T10>& g10)
4595 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4596 g9_(g9), g10_(g10) {}
4597 virtual ~CartesianProductGenerator10() {}
4599 virtual ParamIteratorInterface<ParamType>* Begin() const {
4600 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4601 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4602 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4604 virtual ParamIteratorInterface<ParamType>* End() const {
4605 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4606 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4607 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4611 class Iterator : public ParamIteratorInterface<ParamType> {
4613 Iterator(const ParamGeneratorInterface<ParamType>* base,
4614 const ParamGenerator<T1>& g1,
4615 const typename ParamGenerator<T1>::iterator& current1,
4616 const ParamGenerator<T2>& g2,
4617 const typename ParamGenerator<T2>::iterator& current2,
4618 const ParamGenerator<T3>& g3,
4619 const typename ParamGenerator<T3>::iterator& current3,
4620 const ParamGenerator<T4>& g4,
4621 const typename ParamGenerator<T4>::iterator& current4,
4622 const ParamGenerator<T5>& g5,
4623 const typename ParamGenerator<T5>::iterator& current5,
4624 const ParamGenerator<T6>& g6,
4625 const typename ParamGenerator<T6>::iterator& current6,
4626 const ParamGenerator<T7>& g7,
4627 const typename ParamGenerator<T7>::iterator& current7,
4628 const ParamGenerator<T8>& g8,
4629 const typename ParamGenerator<T8>::iterator& current8,
4630 const ParamGenerator<T9>& g9,
4631 const typename ParamGenerator<T9>::iterator& current9,
4632 const ParamGenerator<T10>& g10,
4633 const typename ParamGenerator<T10>::iterator& current10)
4635 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4636 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4637 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4638 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4639 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4640 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4641 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4642 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4643 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4644 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
4645 ComputeCurrentValue();
4647 virtual ~Iterator() {}
4649 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4652 // Advance should not be called on beyond-of-range iterators
4653 // so no component iterators must be beyond end of range, either.
4654 virtual void Advance() {
4657 if (current10_ == end10_) {
4658 current10_ = begin10_;
4661 if (current9_ == end9_) {
4662 current9_ = begin9_;
4665 if (current8_ == end8_) {
4666 current8_ = begin8_;
4669 if (current7_ == end7_) {
4670 current7_ = begin7_;
4673 if (current6_ == end6_) {
4674 current6_ = begin6_;
4677 if (current5_ == end5_) {
4678 current5_ = begin5_;
4681 if (current4_ == end4_) {
4682 current4_ = begin4_;
4685 if (current3_ == end3_) {
4686 current3_ = begin3_;
4689 if (current2_ == end2_) {
4690 current2_ = begin2_;
4693 ComputeCurrentValue();
4695 virtual ParamIteratorInterface<ParamType>* Clone() const {
4696 return new Iterator(*this);
4698 virtual const ParamType* Current() const { return ¤t_value_; }
4699 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4700 // Having the same base generator guarantees that the other
4701 // iterator is of the same type and we can downcast.
4702 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4703 << "The program attempted to compare iterators "
4704 << "from different generators." << std::endl;
4705 const Iterator* typed_other =
4706 CheckedDowncastToActualType<const Iterator>(&other);
4707 // We must report iterators equal if they both point beyond their
4708 // respective ranges. That can happen in a variety of fashions,
4709 // so we have to consult AtEnd().
4710 return (AtEnd() && typed_other->AtEnd()) ||
4712 current1_ == typed_other->current1_ &&
4713 current2_ == typed_other->current2_ &&
4714 current3_ == typed_other->current3_ &&
4715 current4_ == typed_other->current4_ &&
4716 current5_ == typed_other->current5_ &&
4717 current6_ == typed_other->current6_ &&
4718 current7_ == typed_other->current7_ &&
4719 current8_ == typed_other->current8_ &&
4720 current9_ == typed_other->current9_ &&
4721 current10_ == typed_other->current10_);
4725 Iterator(const Iterator& other)
4726 : base_(other.base_),
4727 begin1_(other.begin1_),
4729 current1_(other.current1_),
4730 begin2_(other.begin2_),
4732 current2_(other.current2_),
4733 begin3_(other.begin3_),
4735 current3_(other.current3_),
4736 begin4_(other.begin4_),
4738 current4_(other.current4_),
4739 begin5_(other.begin5_),
4741 current5_(other.current5_),
4742 begin6_(other.begin6_),
4744 current6_(other.current6_),
4745 begin7_(other.begin7_),
4747 current7_(other.current7_),
4748 begin8_(other.begin8_),
4750 current8_(other.current8_),
4751 begin9_(other.begin9_),
4753 current9_(other.current9_),
4754 begin10_(other.begin10_),
4755 end10_(other.end10_),
4756 current10_(other.current10_) {
4757 ComputeCurrentValue();
4760 void ComputeCurrentValue() {
4762 current_value_ = ParamType(*current1_, *current2_, *current3_,
4763 *current4_, *current5_, *current6_, *current7_, *current8_,
4764 *current9_, *current10_);
4766 bool AtEnd() const {
4767 // We must report iterator past the end of the range when either of the
4768 // component iterators has reached the end of its range.
4770 current1_ == end1_ ||
4771 current2_ == end2_ ||
4772 current3_ == end3_ ||
4773 current4_ == end4_ ||
4774 current5_ == end5_ ||
4775 current6_ == end6_ ||
4776 current7_ == end7_ ||
4777 current8_ == end8_ ||
4778 current9_ == end9_ ||
4779 current10_ == end10_;
4782 // No implementation - assignment is unsupported.
4783 void operator=(const Iterator& other);
4785 const ParamGeneratorInterface<ParamType>* const base_;
4786 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4787 // current[i]_ is the actual traversing iterator.
4788 const typename ParamGenerator<T1>::iterator begin1_;
4789 const typename ParamGenerator<T1>::iterator end1_;
4790 typename ParamGenerator<T1>::iterator current1_;
4791 const typename ParamGenerator<T2>::iterator begin2_;
4792 const typename ParamGenerator<T2>::iterator end2_;
4793 typename ParamGenerator<T2>::iterator current2_;
4794 const typename ParamGenerator<T3>::iterator begin3_;
4795 const typename ParamGenerator<T3>::iterator end3_;
4796 typename ParamGenerator<T3>::iterator current3_;
4797 const typename ParamGenerator<T4>::iterator begin4_;
4798 const typename ParamGenerator<T4>::iterator end4_;
4799 typename ParamGenerator<T4>::iterator current4_;
4800 const typename ParamGenerator<T5>::iterator begin5_;
4801 const typename ParamGenerator<T5>::iterator end5_;
4802 typename ParamGenerator<T5>::iterator current5_;
4803 const typename ParamGenerator<T6>::iterator begin6_;
4804 const typename ParamGenerator<T6>::iterator end6_;
4805 typename ParamGenerator<T6>::iterator current6_;
4806 const typename ParamGenerator<T7>::iterator begin7_;
4807 const typename ParamGenerator<T7>::iterator end7_;
4808 typename ParamGenerator<T7>::iterator current7_;
4809 const typename ParamGenerator<T8>::iterator begin8_;
4810 const typename ParamGenerator<T8>::iterator end8_;
4811 typename ParamGenerator<T8>::iterator current8_;
4812 const typename ParamGenerator<T9>::iterator begin9_;
4813 const typename ParamGenerator<T9>::iterator end9_;
4814 typename ParamGenerator<T9>::iterator current9_;
4815 const typename ParamGenerator<T10>::iterator begin10_;
4816 const typename ParamGenerator<T10>::iterator end10_;
4817 typename ParamGenerator<T10>::iterator current10_;
4818 ParamType current_value_;
4819 }; // class CartesianProductGenerator10::Iterator
4821 // No implementation - assignment is unsupported.
4822 void operator=(const CartesianProductGenerator10& other);
4824 const ParamGenerator<T1> g1_;
4825 const ParamGenerator<T2> g2_;
4826 const ParamGenerator<T3> g3_;
4827 const ParamGenerator<T4> g4_;
4828 const ParamGenerator<T5> g5_;
4829 const ParamGenerator<T6> g6_;
4830 const ParamGenerator<T7> g7_;
4831 const ParamGenerator<T8> g8_;
4832 const ParamGenerator<T9> g9_;
4833 const ParamGenerator<T10> g10_;
4834 }; // class CartesianProductGenerator10
4837 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
4839 // Helper classes providing Combine() with polymorphic features. They allow
4840 // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
4841 // convertible to U.
4843 template <class Generator1, class Generator2>
4844 class CartesianProductHolder2 {
4846 CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
4847 : g1_(g1), g2_(g2) {}
4848 template <typename T1, typename T2>
4849 operator ParamGenerator< ::testing::tuple<T1, T2> >() const {
4850 return ParamGenerator< ::testing::tuple<T1, T2> >(
4851 new CartesianProductGenerator2<T1, T2>(
4852 static_cast<ParamGenerator<T1> >(g1_),
4853 static_cast<ParamGenerator<T2> >(g2_)));
4857 // No implementation - assignment is unsupported.
4858 void operator=(const CartesianProductHolder2& other);
4860 const Generator1 g1_;
4861 const Generator2 g2_;
4862 }; // class CartesianProductHolder2
4864 template <class Generator1, class Generator2, class Generator3>
4865 class CartesianProductHolder3 {
4867 CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
4868 const Generator3& g3)
4869 : g1_(g1), g2_(g2), g3_(g3) {}
4870 template <typename T1, typename T2, typename T3>
4871 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const {
4872 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
4873 new CartesianProductGenerator3<T1, T2, T3>(
4874 static_cast<ParamGenerator<T1> >(g1_),
4875 static_cast<ParamGenerator<T2> >(g2_),
4876 static_cast<ParamGenerator<T3> >(g3_)));
4880 // No implementation - assignment is unsupported.
4881 void operator=(const CartesianProductHolder3& other);
4883 const Generator1 g1_;
4884 const Generator2 g2_;
4885 const Generator3 g3_;
4886 }; // class CartesianProductHolder3
4888 template <class Generator1, class Generator2, class Generator3,
4890 class CartesianProductHolder4 {
4892 CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
4893 const Generator3& g3, const Generator4& g4)
4894 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4895 template <typename T1, typename T2, typename T3, typename T4>
4896 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const {
4897 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
4898 new CartesianProductGenerator4<T1, T2, T3, T4>(
4899 static_cast<ParamGenerator<T1> >(g1_),
4900 static_cast<ParamGenerator<T2> >(g2_),
4901 static_cast<ParamGenerator<T3> >(g3_),
4902 static_cast<ParamGenerator<T4> >(g4_)));
4906 // No implementation - assignment is unsupported.
4907 void operator=(const CartesianProductHolder4& other);
4909 const Generator1 g1_;
4910 const Generator2 g2_;
4911 const Generator3 g3_;
4912 const Generator4 g4_;
4913 }; // class CartesianProductHolder4
4915 template <class Generator1, class Generator2, class Generator3,
4916 class Generator4, class Generator5>
4917 class CartesianProductHolder5 {
4919 CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
4920 const Generator3& g3, const Generator4& g4, const Generator5& g5)
4921 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4922 template <typename T1, typename T2, typename T3, typename T4, typename T5>
4923 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const {
4924 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
4925 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4926 static_cast<ParamGenerator<T1> >(g1_),
4927 static_cast<ParamGenerator<T2> >(g2_),
4928 static_cast<ParamGenerator<T3> >(g3_),
4929 static_cast<ParamGenerator<T4> >(g4_),
4930 static_cast<ParamGenerator<T5> >(g5_)));
4934 // No implementation - assignment is unsupported.
4935 void operator=(const CartesianProductHolder5& other);
4937 const Generator1 g1_;
4938 const Generator2 g2_;
4939 const Generator3 g3_;
4940 const Generator4 g4_;
4941 const Generator5 g5_;
4942 }; // class CartesianProductHolder5
4944 template <class Generator1, class Generator2, class Generator3,
4945 class Generator4, class Generator5, class Generator6>
4946 class CartesianProductHolder6 {
4948 CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
4949 const Generator3& g3, const Generator4& g4, const Generator5& g5,
4950 const Generator6& g6)
4951 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4952 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4954 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const {
4955 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
4956 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4957 static_cast<ParamGenerator<T1> >(g1_),
4958 static_cast<ParamGenerator<T2> >(g2_),
4959 static_cast<ParamGenerator<T3> >(g3_),
4960 static_cast<ParamGenerator<T4> >(g4_),
4961 static_cast<ParamGenerator<T5> >(g5_),
4962 static_cast<ParamGenerator<T6> >(g6_)));
4966 // No implementation - assignment is unsupported.
4967 void operator=(const CartesianProductHolder6& other);
4969 const Generator1 g1_;
4970 const Generator2 g2_;
4971 const Generator3 g3_;
4972 const Generator4 g4_;
4973 const Generator5 g5_;
4974 const Generator6 g6_;
4975 }; // class CartesianProductHolder6
4977 template <class Generator1, class Generator2, class Generator3,
4978 class Generator4, class Generator5, class Generator6, class Generator7>
4979 class CartesianProductHolder7 {
4981 CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
4982 const Generator3& g3, const Generator4& g4, const Generator5& g5,
4983 const Generator6& g6, const Generator7& g7)
4984 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4985 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4986 typename T6, typename T7>
4987 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4989 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4990 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4991 static_cast<ParamGenerator<T1> >(g1_),
4992 static_cast<ParamGenerator<T2> >(g2_),
4993 static_cast<ParamGenerator<T3> >(g3_),
4994 static_cast<ParamGenerator<T4> >(g4_),
4995 static_cast<ParamGenerator<T5> >(g5_),
4996 static_cast<ParamGenerator<T6> >(g6_),
4997 static_cast<ParamGenerator<T7> >(g7_)));
5001 // No implementation - assignment is unsupported.
5002 void operator=(const CartesianProductHolder7& other);
5004 const Generator1 g1_;
5005 const Generator2 g2_;
5006 const Generator3 g3_;
5007 const Generator4 g4_;
5008 const Generator5 g5_;
5009 const Generator6 g6_;
5010 const Generator7 g7_;
5011 }; // class CartesianProductHolder7
5013 template <class Generator1, class Generator2, class Generator3,
5014 class Generator4, class Generator5, class Generator6, class Generator7,
5016 class CartesianProductHolder8 {
5018 CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
5019 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5020 const Generator6& g6, const Generator7& g7, const Generator8& g8)
5021 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5023 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5024 typename T6, typename T7, typename T8>
5025 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,
5027 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5028 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5029 static_cast<ParamGenerator<T1> >(g1_),
5030 static_cast<ParamGenerator<T2> >(g2_),
5031 static_cast<ParamGenerator<T3> >(g3_),
5032 static_cast<ParamGenerator<T4> >(g4_),
5033 static_cast<ParamGenerator<T5> >(g5_),
5034 static_cast<ParamGenerator<T6> >(g6_),
5035 static_cast<ParamGenerator<T7> >(g7_),
5036 static_cast<ParamGenerator<T8> >(g8_)));
5040 // No implementation - assignment is unsupported.
5041 void operator=(const CartesianProductHolder8& other);
5043 const Generator1 g1_;
5044 const Generator2 g2_;
5045 const Generator3 g3_;
5046 const Generator4 g4_;
5047 const Generator5 g5_;
5048 const Generator6 g6_;
5049 const Generator7 g7_;
5050 const Generator8 g8_;
5051 }; // class CartesianProductHolder8
5053 template <class Generator1, class Generator2, class Generator3,
5054 class Generator4, class Generator5, class Generator6, class Generator7,
5055 class Generator8, class Generator9>
5056 class CartesianProductHolder9 {
5058 CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
5059 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5060 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5061 const Generator9& g9)
5062 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5064 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5065 typename T6, typename T7, typename T8, typename T9>
5066 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5068 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5070 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5071 static_cast<ParamGenerator<T1> >(g1_),
5072 static_cast<ParamGenerator<T2> >(g2_),
5073 static_cast<ParamGenerator<T3> >(g3_),
5074 static_cast<ParamGenerator<T4> >(g4_),
5075 static_cast<ParamGenerator<T5> >(g5_),
5076 static_cast<ParamGenerator<T6> >(g6_),
5077 static_cast<ParamGenerator<T7> >(g7_),
5078 static_cast<ParamGenerator<T8> >(g8_),
5079 static_cast<ParamGenerator<T9> >(g9_)));
5083 // No implementation - assignment is unsupported.
5084 void operator=(const CartesianProductHolder9& other);
5086 const Generator1 g1_;
5087 const Generator2 g2_;
5088 const Generator3 g3_;
5089 const Generator4 g4_;
5090 const Generator5 g5_;
5091 const Generator6 g6_;
5092 const Generator7 g7_;
5093 const Generator8 g8_;
5094 const Generator9 g9_;
5095 }; // class CartesianProductHolder9
5097 template <class Generator1, class Generator2, class Generator3,
5098 class Generator4, class Generator5, class Generator6, class Generator7,
5099 class Generator8, class Generator9, class Generator10>
5100 class CartesianProductHolder10 {
5102 CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
5103 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5104 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5105 const Generator9& g9, const Generator10& g10)
5106 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5107 g9_(g9), g10_(g10) {}
5108 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5109 typename T6, typename T7, typename T8, typename T9, typename T10>
5110 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5112 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5114 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5116 static_cast<ParamGenerator<T1> >(g1_),
5117 static_cast<ParamGenerator<T2> >(g2_),
5118 static_cast<ParamGenerator<T3> >(g3_),
5119 static_cast<ParamGenerator<T4> >(g4_),
5120 static_cast<ParamGenerator<T5> >(g5_),
5121 static_cast<ParamGenerator<T6> >(g6_),
5122 static_cast<ParamGenerator<T7> >(g7_),
5123 static_cast<ParamGenerator<T8> >(g8_),
5124 static_cast<ParamGenerator<T9> >(g9_),
5125 static_cast<ParamGenerator<T10> >(g10_)));
5129 // No implementation - assignment is unsupported.
5130 void operator=(const CartesianProductHolder10& other);
5132 const Generator1 g1_;
5133 const Generator2 g2_;
5134 const Generator3 g3_;
5135 const Generator4 g4_;
5136 const Generator5 g5_;
5137 const Generator6 g6_;
5138 const Generator7 g7_;
5139 const Generator8 g8_;
5140 const Generator9 g9_;
5141 const Generator10 g10_;
5142 }; // class CartesianProductHolder10
5144 # endif // GTEST_HAS_COMBINE
5146 } // namespace internal
5147 } // namespace testing
5149 #endif // GTEST_HAS_PARAM_TEST
5151 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_