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