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