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_