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 #include <gtest/internal/gtest-port.h>
49 #ifdef GTEST_HAS_PARAM_TEST
51 #include <gtest/internal/gtest-param-util.h>
56 // Used in the Values() function to provide polymorphic capabilities.
57 template <typename T1
>
60 explicit ValueArray1(T1 v1
) : v1_(v1
) {}
63 operator ParamGenerator
<T
>() const { return ValuesIn(&v1_
, &v1_
+ 1); }
69 template <typename T1
, typename T2
>
72 ValueArray2(T1 v1
, T2 v2
) : v1_(v1
), v2_(v2
) {}
75 operator ParamGenerator
<T
>() const {
76 const T array
[] = {v1_
, v2_
};
77 return ValuesIn(array
);
85 template <typename T1
, typename T2
, typename T3
>
88 ValueArray3(T1 v1
, T2 v2
, T3 v3
) : v1_(v1
), v2_(v2
), v3_(v3
) {}
91 operator ParamGenerator
<T
>() const {
92 const T array
[] = {v1_
, v2_
, v3_
};
93 return ValuesIn(array
);
102 template <typename T1
, typename T2
, typename T3
, typename T4
>
105 ValueArray4(T1 v1
, T2 v2
, T3 v3
, T4 v4
) : v1_(v1
), v2_(v2
), v3_(v3
),
108 template <typename T
>
109 operator ParamGenerator
<T
>() const {
110 const T array
[] = {v1_
, v2_
, v3_
, v4_
};
111 return ValuesIn(array
);
121 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
124 ValueArray5(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
) : v1_(v1
), v2_(v2
), v3_(v3
),
127 template <typename T
>
128 operator ParamGenerator
<T
>() const {
129 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
};
130 return ValuesIn(array
);
141 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
145 ValueArray6(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
) : v1_(v1
), v2_(v2
),
146 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
) {}
148 template <typename T
>
149 operator ParamGenerator
<T
>() const {
150 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
};
151 return ValuesIn(array
);
163 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
164 typename T6
, typename T7
>
167 ValueArray7(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
) : v1_(v1
),
168 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
) {}
170 template <typename T
>
171 operator ParamGenerator
<T
>() const {
172 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
};
173 return ValuesIn(array
);
186 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
187 typename T6
, typename T7
, typename T8
>
190 ValueArray8(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
191 T8 v8
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
194 template <typename T
>
195 operator ParamGenerator
<T
>() const {
196 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
};
197 return ValuesIn(array
);
211 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
212 typename T6
, typename T7
, typename T8
, typename T9
>
215 ValueArray9(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
,
216 T9 v9
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
219 template <typename T
>
220 operator ParamGenerator
<T
>() const {
221 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
};
222 return ValuesIn(array
);
237 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
238 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
>
241 ValueArray10(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
242 T10 v10
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
243 v8_(v8
), v9_(v9
), v10_(v10
) {}
245 template <typename T
>
246 operator ParamGenerator
<T
>() const {
247 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
};
248 return ValuesIn(array
);
264 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
265 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
269 ValueArray11(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
270 T10 v10
, T11 v11
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
),
271 v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
) {}
273 template <typename T
>
274 operator ParamGenerator
<T
>() const {
275 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
};
276 return ValuesIn(array
);
293 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
294 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
295 typename T11
, typename T12
>
298 ValueArray12(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
299 T10 v10
, T11 v11
, T12 v12
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
),
300 v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
) {}
302 template <typename T
>
303 operator ParamGenerator
<T
>() const {
304 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
306 return ValuesIn(array
);
324 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
325 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
326 typename T11
, typename T12
, typename T13
>
329 ValueArray13(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
330 T10 v10
, T11 v11
, T12 v12
, T13 v13
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
),
331 v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
),
332 v12_(v12
), v13_(v13
) {}
334 template <typename T
>
335 operator ParamGenerator
<T
>() const {
336 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
338 return ValuesIn(array
);
357 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
358 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
359 typename T11
, typename T12
, typename T13
, typename T14
>
362 ValueArray14(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
363 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
) : v1_(v1
), v2_(v2
), v3_(v3
),
364 v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
365 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
) {}
367 template <typename T
>
368 operator ParamGenerator
<T
>() const {
369 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
371 return ValuesIn(array
);
391 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
392 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
393 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
>
396 ValueArray15(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
397 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
) : v1_(v1
), v2_(v2
),
398 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
399 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
) {}
401 template <typename T
>
402 operator ParamGenerator
<T
>() const {
403 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
404 v12_
, v13_
, v14_
, v15_
};
405 return ValuesIn(array
);
426 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
427 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
428 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
432 ValueArray16(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
433 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
) : v1_(v1
),
434 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
),
435 v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
),
438 template <typename T
>
439 operator ParamGenerator
<T
>() const {
440 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
441 v12_
, v13_
, v14_
, v15_
, v16_
};
442 return ValuesIn(array
);
464 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
465 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
466 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
467 typename T16
, typename T17
>
470 ValueArray17(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
471 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
,
472 T17 v17
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
473 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
474 v15_(v15
), v16_(v16
), v17_(v17
) {}
476 template <typename T
>
477 operator ParamGenerator
<T
>() const {
478 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
479 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
};
480 return ValuesIn(array
);
503 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
504 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
505 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
506 typename T16
, typename T17
, typename T18
>
509 ValueArray18(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
510 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
511 T18 v18
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
512 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
513 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
) {}
515 template <typename T
>
516 operator ParamGenerator
<T
>() const {
517 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
518 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
};
519 return ValuesIn(array
);
543 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
544 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
545 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
546 typename T16
, typename T17
, typename T18
, typename T19
>
549 ValueArray19(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
550 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
551 T18 v18
, T19 v19
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
),
552 v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
),
553 v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
) {}
555 template <typename T
>
556 operator ParamGenerator
<T
>() const {
557 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
558 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
};
559 return ValuesIn(array
);
584 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
585 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
586 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
587 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
>
590 ValueArray20(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
591 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
592 T18 v18
, T19 v19
, T20 v20
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
),
593 v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
),
594 v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
),
595 v19_(v19
), v20_(v20
) {}
597 template <typename T
>
598 operator ParamGenerator
<T
>() const {
599 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
600 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
};
601 return ValuesIn(array
);
627 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
628 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
629 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
630 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
634 ValueArray21(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
635 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
636 T18 v18
, T19 v19
, T20 v20
, T21 v21
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
),
637 v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
),
638 v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
),
639 v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
) {}
641 template <typename T
>
642 operator ParamGenerator
<T
>() const {
643 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
644 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
};
645 return ValuesIn(array
);
672 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
673 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
674 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
675 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
676 typename T21
, typename T22
>
679 ValueArray22(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
680 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
681 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
) : v1_(v1
), v2_(v2
), v3_(v3
),
682 v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
683 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
684 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
) {}
686 template <typename T
>
687 operator ParamGenerator
<T
>() const {
688 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
689 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
};
690 return ValuesIn(array
);
718 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
719 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
720 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
721 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
722 typename T21
, typename T22
, typename T23
>
725 ValueArray23(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
726 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
727 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
) : v1_(v1
), v2_(v2
),
728 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
729 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
730 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
733 template <typename T
>
734 operator ParamGenerator
<T
>() const {
735 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
736 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
,
738 return ValuesIn(array
);
767 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
768 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
769 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
770 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
771 typename T21
, typename T22
, typename T23
, typename T24
>
774 ValueArray24(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
775 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
776 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
) : v1_(v1
),
777 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
),
778 v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
),
779 v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
),
780 v22_(v22
), v23_(v23
), v24_(v24
) {}
782 template <typename T
>
783 operator ParamGenerator
<T
>() const {
784 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
785 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
787 return ValuesIn(array
);
817 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
818 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
819 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
820 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
821 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
>
824 ValueArray25(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
825 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
826 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
,
827 T25 v25
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
828 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
829 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
830 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
) {}
832 template <typename T
>
833 operator ParamGenerator
<T
>() const {
834 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
835 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
837 return ValuesIn(array
);
868 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
869 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
870 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
871 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
872 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
876 ValueArray26(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
877 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
878 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
879 T26 v26
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
880 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
881 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
882 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
) {}
884 template <typename T
>
885 operator ParamGenerator
<T
>() const {
886 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
887 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
889 return ValuesIn(array
);
921 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
922 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
923 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
924 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
925 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
926 typename T26
, typename T27
>
929 ValueArray27(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
930 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
931 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
932 T26 v26
, T27 v27
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
),
933 v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
),
934 v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
),
935 v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
),
936 v26_(v26
), v27_(v27
) {}
938 template <typename T
>
939 operator ParamGenerator
<T
>() const {
940 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
941 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
942 v24_
, v25_
, v26_
, v27_
};
943 return ValuesIn(array
);
976 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
977 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
978 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
979 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
980 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
981 typename T26
, typename T27
, typename T28
>
984 ValueArray28(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
985 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
986 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
987 T26 v26
, T27 v27
, T28 v28
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
),
988 v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
),
989 v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
),
990 v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
),
991 v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
) {}
993 template <typename T
>
994 operator ParamGenerator
<T
>() const {
995 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
996 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
997 v24_
, v25_
, v26_
, v27_
, v28_
};
998 return ValuesIn(array
);
1032 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1033 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1034 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1035 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1036 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1037 typename T26
, typename T27
, typename T28
, typename T29
>
1038 class ValueArray29
{
1040 ValueArray29(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1041 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1042 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1043 T26 v26
, T27 v27
, T28 v28
, T29 v29
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
),
1044 v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
),
1045 v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
),
1046 v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
),
1047 v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
) {}
1049 template <typename T
>
1050 operator ParamGenerator
<T
>() const {
1051 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1052 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1053 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
};
1054 return ValuesIn(array
);
1089 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1090 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1091 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1092 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1093 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1094 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
>
1095 class ValueArray30
{
1097 ValueArray30(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1098 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1099 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1100 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
) : v1_(v1
), v2_(v2
), v3_(v3
),
1101 v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
1102 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
1103 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
1104 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
1105 v29_(v29
), v30_(v30
) {}
1107 template <typename T
>
1108 operator ParamGenerator
<T
>() const {
1109 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1110 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1111 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
};
1112 return ValuesIn(array
);
1148 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1149 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1150 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1151 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1152 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1153 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1155 class ValueArray31
{
1157 ValueArray31(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1158 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1159 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1160 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
) : v1_(v1
), v2_(v2
),
1161 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
1162 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
1163 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
1164 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
1165 v29_(v29
), v30_(v30
), v31_(v31
) {}
1167 template <typename T
>
1168 operator ParamGenerator
<T
>() const {
1169 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1170 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1171 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
};
1172 return ValuesIn(array
);
1209 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1210 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1211 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1212 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1213 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1214 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1215 typename T31
, typename T32
>
1216 class ValueArray32
{
1218 ValueArray32(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1219 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1220 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1221 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
) : v1_(v1
),
1222 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
),
1223 v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
),
1224 v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
),
1225 v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
),
1226 v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
) {}
1228 template <typename T
>
1229 operator ParamGenerator
<T
>() const {
1230 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1231 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1232 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
};
1233 return ValuesIn(array
);
1271 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1272 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1273 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1274 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1275 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1276 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1277 typename T31
, typename T32
, typename T33
>
1278 class ValueArray33
{
1280 ValueArray33(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1281 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1282 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1283 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
,
1284 T33 v33
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
1285 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
1286 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
1287 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
1288 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
1291 template <typename T
>
1292 operator ParamGenerator
<T
>() const {
1293 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1294 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1295 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
};
1296 return ValuesIn(array
);
1335 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1336 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1337 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1338 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1339 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1340 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1341 typename T31
, typename T32
, typename T33
, typename T34
>
1342 class ValueArray34
{
1344 ValueArray34(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1345 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1346 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1347 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1348 T34 v34
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
1349 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
1350 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
1351 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
1352 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
1353 v33_(v33
), v34_(v34
) {}
1355 template <typename T
>
1356 operator ParamGenerator
<T
>() const {
1357 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1358 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1359 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
};
1360 return ValuesIn(array
);
1400 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1401 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1402 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1403 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1404 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1405 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1406 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
>
1407 class ValueArray35
{
1409 ValueArray35(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1410 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1411 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1412 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1413 T34 v34
, T35 v35
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
),
1414 v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
),
1415 v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
),
1416 v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
),
1417 v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
),
1418 v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
) {}
1420 template <typename T
>
1421 operator ParamGenerator
<T
>() const {
1422 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1423 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1424 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
,
1426 return ValuesIn(array
);
1467 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1468 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1469 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1470 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1471 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1472 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1473 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1475 class ValueArray36
{
1477 ValueArray36(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1478 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1479 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1480 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1481 T34 v34
, T35 v35
, T36 v36
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
),
1482 v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
),
1483 v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
),
1484 v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
),
1485 v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
),
1486 v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
) {}
1488 template <typename T
>
1489 operator ParamGenerator
<T
>() const {
1490 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1491 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1492 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1494 return ValuesIn(array
);
1536 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1537 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1538 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1539 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1540 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1541 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1542 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1543 typename T36
, typename T37
>
1544 class ValueArray37
{
1546 ValueArray37(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1547 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1548 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1549 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1550 T34 v34
, T35 v35
, T36 v36
, T37 v37
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
),
1551 v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
),
1552 v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
),
1553 v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
),
1554 v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
),
1555 v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
),
1556 v36_(v36
), v37_(v37
) {}
1558 template <typename T
>
1559 operator ParamGenerator
<T
>() const {
1560 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1561 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1562 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1564 return ValuesIn(array
);
1607 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1608 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1609 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1610 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1611 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1612 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1613 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1614 typename T36
, typename T37
, typename T38
>
1615 class ValueArray38
{
1617 ValueArray38(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1618 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1619 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1620 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1621 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
) : v1_(v1
), v2_(v2
), v3_(v3
),
1622 v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
1623 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
1624 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
1625 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
1626 v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
),
1627 v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
) {}
1629 template <typename T
>
1630 operator ParamGenerator
<T
>() const {
1631 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1632 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1633 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1635 return ValuesIn(array
);
1679 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1680 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1681 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1682 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1683 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1684 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1685 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1686 typename T36
, typename T37
, typename T38
, typename T39
>
1687 class ValueArray39
{
1689 ValueArray39(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1690 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1691 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1692 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1693 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
) : v1_(v1
), v2_(v2
),
1694 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
1695 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
1696 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
1697 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
1698 v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
),
1699 v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
) {}
1701 template <typename T
>
1702 operator ParamGenerator
<T
>() const {
1703 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1704 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1705 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1706 v36_
, v37_
, v38_
, v39_
};
1707 return ValuesIn(array
);
1752 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1753 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1754 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1755 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1756 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1757 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1758 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1759 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
>
1760 class ValueArray40
{
1762 ValueArray40(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1763 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1764 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1765 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1766 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
) : v1_(v1
),
1767 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
),
1768 v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
),
1769 v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
),
1770 v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
),
1771 v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
),
1772 v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
),
1775 template <typename T
>
1776 operator ParamGenerator
<T
>() const {
1777 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1778 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1779 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1780 v36_
, v37_
, v38_
, v39_
, v40_
};
1781 return ValuesIn(array
);
1827 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1828 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1829 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1830 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1831 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1832 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1833 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1834 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1836 class ValueArray41
{
1838 ValueArray41(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1839 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1840 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1841 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1842 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
,
1843 T41 v41
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
1844 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
1845 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
1846 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
1847 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
1848 v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
),
1849 v39_(v39
), v40_(v40
), v41_(v41
) {}
1851 template <typename T
>
1852 operator ParamGenerator
<T
>() const {
1853 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1854 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1855 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1856 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
};
1857 return ValuesIn(array
);
1904 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1905 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1906 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1907 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1908 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1909 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1910 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1911 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1912 typename T41
, typename T42
>
1913 class ValueArray42
{
1915 ValueArray42(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1916 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1917 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1918 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1919 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
1920 T42 v42
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
1921 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
1922 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
1923 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
1924 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
1925 v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
),
1926 v39_(v39
), v40_(v40
), v41_(v41
), v42_(v42
) {}
1928 template <typename T
>
1929 operator ParamGenerator
<T
>() const {
1930 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
1931 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
1932 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
1933 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
};
1934 return ValuesIn(array
);
1982 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1983 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1984 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1985 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1986 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1987 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1988 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1989 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1990 typename T41
, typename T42
, typename T43
>
1991 class ValueArray43
{
1993 ValueArray43(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1994 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1995 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1996 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1997 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
1998 T42 v42
, T43 v43
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
),
1999 v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
),
2000 v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
),
2001 v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
),
2002 v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
),
2003 v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
),
2004 v38_(v38
), v39_(v39
), v40_(v40
), v41_(v41
), v42_(v42
), v43_(v43
) {}
2006 template <typename T
>
2007 operator ParamGenerator
<T
>() const {
2008 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2009 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2010 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2011 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
};
2012 return ValuesIn(array
);
2061 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2062 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2063 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2064 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2065 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2066 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2067 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2068 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2069 typename T41
, typename T42
, typename T43
, typename T44
>
2070 class ValueArray44
{
2072 ValueArray44(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2073 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2074 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2075 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2076 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2077 T42 v42
, T43 v43
, T44 v44
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
),
2078 v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
),
2079 v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
),
2080 v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
),
2081 v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
),
2082 v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
),
2083 v37_(v37
), v38_(v38
), v39_(v39
), v40_(v40
), v41_(v41
), v42_(v42
),
2084 v43_(v43
), v44_(v44
) {}
2086 template <typename T
>
2087 operator ParamGenerator
<T
>() const {
2088 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2089 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2090 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2091 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
};
2092 return ValuesIn(array
);
2142 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2143 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2144 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2145 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2146 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2147 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2148 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2149 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2150 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
>
2151 class ValueArray45
{
2153 ValueArray45(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2154 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2155 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2156 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2157 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2158 T42 v42
, T43 v43
, T44 v44
, T45 v45
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
),
2159 v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
),
2160 v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
), v17_(v17
),
2161 v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
), v23_(v23
),
2162 v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
), v29_(v29
),
2163 v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
), v35_(v35
),
2164 v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
), v40_(v40
), v41_(v41
),
2165 v42_(v42
), v43_(v43
), v44_(v44
), v45_(v45
) {}
2167 template <typename T
>
2168 operator ParamGenerator
<T
>() const {
2169 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2170 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2171 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2172 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
};
2173 return ValuesIn(array
);
2224 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2225 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2226 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2227 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2228 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2229 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2230 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2231 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2232 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
2234 class ValueArray46
{
2236 ValueArray46(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2237 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2238 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2239 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2240 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2241 T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
) : v1_(v1
), v2_(v2
), v3_(v3
),
2242 v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
2243 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
2244 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
2245 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
2246 v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
),
2247 v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
), v40_(v40
),
2248 v41_(v41
), v42_(v42
), v43_(v43
), v44_(v44
), v45_(v45
), v46_(v46
) {}
2250 template <typename T
>
2251 operator ParamGenerator
<T
>() const {
2252 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2253 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2254 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2255 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
, v46_
};
2256 return ValuesIn(array
);
2308 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2309 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2310 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2311 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2312 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2313 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2314 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2315 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2316 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
2317 typename T46
, typename T47
>
2318 class ValueArray47
{
2320 ValueArray47(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2321 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2322 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2323 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2324 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2325 T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
) : v1_(v1
), v2_(v2
),
2326 v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
), v10_(v10
),
2327 v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
), v16_(v16
),
2328 v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
), v22_(v22
),
2329 v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
), v28_(v28
),
2330 v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
), v34_(v34
),
2331 v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
), v40_(v40
),
2332 v41_(v41
), v42_(v42
), v43_(v43
), v44_(v44
), v45_(v45
), v46_(v46
),
2335 template <typename T
>
2336 operator ParamGenerator
<T
>() const {
2337 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2338 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2339 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2340 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
, v46_
,
2342 return ValuesIn(array
);
2395 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2396 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2397 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2398 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2399 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2400 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2401 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2402 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2403 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
2404 typename T46
, typename T47
, typename T48
>
2405 class ValueArray48
{
2407 ValueArray48(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2408 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2409 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2410 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2411 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2412 T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
, T48 v48
) : v1_(v1
),
2413 v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
), v8_(v8
), v9_(v9
),
2414 v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
), v15_(v15
),
2415 v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
), v21_(v21
),
2416 v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
), v27_(v27
),
2417 v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
), v33_(v33
),
2418 v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
), v39_(v39
),
2419 v40_(v40
), v41_(v41
), v42_(v42
), v43_(v43
), v44_(v44
), v45_(v45
),
2420 v46_(v46
), v47_(v47
), v48_(v48
) {}
2422 template <typename T
>
2423 operator ParamGenerator
<T
>() const {
2424 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2425 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2426 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2427 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
, v46_
, v47_
,
2429 return ValuesIn(array
);
2483 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2484 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2485 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2486 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2487 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2488 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2489 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2490 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2491 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
2492 typename T46
, typename T47
, typename T48
, typename T49
>
2493 class ValueArray49
{
2495 ValueArray49(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2496 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2497 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2498 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2499 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2500 T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
, T48 v48
,
2501 T49 v49
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
2502 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
2503 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
2504 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
2505 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
2506 v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
),
2507 v39_(v39
), v40_(v40
), v41_(v41
), v42_(v42
), v43_(v43
), v44_(v44
),
2508 v45_(v45
), v46_(v46
), v47_(v47
), v48_(v48
), v49_(v49
) {}
2510 template <typename T
>
2511 operator ParamGenerator
<T
>() const {
2512 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2513 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2514 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2515 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
, v46_
, v47_
,
2517 return ValuesIn(array
);
2572 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
2573 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
2574 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
2575 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
2576 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
2577 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
2578 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
2579 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
2580 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
2581 typename T46
, typename T47
, typename T48
, typename T49
, typename T50
>
2582 class ValueArray50
{
2584 ValueArray50(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
2585 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
2586 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
2587 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
2588 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
2589 T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
, T48 v48
, T49 v49
,
2590 T50 v50
) : v1_(v1
), v2_(v2
), v3_(v3
), v4_(v4
), v5_(v5
), v6_(v6
), v7_(v7
),
2591 v8_(v8
), v9_(v9
), v10_(v10
), v11_(v11
), v12_(v12
), v13_(v13
), v14_(v14
),
2592 v15_(v15
), v16_(v16
), v17_(v17
), v18_(v18
), v19_(v19
), v20_(v20
),
2593 v21_(v21
), v22_(v22
), v23_(v23
), v24_(v24
), v25_(v25
), v26_(v26
),
2594 v27_(v27
), v28_(v28
), v29_(v29
), v30_(v30
), v31_(v31
), v32_(v32
),
2595 v33_(v33
), v34_(v34
), v35_(v35
), v36_(v36
), v37_(v37
), v38_(v38
),
2596 v39_(v39
), v40_(v40
), v41_(v41
), v42_(v42
), v43_(v43
), v44_(v44
),
2597 v45_(v45
), v46_(v46
), v47_(v47
), v48_(v48
), v49_(v49
), v50_(v50
) {}
2599 template <typename T
>
2600 operator ParamGenerator
<T
>() const {
2601 const T array
[] = {v1_
, v2_
, v3_
, v4_
, v5_
, v6_
, v7_
, v8_
, v9_
, v10_
, v11_
,
2602 v12_
, v13_
, v14_
, v15_
, v16_
, v17_
, v18_
, v19_
, v20_
, v21_
, v22_
, v23_
,
2603 v24_
, v25_
, v26_
, v27_
, v28_
, v29_
, v30_
, v31_
, v32_
, v33_
, v34_
, v35_
,
2604 v36_
, v37_
, v38_
, v39_
, v40_
, v41_
, v42_
, v43_
, v44_
, v45_
, v46_
, v47_
,
2606 return ValuesIn(array
);
2662 #ifdef GTEST_HAS_COMBINE
2663 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
2665 // Generates values from the Cartesian product of values produced
2666 // by the argument generators.
2668 template <typename T1
, typename T2
>
2669 class CartesianProductGenerator2
2670 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
> > {
2672 typedef ::std::tr1::tuple
<T1
, T2
> ParamType
;
2674 CartesianProductGenerator2(const ParamGenerator
<T1
>& g1
,
2675 const ParamGenerator
<T2
>& g2
)
2676 : g1_(g1
), g2_(g2
) {}
2677 virtual ~CartesianProductGenerator2() {}
2679 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
2680 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin());
2682 virtual ParamIteratorInterface
<ParamType
>* End() const {
2683 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end());
2687 class Iterator
: public ParamIteratorInterface
<ParamType
> {
2689 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
2690 const ParamGenerator
<T1
>& g1
,
2691 const typename ParamGenerator
<T1
>::iterator
& current1
,
2692 const ParamGenerator
<T2
>& g2
,
2693 const typename ParamGenerator
<T2
>::iterator
& current2
)
2695 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
2696 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
) {
2697 ComputeCurrentValue();
2699 virtual ~Iterator() {}
2701 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
2704 // Advance should not be called on beyond-of-range iterators
2705 // so no component iterators must be beyond end of range, either.
2706 virtual void Advance() {
2709 if (current2_
== end2_
) {
2710 current2_
= begin2_
;
2713 ComputeCurrentValue();
2715 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
2716 return new Iterator(*this);
2718 virtual const ParamType
* Current() const { return ¤t_value_
; }
2719 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
2720 // Having the same base generator guarantees that the other
2721 // iterator is of the same type and we can downcast.
2722 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
2723 << "The program attempted to compare iterators "
2724 << "from different generators." << std::endl
;
2725 const Iterator
* typed_other
=
2726 CheckedDowncastToActualType
<const Iterator
>(&other
);
2727 // We must report iterators equal if they both point beyond their
2728 // respective ranges. That can happen in a variety of fashions,
2729 // so we have to consult AtEnd().
2730 return (AtEnd() && typed_other
->AtEnd()) ||
2732 current1_
== typed_other
->current1_
&&
2733 current2_
== typed_other
->current2_
);
2737 Iterator(const Iterator
& other
)
2738 : base_(other
.base_
),
2739 begin1_(other
.begin1_
),
2741 current1_(other
.current1_
),
2742 begin2_(other
.begin2_
),
2744 current2_(other
.current2_
) {
2745 ComputeCurrentValue();
2748 void ComputeCurrentValue() {
2750 current_value_
= ParamType(*current1_
, *current2_
);
2752 bool AtEnd() const {
2753 // We must report iterator past the end of the range when either of the
2754 // component iterators has reached the end of its range.
2756 current1_
== end1_
||
2760 const ParamGeneratorInterface
<ParamType
>* const base_
;
2761 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
2762 // current[i]_ is the actual traversing iterator.
2763 const typename ParamGenerator
<T1
>::iterator begin1_
;
2764 const typename ParamGenerator
<T1
>::iterator end1_
;
2765 typename ParamGenerator
<T1
>::iterator current1_
;
2766 const typename ParamGenerator
<T2
>::iterator begin2_
;
2767 const typename ParamGenerator
<T2
>::iterator end2_
;
2768 typename ParamGenerator
<T2
>::iterator current2_
;
2769 ParamType current_value_
;
2772 const ParamGenerator
<T1
> g1_
;
2773 const ParamGenerator
<T2
> g2_
;
2777 template <typename T1
, typename T2
, typename T3
>
2778 class CartesianProductGenerator3
2779 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
> > {
2781 typedef ::std::tr1::tuple
<T1
, T2
, T3
> ParamType
;
2783 CartesianProductGenerator3(const ParamGenerator
<T1
>& g1
,
2784 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
)
2785 : g1_(g1
), g2_(g2
), g3_(g3
) {}
2786 virtual ~CartesianProductGenerator3() {}
2788 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
2789 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
2792 virtual ParamIteratorInterface
<ParamType
>* End() const {
2793 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end());
2797 class Iterator
: public ParamIteratorInterface
<ParamType
> {
2799 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
2800 const ParamGenerator
<T1
>& g1
,
2801 const typename ParamGenerator
<T1
>::iterator
& current1
,
2802 const ParamGenerator
<T2
>& g2
,
2803 const typename ParamGenerator
<T2
>::iterator
& current2
,
2804 const ParamGenerator
<T3
>& g3
,
2805 const typename ParamGenerator
<T3
>::iterator
& current3
)
2807 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
2808 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
2809 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
) {
2810 ComputeCurrentValue();
2812 virtual ~Iterator() {}
2814 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
2817 // Advance should not be called on beyond-of-range iterators
2818 // so no component iterators must be beyond end of range, either.
2819 virtual void Advance() {
2822 if (current3_
== end3_
) {
2823 current3_
= begin3_
;
2826 if (current2_
== end2_
) {
2827 current2_
= begin2_
;
2830 ComputeCurrentValue();
2832 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
2833 return new Iterator(*this);
2835 virtual const ParamType
* Current() const { return ¤t_value_
; }
2836 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
2837 // Having the same base generator guarantees that the other
2838 // iterator is of the same type and we can downcast.
2839 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
2840 << "The program attempted to compare iterators "
2841 << "from different generators." << std::endl
;
2842 const Iterator
* typed_other
=
2843 CheckedDowncastToActualType
<const Iterator
>(&other
);
2844 // We must report iterators equal if they both point beyond their
2845 // respective ranges. That can happen in a variety of fashions,
2846 // so we have to consult AtEnd().
2847 return (AtEnd() && typed_other
->AtEnd()) ||
2849 current1_
== typed_other
->current1_
&&
2850 current2_
== typed_other
->current2_
&&
2851 current3_
== typed_other
->current3_
);
2855 Iterator(const Iterator
& other
)
2856 : base_(other
.base_
),
2857 begin1_(other
.begin1_
),
2859 current1_(other
.current1_
),
2860 begin2_(other
.begin2_
),
2862 current2_(other
.current2_
),
2863 begin3_(other
.begin3_
),
2865 current3_(other
.current3_
) {
2866 ComputeCurrentValue();
2869 void ComputeCurrentValue() {
2871 current_value_
= ParamType(*current1_
, *current2_
, *current3_
);
2873 bool AtEnd() const {
2874 // We must report iterator past the end of the range when either of the
2875 // component iterators has reached the end of its range.
2877 current1_
== end1_
||
2878 current2_
== end2_
||
2882 const ParamGeneratorInterface
<ParamType
>* const base_
;
2883 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
2884 // current[i]_ is the actual traversing iterator.
2885 const typename ParamGenerator
<T1
>::iterator begin1_
;
2886 const typename ParamGenerator
<T1
>::iterator end1_
;
2887 typename ParamGenerator
<T1
>::iterator current1_
;
2888 const typename ParamGenerator
<T2
>::iterator begin2_
;
2889 const typename ParamGenerator
<T2
>::iterator end2_
;
2890 typename ParamGenerator
<T2
>::iterator current2_
;
2891 const typename ParamGenerator
<T3
>::iterator begin3_
;
2892 const typename ParamGenerator
<T3
>::iterator end3_
;
2893 typename ParamGenerator
<T3
>::iterator current3_
;
2894 ParamType current_value_
;
2897 const ParamGenerator
<T1
> g1_
;
2898 const ParamGenerator
<T2
> g2_
;
2899 const ParamGenerator
<T3
> g3_
;
2903 template <typename T1
, typename T2
, typename T3
, typename T4
>
2904 class CartesianProductGenerator4
2905 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
> > {
2907 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
> ParamType
;
2909 CartesianProductGenerator4(const ParamGenerator
<T1
>& g1
,
2910 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
2911 const ParamGenerator
<T4
>& g4
)
2912 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
) {}
2913 virtual ~CartesianProductGenerator4() {}
2915 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
2916 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
2917 g3_
.begin(), g4_
, g4_
.begin());
2919 virtual ParamIteratorInterface
<ParamType
>* End() const {
2920 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
2925 class Iterator
: public ParamIteratorInterface
<ParamType
> {
2927 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
2928 const ParamGenerator
<T1
>& g1
,
2929 const typename ParamGenerator
<T1
>::iterator
& current1
,
2930 const ParamGenerator
<T2
>& g2
,
2931 const typename ParamGenerator
<T2
>::iterator
& current2
,
2932 const ParamGenerator
<T3
>& g3
,
2933 const typename ParamGenerator
<T3
>::iterator
& current3
,
2934 const ParamGenerator
<T4
>& g4
,
2935 const typename ParamGenerator
<T4
>::iterator
& current4
)
2937 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
2938 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
2939 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
2940 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
) {
2941 ComputeCurrentValue();
2943 virtual ~Iterator() {}
2945 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
2948 // Advance should not be called on beyond-of-range iterators
2949 // so no component iterators must be beyond end of range, either.
2950 virtual void Advance() {
2953 if (current4_
== end4_
) {
2954 current4_
= begin4_
;
2957 if (current3_
== end3_
) {
2958 current3_
= begin3_
;
2961 if (current2_
== end2_
) {
2962 current2_
= begin2_
;
2965 ComputeCurrentValue();
2967 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
2968 return new Iterator(*this);
2970 virtual const ParamType
* Current() const { return ¤t_value_
; }
2971 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
2972 // Having the same base generator guarantees that the other
2973 // iterator is of the same type and we can downcast.
2974 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
2975 << "The program attempted to compare iterators "
2976 << "from different generators." << std::endl
;
2977 const Iterator
* typed_other
=
2978 CheckedDowncastToActualType
<const Iterator
>(&other
);
2979 // We must report iterators equal if they both point beyond their
2980 // respective ranges. That can happen in a variety of fashions,
2981 // so we have to consult AtEnd().
2982 return (AtEnd() && typed_other
->AtEnd()) ||
2984 current1_
== typed_other
->current1_
&&
2985 current2_
== typed_other
->current2_
&&
2986 current3_
== typed_other
->current3_
&&
2987 current4_
== typed_other
->current4_
);
2991 Iterator(const Iterator
& other
)
2992 : base_(other
.base_
),
2993 begin1_(other
.begin1_
),
2995 current1_(other
.current1_
),
2996 begin2_(other
.begin2_
),
2998 current2_(other
.current2_
),
2999 begin3_(other
.begin3_
),
3001 current3_(other
.current3_
),
3002 begin4_(other
.begin4_
),
3004 current4_(other
.current4_
) {
3005 ComputeCurrentValue();
3008 void ComputeCurrentValue() {
3010 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3013 bool AtEnd() const {
3014 // We must report iterator past the end of the range when either of the
3015 // component iterators has reached the end of its range.
3017 current1_
== end1_
||
3018 current2_
== end2_
||
3019 current3_
== end3_
||
3023 const ParamGeneratorInterface
<ParamType
>* const base_
;
3024 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3025 // current[i]_ is the actual traversing iterator.
3026 const typename ParamGenerator
<T1
>::iterator begin1_
;
3027 const typename ParamGenerator
<T1
>::iterator end1_
;
3028 typename ParamGenerator
<T1
>::iterator current1_
;
3029 const typename ParamGenerator
<T2
>::iterator begin2_
;
3030 const typename ParamGenerator
<T2
>::iterator end2_
;
3031 typename ParamGenerator
<T2
>::iterator current2_
;
3032 const typename ParamGenerator
<T3
>::iterator begin3_
;
3033 const typename ParamGenerator
<T3
>::iterator end3_
;
3034 typename ParamGenerator
<T3
>::iterator current3_
;
3035 const typename ParamGenerator
<T4
>::iterator begin4_
;
3036 const typename ParamGenerator
<T4
>::iterator end4_
;
3037 typename ParamGenerator
<T4
>::iterator current4_
;
3038 ParamType current_value_
;
3041 const ParamGenerator
<T1
> g1_
;
3042 const ParamGenerator
<T2
> g2_
;
3043 const ParamGenerator
<T3
> g3_
;
3044 const ParamGenerator
<T4
> g4_
;
3048 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
3049 class CartesianProductGenerator5
3050 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
> > {
3052 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
> ParamType
;
3054 CartesianProductGenerator5(const ParamGenerator
<T1
>& g1
,
3055 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
3056 const ParamGenerator
<T4
>& g4
, const ParamGenerator
<T5
>& g5
)
3057 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
) {}
3058 virtual ~CartesianProductGenerator5() {}
3060 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
3061 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
3062 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin());
3064 virtual ParamIteratorInterface
<ParamType
>* End() const {
3065 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
3066 g4_
, g4_
.end(), g5_
, g5_
.end());
3070 class Iterator
: public ParamIteratorInterface
<ParamType
> {
3072 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
3073 const ParamGenerator
<T1
>& g1
,
3074 const typename ParamGenerator
<T1
>::iterator
& current1
,
3075 const ParamGenerator
<T2
>& g2
,
3076 const typename ParamGenerator
<T2
>::iterator
& current2
,
3077 const ParamGenerator
<T3
>& g3
,
3078 const typename ParamGenerator
<T3
>::iterator
& current3
,
3079 const ParamGenerator
<T4
>& g4
,
3080 const typename ParamGenerator
<T4
>::iterator
& current4
,
3081 const ParamGenerator
<T5
>& g5
,
3082 const typename ParamGenerator
<T5
>::iterator
& current5
)
3084 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
3085 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
3086 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
3087 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
3088 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
) {
3089 ComputeCurrentValue();
3091 virtual ~Iterator() {}
3093 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
3096 // Advance should not be called on beyond-of-range iterators
3097 // so no component iterators must be beyond end of range, either.
3098 virtual void Advance() {
3101 if (current5_
== end5_
) {
3102 current5_
= begin5_
;
3105 if (current4_
== end4_
) {
3106 current4_
= begin4_
;
3109 if (current3_
== end3_
) {
3110 current3_
= begin3_
;
3113 if (current2_
== end2_
) {
3114 current2_
= begin2_
;
3117 ComputeCurrentValue();
3119 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
3120 return new Iterator(*this);
3122 virtual const ParamType
* Current() const { return ¤t_value_
; }
3123 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
3124 // Having the same base generator guarantees that the other
3125 // iterator is of the same type and we can downcast.
3126 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
3127 << "The program attempted to compare iterators "
3128 << "from different generators." << std::endl
;
3129 const Iterator
* typed_other
=
3130 CheckedDowncastToActualType
<const Iterator
>(&other
);
3131 // We must report iterators equal if they both point beyond their
3132 // respective ranges. That can happen in a variety of fashions,
3133 // so we have to consult AtEnd().
3134 return (AtEnd() && typed_other
->AtEnd()) ||
3136 current1_
== typed_other
->current1_
&&
3137 current2_
== typed_other
->current2_
&&
3138 current3_
== typed_other
->current3_
&&
3139 current4_
== typed_other
->current4_
&&
3140 current5_
== typed_other
->current5_
);
3144 Iterator(const Iterator
& other
)
3145 : base_(other
.base_
),
3146 begin1_(other
.begin1_
),
3148 current1_(other
.current1_
),
3149 begin2_(other
.begin2_
),
3151 current2_(other
.current2_
),
3152 begin3_(other
.begin3_
),
3154 current3_(other
.current3_
),
3155 begin4_(other
.begin4_
),
3157 current4_(other
.current4_
),
3158 begin5_(other
.begin5_
),
3160 current5_(other
.current5_
) {
3161 ComputeCurrentValue();
3164 void ComputeCurrentValue() {
3166 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3167 *current4_
, *current5_
);
3169 bool AtEnd() const {
3170 // We must report iterator past the end of the range when either of the
3171 // component iterators has reached the end of its range.
3173 current1_
== end1_
||
3174 current2_
== end2_
||
3175 current3_
== end3_
||
3176 current4_
== end4_
||
3180 const ParamGeneratorInterface
<ParamType
>* const base_
;
3181 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3182 // current[i]_ is the actual traversing iterator.
3183 const typename ParamGenerator
<T1
>::iterator begin1_
;
3184 const typename ParamGenerator
<T1
>::iterator end1_
;
3185 typename ParamGenerator
<T1
>::iterator current1_
;
3186 const typename ParamGenerator
<T2
>::iterator begin2_
;
3187 const typename ParamGenerator
<T2
>::iterator end2_
;
3188 typename ParamGenerator
<T2
>::iterator current2_
;
3189 const typename ParamGenerator
<T3
>::iterator begin3_
;
3190 const typename ParamGenerator
<T3
>::iterator end3_
;
3191 typename ParamGenerator
<T3
>::iterator current3_
;
3192 const typename ParamGenerator
<T4
>::iterator begin4_
;
3193 const typename ParamGenerator
<T4
>::iterator end4_
;
3194 typename ParamGenerator
<T4
>::iterator current4_
;
3195 const typename ParamGenerator
<T5
>::iterator begin5_
;
3196 const typename ParamGenerator
<T5
>::iterator end5_
;
3197 typename ParamGenerator
<T5
>::iterator current5_
;
3198 ParamType current_value_
;
3201 const ParamGenerator
<T1
> g1_
;
3202 const ParamGenerator
<T2
> g2_
;
3203 const ParamGenerator
<T3
> g3_
;
3204 const ParamGenerator
<T4
> g4_
;
3205 const ParamGenerator
<T5
> g5_
;
3209 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
3211 class CartesianProductGenerator6
3212 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
,
3215 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
> ParamType
;
3217 CartesianProductGenerator6(const ParamGenerator
<T1
>& g1
,
3218 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
3219 const ParamGenerator
<T4
>& g4
, const ParamGenerator
<T5
>& g5
,
3220 const ParamGenerator
<T6
>& g6
)
3221 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
) {}
3222 virtual ~CartesianProductGenerator6() {}
3224 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
3225 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
3226 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin(), g6_
, g6_
.begin());
3228 virtual ParamIteratorInterface
<ParamType
>* End() const {
3229 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
3230 g4_
, g4_
.end(), g5_
, g5_
.end(), g6_
, g6_
.end());
3234 class Iterator
: public ParamIteratorInterface
<ParamType
> {
3236 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
3237 const ParamGenerator
<T1
>& g1
,
3238 const typename ParamGenerator
<T1
>::iterator
& current1
,
3239 const ParamGenerator
<T2
>& g2
,
3240 const typename ParamGenerator
<T2
>::iterator
& current2
,
3241 const ParamGenerator
<T3
>& g3
,
3242 const typename ParamGenerator
<T3
>::iterator
& current3
,
3243 const ParamGenerator
<T4
>& g4
,
3244 const typename ParamGenerator
<T4
>::iterator
& current4
,
3245 const ParamGenerator
<T5
>& g5
,
3246 const typename ParamGenerator
<T5
>::iterator
& current5
,
3247 const ParamGenerator
<T6
>& g6
,
3248 const typename ParamGenerator
<T6
>::iterator
& current6
)
3250 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
3251 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
3252 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
3253 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
3254 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
),
3255 begin6_(g6
.begin()), end6_(g6
.end()), current6_(current6
) {
3256 ComputeCurrentValue();
3258 virtual ~Iterator() {}
3260 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
3263 // Advance should not be called on beyond-of-range iterators
3264 // so no component iterators must be beyond end of range, either.
3265 virtual void Advance() {
3268 if (current6_
== end6_
) {
3269 current6_
= begin6_
;
3272 if (current5_
== end5_
) {
3273 current5_
= begin5_
;
3276 if (current4_
== end4_
) {
3277 current4_
= begin4_
;
3280 if (current3_
== end3_
) {
3281 current3_
= begin3_
;
3284 if (current2_
== end2_
) {
3285 current2_
= begin2_
;
3288 ComputeCurrentValue();
3290 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
3291 return new Iterator(*this);
3293 virtual const ParamType
* Current() const { return ¤t_value_
; }
3294 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
3295 // Having the same base generator guarantees that the other
3296 // iterator is of the same type and we can downcast.
3297 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
3298 << "The program attempted to compare iterators "
3299 << "from different generators." << std::endl
;
3300 const Iterator
* typed_other
=
3301 CheckedDowncastToActualType
<const Iterator
>(&other
);
3302 // We must report iterators equal if they both point beyond their
3303 // respective ranges. That can happen in a variety of fashions,
3304 // so we have to consult AtEnd().
3305 return (AtEnd() && typed_other
->AtEnd()) ||
3307 current1_
== typed_other
->current1_
&&
3308 current2_
== typed_other
->current2_
&&
3309 current3_
== typed_other
->current3_
&&
3310 current4_
== typed_other
->current4_
&&
3311 current5_
== typed_other
->current5_
&&
3312 current6_
== typed_other
->current6_
);
3316 Iterator(const Iterator
& other
)
3317 : base_(other
.base_
),
3318 begin1_(other
.begin1_
),
3320 current1_(other
.current1_
),
3321 begin2_(other
.begin2_
),
3323 current2_(other
.current2_
),
3324 begin3_(other
.begin3_
),
3326 current3_(other
.current3_
),
3327 begin4_(other
.begin4_
),
3329 current4_(other
.current4_
),
3330 begin5_(other
.begin5_
),
3332 current5_(other
.current5_
),
3333 begin6_(other
.begin6_
),
3335 current6_(other
.current6_
) {
3336 ComputeCurrentValue();
3339 void ComputeCurrentValue() {
3341 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3342 *current4_
, *current5_
, *current6_
);
3344 bool AtEnd() const {
3345 // We must report iterator past the end of the range when either of the
3346 // component iterators has reached the end of its range.
3348 current1_
== end1_
||
3349 current2_
== end2_
||
3350 current3_
== end3_
||
3351 current4_
== end4_
||
3352 current5_
== end5_
||
3356 const ParamGeneratorInterface
<ParamType
>* const base_
;
3357 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3358 // current[i]_ is the actual traversing iterator.
3359 const typename ParamGenerator
<T1
>::iterator begin1_
;
3360 const typename ParamGenerator
<T1
>::iterator end1_
;
3361 typename ParamGenerator
<T1
>::iterator current1_
;
3362 const typename ParamGenerator
<T2
>::iterator begin2_
;
3363 const typename ParamGenerator
<T2
>::iterator end2_
;
3364 typename ParamGenerator
<T2
>::iterator current2_
;
3365 const typename ParamGenerator
<T3
>::iterator begin3_
;
3366 const typename ParamGenerator
<T3
>::iterator end3_
;
3367 typename ParamGenerator
<T3
>::iterator current3_
;
3368 const typename ParamGenerator
<T4
>::iterator begin4_
;
3369 const typename ParamGenerator
<T4
>::iterator end4_
;
3370 typename ParamGenerator
<T4
>::iterator current4_
;
3371 const typename ParamGenerator
<T5
>::iterator begin5_
;
3372 const typename ParamGenerator
<T5
>::iterator end5_
;
3373 typename ParamGenerator
<T5
>::iterator current5_
;
3374 const typename ParamGenerator
<T6
>::iterator begin6_
;
3375 const typename ParamGenerator
<T6
>::iterator end6_
;
3376 typename ParamGenerator
<T6
>::iterator current6_
;
3377 ParamType current_value_
;
3380 const ParamGenerator
<T1
> g1_
;
3381 const ParamGenerator
<T2
> g2_
;
3382 const ParamGenerator
<T3
> g3_
;
3383 const ParamGenerator
<T4
> g4_
;
3384 const ParamGenerator
<T5
> g5_
;
3385 const ParamGenerator
<T6
> g6_
;
3389 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
3390 typename T6
, typename T7
>
3391 class CartesianProductGenerator7
3392 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
,
3395 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
> ParamType
;
3397 CartesianProductGenerator7(const ParamGenerator
<T1
>& g1
,
3398 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
3399 const ParamGenerator
<T4
>& g4
, const ParamGenerator
<T5
>& g5
,
3400 const ParamGenerator
<T6
>& g6
, const ParamGenerator
<T7
>& g7
)
3401 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
) {}
3402 virtual ~CartesianProductGenerator7() {}
3404 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
3405 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
3406 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin(), g6_
, g6_
.begin(), g7_
,
3409 virtual ParamIteratorInterface
<ParamType
>* End() const {
3410 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
3411 g4_
, g4_
.end(), g5_
, g5_
.end(), g6_
, g6_
.end(), g7_
, g7_
.end());
3415 class Iterator
: public ParamIteratorInterface
<ParamType
> {
3417 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
3418 const ParamGenerator
<T1
>& g1
,
3419 const typename ParamGenerator
<T1
>::iterator
& current1
,
3420 const ParamGenerator
<T2
>& g2
,
3421 const typename ParamGenerator
<T2
>::iterator
& current2
,
3422 const ParamGenerator
<T3
>& g3
,
3423 const typename ParamGenerator
<T3
>::iterator
& current3
,
3424 const ParamGenerator
<T4
>& g4
,
3425 const typename ParamGenerator
<T4
>::iterator
& current4
,
3426 const ParamGenerator
<T5
>& g5
,
3427 const typename ParamGenerator
<T5
>::iterator
& current5
,
3428 const ParamGenerator
<T6
>& g6
,
3429 const typename ParamGenerator
<T6
>::iterator
& current6
,
3430 const ParamGenerator
<T7
>& g7
,
3431 const typename ParamGenerator
<T7
>::iterator
& current7
)
3433 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
3434 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
3435 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
3436 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
3437 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
),
3438 begin6_(g6
.begin()), end6_(g6
.end()), current6_(current6
),
3439 begin7_(g7
.begin()), end7_(g7
.end()), current7_(current7
) {
3440 ComputeCurrentValue();
3442 virtual ~Iterator() {}
3444 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
3447 // Advance should not be called on beyond-of-range iterators
3448 // so no component iterators must be beyond end of range, either.
3449 virtual void Advance() {
3452 if (current7_
== end7_
) {
3453 current7_
= begin7_
;
3456 if (current6_
== end6_
) {
3457 current6_
= begin6_
;
3460 if (current5_
== end5_
) {
3461 current5_
= begin5_
;
3464 if (current4_
== end4_
) {
3465 current4_
= begin4_
;
3468 if (current3_
== end3_
) {
3469 current3_
= begin3_
;
3472 if (current2_
== end2_
) {
3473 current2_
= begin2_
;
3476 ComputeCurrentValue();
3478 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
3479 return new Iterator(*this);
3481 virtual const ParamType
* Current() const { return ¤t_value_
; }
3482 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
3483 // Having the same base generator guarantees that the other
3484 // iterator is of the same type and we can downcast.
3485 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
3486 << "The program attempted to compare iterators "
3487 << "from different generators." << std::endl
;
3488 const Iterator
* typed_other
=
3489 CheckedDowncastToActualType
<const Iterator
>(&other
);
3490 // We must report iterators equal if they both point beyond their
3491 // respective ranges. That can happen in a variety of fashions,
3492 // so we have to consult AtEnd().
3493 return (AtEnd() && typed_other
->AtEnd()) ||
3495 current1_
== typed_other
->current1_
&&
3496 current2_
== typed_other
->current2_
&&
3497 current3_
== typed_other
->current3_
&&
3498 current4_
== typed_other
->current4_
&&
3499 current5_
== typed_other
->current5_
&&
3500 current6_
== typed_other
->current6_
&&
3501 current7_
== typed_other
->current7_
);
3505 Iterator(const Iterator
& other
)
3506 : base_(other
.base_
),
3507 begin1_(other
.begin1_
),
3509 current1_(other
.current1_
),
3510 begin2_(other
.begin2_
),
3512 current2_(other
.current2_
),
3513 begin3_(other
.begin3_
),
3515 current3_(other
.current3_
),
3516 begin4_(other
.begin4_
),
3518 current4_(other
.current4_
),
3519 begin5_(other
.begin5_
),
3521 current5_(other
.current5_
),
3522 begin6_(other
.begin6_
),
3524 current6_(other
.current6_
),
3525 begin7_(other
.begin7_
),
3527 current7_(other
.current7_
) {
3528 ComputeCurrentValue();
3531 void ComputeCurrentValue() {
3533 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3534 *current4_
, *current5_
, *current6_
, *current7_
);
3536 bool AtEnd() const {
3537 // We must report iterator past the end of the range when either of the
3538 // component iterators has reached the end of its range.
3540 current1_
== end1_
||
3541 current2_
== end2_
||
3542 current3_
== end3_
||
3543 current4_
== end4_
||
3544 current5_
== end5_
||
3545 current6_
== end6_
||
3549 const ParamGeneratorInterface
<ParamType
>* const base_
;
3550 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3551 // current[i]_ is the actual traversing iterator.
3552 const typename ParamGenerator
<T1
>::iterator begin1_
;
3553 const typename ParamGenerator
<T1
>::iterator end1_
;
3554 typename ParamGenerator
<T1
>::iterator current1_
;
3555 const typename ParamGenerator
<T2
>::iterator begin2_
;
3556 const typename ParamGenerator
<T2
>::iterator end2_
;
3557 typename ParamGenerator
<T2
>::iterator current2_
;
3558 const typename ParamGenerator
<T3
>::iterator begin3_
;
3559 const typename ParamGenerator
<T3
>::iterator end3_
;
3560 typename ParamGenerator
<T3
>::iterator current3_
;
3561 const typename ParamGenerator
<T4
>::iterator begin4_
;
3562 const typename ParamGenerator
<T4
>::iterator end4_
;
3563 typename ParamGenerator
<T4
>::iterator current4_
;
3564 const typename ParamGenerator
<T5
>::iterator begin5_
;
3565 const typename ParamGenerator
<T5
>::iterator end5_
;
3566 typename ParamGenerator
<T5
>::iterator current5_
;
3567 const typename ParamGenerator
<T6
>::iterator begin6_
;
3568 const typename ParamGenerator
<T6
>::iterator end6_
;
3569 typename ParamGenerator
<T6
>::iterator current6_
;
3570 const typename ParamGenerator
<T7
>::iterator begin7_
;
3571 const typename ParamGenerator
<T7
>::iterator end7_
;
3572 typename ParamGenerator
<T7
>::iterator current7_
;
3573 ParamType current_value_
;
3576 const ParamGenerator
<T1
> g1_
;
3577 const ParamGenerator
<T2
> g2_
;
3578 const ParamGenerator
<T3
> g3_
;
3579 const ParamGenerator
<T4
> g4_
;
3580 const ParamGenerator
<T5
> g5_
;
3581 const ParamGenerator
<T6
> g6_
;
3582 const ParamGenerator
<T7
> g7_
;
3586 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
3587 typename T6
, typename T7
, typename T8
>
3588 class CartesianProductGenerator8
3589 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
,
3592 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
> ParamType
;
3594 CartesianProductGenerator8(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 const ParamGenerator
<T8
>& g8
)
3599 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
),
3601 virtual ~CartesianProductGenerator8() {}
3603 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
3604 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
3605 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin(), g6_
, g6_
.begin(), g7_
,
3606 g7_
.begin(), g8_
, g8_
.begin());
3608 virtual ParamIteratorInterface
<ParamType
>* End() const {
3609 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
3610 g4_
, g4_
.end(), g5_
, g5_
.end(), g6_
, g6_
.end(), g7_
, g7_
.end(), g8_
,
3615 class Iterator
: public ParamIteratorInterface
<ParamType
> {
3617 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
3618 const ParamGenerator
<T1
>& g1
,
3619 const typename ParamGenerator
<T1
>::iterator
& current1
,
3620 const ParamGenerator
<T2
>& g2
,
3621 const typename ParamGenerator
<T2
>::iterator
& current2
,
3622 const ParamGenerator
<T3
>& g3
,
3623 const typename ParamGenerator
<T3
>::iterator
& current3
,
3624 const ParamGenerator
<T4
>& g4
,
3625 const typename ParamGenerator
<T4
>::iterator
& current4
,
3626 const ParamGenerator
<T5
>& g5
,
3627 const typename ParamGenerator
<T5
>::iterator
& current5
,
3628 const ParamGenerator
<T6
>& g6
,
3629 const typename ParamGenerator
<T6
>::iterator
& current6
,
3630 const ParamGenerator
<T7
>& g7
,
3631 const typename ParamGenerator
<T7
>::iterator
& current7
,
3632 const ParamGenerator
<T8
>& g8
,
3633 const typename ParamGenerator
<T8
>::iterator
& current8
)
3635 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
3636 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
3637 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
3638 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
3639 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
),
3640 begin6_(g6
.begin()), end6_(g6
.end()), current6_(current6
),
3641 begin7_(g7
.begin()), end7_(g7
.end()), current7_(current7
),
3642 begin8_(g8
.begin()), end8_(g8
.end()), current8_(current8
) {
3643 ComputeCurrentValue();
3645 virtual ~Iterator() {}
3647 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
3650 // Advance should not be called on beyond-of-range iterators
3651 // so no component iterators must be beyond end of range, either.
3652 virtual void Advance() {
3655 if (current8_
== end8_
) {
3656 current8_
= begin8_
;
3659 if (current7_
== end7_
) {
3660 current7_
= begin7_
;
3663 if (current6_
== end6_
) {
3664 current6_
= begin6_
;
3667 if (current5_
== end5_
) {
3668 current5_
= begin5_
;
3671 if (current4_
== end4_
) {
3672 current4_
= begin4_
;
3675 if (current3_
== end3_
) {
3676 current3_
= begin3_
;
3679 if (current2_
== end2_
) {
3680 current2_
= begin2_
;
3683 ComputeCurrentValue();
3685 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
3686 return new Iterator(*this);
3688 virtual const ParamType
* Current() const { return ¤t_value_
; }
3689 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
3690 // Having the same base generator guarantees that the other
3691 // iterator is of the same type and we can downcast.
3692 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
3693 << "The program attempted to compare iterators "
3694 << "from different generators." << std::endl
;
3695 const Iterator
* typed_other
=
3696 CheckedDowncastToActualType
<const Iterator
>(&other
);
3697 // We must report iterators equal if they both point beyond their
3698 // respective ranges. That can happen in a variety of fashions,
3699 // so we have to consult AtEnd().
3700 return (AtEnd() && typed_other
->AtEnd()) ||
3702 current1_
== typed_other
->current1_
&&
3703 current2_
== typed_other
->current2_
&&
3704 current3_
== typed_other
->current3_
&&
3705 current4_
== typed_other
->current4_
&&
3706 current5_
== typed_other
->current5_
&&
3707 current6_
== typed_other
->current6_
&&
3708 current7_
== typed_other
->current7_
&&
3709 current8_
== typed_other
->current8_
);
3713 Iterator(const Iterator
& other
)
3714 : base_(other
.base_
),
3715 begin1_(other
.begin1_
),
3717 current1_(other
.current1_
),
3718 begin2_(other
.begin2_
),
3720 current2_(other
.current2_
),
3721 begin3_(other
.begin3_
),
3723 current3_(other
.current3_
),
3724 begin4_(other
.begin4_
),
3726 current4_(other
.current4_
),
3727 begin5_(other
.begin5_
),
3729 current5_(other
.current5_
),
3730 begin6_(other
.begin6_
),
3732 current6_(other
.current6_
),
3733 begin7_(other
.begin7_
),
3735 current7_(other
.current7_
),
3736 begin8_(other
.begin8_
),
3738 current8_(other
.current8_
) {
3739 ComputeCurrentValue();
3742 void ComputeCurrentValue() {
3744 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3745 *current4_
, *current5_
, *current6_
, *current7_
, *current8_
);
3747 bool AtEnd() const {
3748 // We must report iterator past the end of the range when either of the
3749 // component iterators has reached the end of its range.
3751 current1_
== end1_
||
3752 current2_
== end2_
||
3753 current3_
== end3_
||
3754 current4_
== end4_
||
3755 current5_
== end5_
||
3756 current6_
== end6_
||
3757 current7_
== end7_
||
3761 const ParamGeneratorInterface
<ParamType
>* const base_
;
3762 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3763 // current[i]_ is the actual traversing iterator.
3764 const typename ParamGenerator
<T1
>::iterator begin1_
;
3765 const typename ParamGenerator
<T1
>::iterator end1_
;
3766 typename ParamGenerator
<T1
>::iterator current1_
;
3767 const typename ParamGenerator
<T2
>::iterator begin2_
;
3768 const typename ParamGenerator
<T2
>::iterator end2_
;
3769 typename ParamGenerator
<T2
>::iterator current2_
;
3770 const typename ParamGenerator
<T3
>::iterator begin3_
;
3771 const typename ParamGenerator
<T3
>::iterator end3_
;
3772 typename ParamGenerator
<T3
>::iterator current3_
;
3773 const typename ParamGenerator
<T4
>::iterator begin4_
;
3774 const typename ParamGenerator
<T4
>::iterator end4_
;
3775 typename ParamGenerator
<T4
>::iterator current4_
;
3776 const typename ParamGenerator
<T5
>::iterator begin5_
;
3777 const typename ParamGenerator
<T5
>::iterator end5_
;
3778 typename ParamGenerator
<T5
>::iterator current5_
;
3779 const typename ParamGenerator
<T6
>::iterator begin6_
;
3780 const typename ParamGenerator
<T6
>::iterator end6_
;
3781 typename ParamGenerator
<T6
>::iterator current6_
;
3782 const typename ParamGenerator
<T7
>::iterator begin7_
;
3783 const typename ParamGenerator
<T7
>::iterator end7_
;
3784 typename ParamGenerator
<T7
>::iterator current7_
;
3785 const typename ParamGenerator
<T8
>::iterator begin8_
;
3786 const typename ParamGenerator
<T8
>::iterator end8_
;
3787 typename ParamGenerator
<T8
>::iterator current8_
;
3788 ParamType current_value_
;
3791 const ParamGenerator
<T1
> g1_
;
3792 const ParamGenerator
<T2
> g2_
;
3793 const ParamGenerator
<T3
> g3_
;
3794 const ParamGenerator
<T4
> g4_
;
3795 const ParamGenerator
<T5
> g5_
;
3796 const ParamGenerator
<T6
> g6_
;
3797 const ParamGenerator
<T7
> g7_
;
3798 const ParamGenerator
<T8
> g8_
;
3802 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
3803 typename T6
, typename T7
, typename T8
, typename T9
>
3804 class CartesianProductGenerator9
3805 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
,
3808 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
> ParamType
;
3810 CartesianProductGenerator9(const ParamGenerator
<T1
>& g1
,
3811 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
3812 const ParamGenerator
<T4
>& g4
, const ParamGenerator
<T5
>& g5
,
3813 const ParamGenerator
<T6
>& g6
, const ParamGenerator
<T7
>& g7
,
3814 const ParamGenerator
<T8
>& g8
, const ParamGenerator
<T9
>& g9
)
3815 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
), g8_(g8
),
3817 virtual ~CartesianProductGenerator9() {}
3819 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
3820 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
3821 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin(), g6_
, g6_
.begin(), g7_
,
3822 g7_
.begin(), g8_
, g8_
.begin(), g9_
, g9_
.begin());
3824 virtual ParamIteratorInterface
<ParamType
>* End() const {
3825 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
3826 g4_
, g4_
.end(), g5_
, g5_
.end(), g6_
, g6_
.end(), g7_
, g7_
.end(), g8_
,
3827 g8_
.end(), g9_
, g9_
.end());
3831 class Iterator
: public ParamIteratorInterface
<ParamType
> {
3833 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
3834 const ParamGenerator
<T1
>& g1
,
3835 const typename ParamGenerator
<T1
>::iterator
& current1
,
3836 const ParamGenerator
<T2
>& g2
,
3837 const typename ParamGenerator
<T2
>::iterator
& current2
,
3838 const ParamGenerator
<T3
>& g3
,
3839 const typename ParamGenerator
<T3
>::iterator
& current3
,
3840 const ParamGenerator
<T4
>& g4
,
3841 const typename ParamGenerator
<T4
>::iterator
& current4
,
3842 const ParamGenerator
<T5
>& g5
,
3843 const typename ParamGenerator
<T5
>::iterator
& current5
,
3844 const ParamGenerator
<T6
>& g6
,
3845 const typename ParamGenerator
<T6
>::iterator
& current6
,
3846 const ParamGenerator
<T7
>& g7
,
3847 const typename ParamGenerator
<T7
>::iterator
& current7
,
3848 const ParamGenerator
<T8
>& g8
,
3849 const typename ParamGenerator
<T8
>::iterator
& current8
,
3850 const ParamGenerator
<T9
>& g9
,
3851 const typename ParamGenerator
<T9
>::iterator
& current9
)
3853 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
3854 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
3855 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
3856 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
3857 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
),
3858 begin6_(g6
.begin()), end6_(g6
.end()), current6_(current6
),
3859 begin7_(g7
.begin()), end7_(g7
.end()), current7_(current7
),
3860 begin8_(g8
.begin()), end8_(g8
.end()), current8_(current8
),
3861 begin9_(g9
.begin()), end9_(g9
.end()), current9_(current9
) {
3862 ComputeCurrentValue();
3864 virtual ~Iterator() {}
3866 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
3869 // Advance should not be called on beyond-of-range iterators
3870 // so no component iterators must be beyond end of range, either.
3871 virtual void Advance() {
3874 if (current9_
== end9_
) {
3875 current9_
= begin9_
;
3878 if (current8_
== end8_
) {
3879 current8_
= begin8_
;
3882 if (current7_
== end7_
) {
3883 current7_
= begin7_
;
3886 if (current6_
== end6_
) {
3887 current6_
= begin6_
;
3890 if (current5_
== end5_
) {
3891 current5_
= begin5_
;
3894 if (current4_
== end4_
) {
3895 current4_
= begin4_
;
3898 if (current3_
== end3_
) {
3899 current3_
= begin3_
;
3902 if (current2_
== end2_
) {
3903 current2_
= begin2_
;
3906 ComputeCurrentValue();
3908 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
3909 return new Iterator(*this);
3911 virtual const ParamType
* Current() const { return ¤t_value_
; }
3912 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
3913 // Having the same base generator guarantees that the other
3914 // iterator is of the same type and we can downcast.
3915 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
3916 << "The program attempted to compare iterators "
3917 << "from different generators." << std::endl
;
3918 const Iterator
* typed_other
=
3919 CheckedDowncastToActualType
<const Iterator
>(&other
);
3920 // We must report iterators equal if they both point beyond their
3921 // respective ranges. That can happen in a variety of fashions,
3922 // so we have to consult AtEnd().
3923 return (AtEnd() && typed_other
->AtEnd()) ||
3925 current1_
== typed_other
->current1_
&&
3926 current2_
== typed_other
->current2_
&&
3927 current3_
== typed_other
->current3_
&&
3928 current4_
== typed_other
->current4_
&&
3929 current5_
== typed_other
->current5_
&&
3930 current6_
== typed_other
->current6_
&&
3931 current7_
== typed_other
->current7_
&&
3932 current8_
== typed_other
->current8_
&&
3933 current9_
== typed_other
->current9_
);
3937 Iterator(const Iterator
& other
)
3938 : base_(other
.base_
),
3939 begin1_(other
.begin1_
),
3941 current1_(other
.current1_
),
3942 begin2_(other
.begin2_
),
3944 current2_(other
.current2_
),
3945 begin3_(other
.begin3_
),
3947 current3_(other
.current3_
),
3948 begin4_(other
.begin4_
),
3950 current4_(other
.current4_
),
3951 begin5_(other
.begin5_
),
3953 current5_(other
.current5_
),
3954 begin6_(other
.begin6_
),
3956 current6_(other
.current6_
),
3957 begin7_(other
.begin7_
),
3959 current7_(other
.current7_
),
3960 begin8_(other
.begin8_
),
3962 current8_(other
.current8_
),
3963 begin9_(other
.begin9_
),
3965 current9_(other
.current9_
) {
3966 ComputeCurrentValue();
3969 void ComputeCurrentValue() {
3971 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
3972 *current4_
, *current5_
, *current6_
, *current7_
, *current8_
,
3975 bool AtEnd() const {
3976 // We must report iterator past the end of the range when either of the
3977 // component iterators has reached the end of its range.
3979 current1_
== end1_
||
3980 current2_
== end2_
||
3981 current3_
== end3_
||
3982 current4_
== end4_
||
3983 current5_
== end5_
||
3984 current6_
== end6_
||
3985 current7_
== end7_
||
3986 current8_
== end8_
||
3990 const ParamGeneratorInterface
<ParamType
>* const base_
;
3991 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3992 // current[i]_ is the actual traversing iterator.
3993 const typename ParamGenerator
<T1
>::iterator begin1_
;
3994 const typename ParamGenerator
<T1
>::iterator end1_
;
3995 typename ParamGenerator
<T1
>::iterator current1_
;
3996 const typename ParamGenerator
<T2
>::iterator begin2_
;
3997 const typename ParamGenerator
<T2
>::iterator end2_
;
3998 typename ParamGenerator
<T2
>::iterator current2_
;
3999 const typename ParamGenerator
<T3
>::iterator begin3_
;
4000 const typename ParamGenerator
<T3
>::iterator end3_
;
4001 typename ParamGenerator
<T3
>::iterator current3_
;
4002 const typename ParamGenerator
<T4
>::iterator begin4_
;
4003 const typename ParamGenerator
<T4
>::iterator end4_
;
4004 typename ParamGenerator
<T4
>::iterator current4_
;
4005 const typename ParamGenerator
<T5
>::iterator begin5_
;
4006 const typename ParamGenerator
<T5
>::iterator end5_
;
4007 typename ParamGenerator
<T5
>::iterator current5_
;
4008 const typename ParamGenerator
<T6
>::iterator begin6_
;
4009 const typename ParamGenerator
<T6
>::iterator end6_
;
4010 typename ParamGenerator
<T6
>::iterator current6_
;
4011 const typename ParamGenerator
<T7
>::iterator begin7_
;
4012 const typename ParamGenerator
<T7
>::iterator end7_
;
4013 typename ParamGenerator
<T7
>::iterator current7_
;
4014 const typename ParamGenerator
<T8
>::iterator begin8_
;
4015 const typename ParamGenerator
<T8
>::iterator end8_
;
4016 typename ParamGenerator
<T8
>::iterator current8_
;
4017 const typename ParamGenerator
<T9
>::iterator begin9_
;
4018 const typename ParamGenerator
<T9
>::iterator end9_
;
4019 typename ParamGenerator
<T9
>::iterator current9_
;
4020 ParamType current_value_
;
4023 const ParamGenerator
<T1
> g1_
;
4024 const ParamGenerator
<T2
> g2_
;
4025 const ParamGenerator
<T3
> g3_
;
4026 const ParamGenerator
<T4
> g4_
;
4027 const ParamGenerator
<T5
> g5_
;
4028 const ParamGenerator
<T6
> g6_
;
4029 const ParamGenerator
<T7
> g7_
;
4030 const ParamGenerator
<T8
> g8_
;
4031 const ParamGenerator
<T9
> g9_
;
4035 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4036 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
>
4037 class CartesianProductGenerator10
4038 : public ParamGeneratorInterface
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
,
4039 T7
, T8
, T9
, T10
> > {
4041 typedef ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
> ParamType
;
4043 CartesianProductGenerator10(const ParamGenerator
<T1
>& g1
,
4044 const ParamGenerator
<T2
>& g2
, const ParamGenerator
<T3
>& g3
,
4045 const ParamGenerator
<T4
>& g4
, const ParamGenerator
<T5
>& g5
,
4046 const ParamGenerator
<T6
>& g6
, const ParamGenerator
<T7
>& g7
,
4047 const ParamGenerator
<T8
>& g8
, const ParamGenerator
<T9
>& g9
,
4048 const ParamGenerator
<T10
>& g10
)
4049 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
), g8_(g8
),
4050 g9_(g9
), g10_(g10
) {}
4051 virtual ~CartesianProductGenerator10() {}
4053 virtual ParamIteratorInterface
<ParamType
>* Begin() const {
4054 return new Iterator(this, g1_
, g1_
.begin(), g2_
, g2_
.begin(), g3_
,
4055 g3_
.begin(), g4_
, g4_
.begin(), g5_
, g5_
.begin(), g6_
, g6_
.begin(), g7_
,
4056 g7_
.begin(), g8_
, g8_
.begin(), g9_
, g9_
.begin(), g10_
, g10_
.begin());
4058 virtual ParamIteratorInterface
<ParamType
>* End() const {
4059 return new Iterator(this, g1_
, g1_
.end(), g2_
, g2_
.end(), g3_
, g3_
.end(),
4060 g4_
, g4_
.end(), g5_
, g5_
.end(), g6_
, g6_
.end(), g7_
, g7_
.end(), g8_
,
4061 g8_
.end(), g9_
, g9_
.end(), g10_
, g10_
.end());
4065 class Iterator
: public ParamIteratorInterface
<ParamType
> {
4067 Iterator(const ParamGeneratorInterface
<ParamType
>* base
,
4068 const ParamGenerator
<T1
>& g1
,
4069 const typename ParamGenerator
<T1
>::iterator
& current1
,
4070 const ParamGenerator
<T2
>& g2
,
4071 const typename ParamGenerator
<T2
>::iterator
& current2
,
4072 const ParamGenerator
<T3
>& g3
,
4073 const typename ParamGenerator
<T3
>::iterator
& current3
,
4074 const ParamGenerator
<T4
>& g4
,
4075 const typename ParamGenerator
<T4
>::iterator
& current4
,
4076 const ParamGenerator
<T5
>& g5
,
4077 const typename ParamGenerator
<T5
>::iterator
& current5
,
4078 const ParamGenerator
<T6
>& g6
,
4079 const typename ParamGenerator
<T6
>::iterator
& current6
,
4080 const ParamGenerator
<T7
>& g7
,
4081 const typename ParamGenerator
<T7
>::iterator
& current7
,
4082 const ParamGenerator
<T8
>& g8
,
4083 const typename ParamGenerator
<T8
>::iterator
& current8
,
4084 const ParamGenerator
<T9
>& g9
,
4085 const typename ParamGenerator
<T9
>::iterator
& current9
,
4086 const ParamGenerator
<T10
>& g10
,
4087 const typename ParamGenerator
<T10
>::iterator
& current10
)
4089 begin1_(g1
.begin()), end1_(g1
.end()), current1_(current1
),
4090 begin2_(g2
.begin()), end2_(g2
.end()), current2_(current2
),
4091 begin3_(g3
.begin()), end3_(g3
.end()), current3_(current3
),
4092 begin4_(g4
.begin()), end4_(g4
.end()), current4_(current4
),
4093 begin5_(g5
.begin()), end5_(g5
.end()), current5_(current5
),
4094 begin6_(g6
.begin()), end6_(g6
.end()), current6_(current6
),
4095 begin7_(g7
.begin()), end7_(g7
.end()), current7_(current7
),
4096 begin8_(g8
.begin()), end8_(g8
.end()), current8_(current8
),
4097 begin9_(g9
.begin()), end9_(g9
.end()), current9_(current9
),
4098 begin10_(g10
.begin()), end10_(g10
.end()), current10_(current10
) {
4099 ComputeCurrentValue();
4101 virtual ~Iterator() {}
4103 virtual const ParamGeneratorInterface
<ParamType
>* BaseGenerator() const {
4106 // Advance should not be called on beyond-of-range iterators
4107 // so no component iterators must be beyond end of range, either.
4108 virtual void Advance() {
4111 if (current10_
== end10_
) {
4112 current10_
= begin10_
;
4115 if (current9_
== end9_
) {
4116 current9_
= begin9_
;
4119 if (current8_
== end8_
) {
4120 current8_
= begin8_
;
4123 if (current7_
== end7_
) {
4124 current7_
= begin7_
;
4127 if (current6_
== end6_
) {
4128 current6_
= begin6_
;
4131 if (current5_
== end5_
) {
4132 current5_
= begin5_
;
4135 if (current4_
== end4_
) {
4136 current4_
= begin4_
;
4139 if (current3_
== end3_
) {
4140 current3_
= begin3_
;
4143 if (current2_
== end2_
) {
4144 current2_
= begin2_
;
4147 ComputeCurrentValue();
4149 virtual ParamIteratorInterface
<ParamType
>* Clone() const {
4150 return new Iterator(*this);
4152 virtual const ParamType
* Current() const { return ¤t_value_
; }
4153 virtual bool Equals(const ParamIteratorInterface
<ParamType
>& other
) const {
4154 // Having the same base generator guarantees that the other
4155 // iterator is of the same type and we can downcast.
4156 GTEST_CHECK_(BaseGenerator() == other
.BaseGenerator())
4157 << "The program attempted to compare iterators "
4158 << "from different generators." << std::endl
;
4159 const Iterator
* typed_other
=
4160 CheckedDowncastToActualType
<const Iterator
>(&other
);
4161 // We must report iterators equal if they both point beyond their
4162 // respective ranges. That can happen in a variety of fashions,
4163 // so we have to consult AtEnd().
4164 return (AtEnd() && typed_other
->AtEnd()) ||
4166 current1_
== typed_other
->current1_
&&
4167 current2_
== typed_other
->current2_
&&
4168 current3_
== typed_other
->current3_
&&
4169 current4_
== typed_other
->current4_
&&
4170 current5_
== typed_other
->current5_
&&
4171 current6_
== typed_other
->current6_
&&
4172 current7_
== typed_other
->current7_
&&
4173 current8_
== typed_other
->current8_
&&
4174 current9_
== typed_other
->current9_
&&
4175 current10_
== typed_other
->current10_
);
4179 Iterator(const Iterator
& other
)
4180 : base_(other
.base_
),
4181 begin1_(other
.begin1_
),
4183 current1_(other
.current1_
),
4184 begin2_(other
.begin2_
),
4186 current2_(other
.current2_
),
4187 begin3_(other
.begin3_
),
4189 current3_(other
.current3_
),
4190 begin4_(other
.begin4_
),
4192 current4_(other
.current4_
),
4193 begin5_(other
.begin5_
),
4195 current5_(other
.current5_
),
4196 begin6_(other
.begin6_
),
4198 current6_(other
.current6_
),
4199 begin7_(other
.begin7_
),
4201 current7_(other
.current7_
),
4202 begin8_(other
.begin8_
),
4204 current8_(other
.current8_
),
4205 begin9_(other
.begin9_
),
4207 current9_(other
.current9_
),
4208 begin10_(other
.begin10_
),
4209 end10_(other
.end10_
),
4210 current10_(other
.current10_
) {
4211 ComputeCurrentValue();
4214 void ComputeCurrentValue() {
4216 current_value_
= ParamType(*current1_
, *current2_
, *current3_
,
4217 *current4_
, *current5_
, *current6_
, *current7_
, *current8_
,
4218 *current9_
, *current10_
);
4220 bool AtEnd() const {
4221 // We must report iterator past the end of the range when either of the
4222 // component iterators has reached the end of its range.
4224 current1_
== end1_
||
4225 current2_
== end2_
||
4226 current3_
== end3_
||
4227 current4_
== end4_
||
4228 current5_
== end5_
||
4229 current6_
== end6_
||
4230 current7_
== end7_
||
4231 current8_
== end8_
||
4232 current9_
== end9_
||
4233 current10_
== end10_
;
4236 const ParamGeneratorInterface
<ParamType
>* const base_
;
4237 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4238 // current[i]_ is the actual traversing iterator.
4239 const typename ParamGenerator
<T1
>::iterator begin1_
;
4240 const typename ParamGenerator
<T1
>::iterator end1_
;
4241 typename ParamGenerator
<T1
>::iterator current1_
;
4242 const typename ParamGenerator
<T2
>::iterator begin2_
;
4243 const typename ParamGenerator
<T2
>::iterator end2_
;
4244 typename ParamGenerator
<T2
>::iterator current2_
;
4245 const typename ParamGenerator
<T3
>::iterator begin3_
;
4246 const typename ParamGenerator
<T3
>::iterator end3_
;
4247 typename ParamGenerator
<T3
>::iterator current3_
;
4248 const typename ParamGenerator
<T4
>::iterator begin4_
;
4249 const typename ParamGenerator
<T4
>::iterator end4_
;
4250 typename ParamGenerator
<T4
>::iterator current4_
;
4251 const typename ParamGenerator
<T5
>::iterator begin5_
;
4252 const typename ParamGenerator
<T5
>::iterator end5_
;
4253 typename ParamGenerator
<T5
>::iterator current5_
;
4254 const typename ParamGenerator
<T6
>::iterator begin6_
;
4255 const typename ParamGenerator
<T6
>::iterator end6_
;
4256 typename ParamGenerator
<T6
>::iterator current6_
;
4257 const typename ParamGenerator
<T7
>::iterator begin7_
;
4258 const typename ParamGenerator
<T7
>::iterator end7_
;
4259 typename ParamGenerator
<T7
>::iterator current7_
;
4260 const typename ParamGenerator
<T8
>::iterator begin8_
;
4261 const typename ParamGenerator
<T8
>::iterator end8_
;
4262 typename ParamGenerator
<T8
>::iterator current8_
;
4263 const typename ParamGenerator
<T9
>::iterator begin9_
;
4264 const typename ParamGenerator
<T9
>::iterator end9_
;
4265 typename ParamGenerator
<T9
>::iterator current9_
;
4266 const typename ParamGenerator
<T10
>::iterator begin10_
;
4267 const typename ParamGenerator
<T10
>::iterator end10_
;
4268 typename ParamGenerator
<T10
>::iterator current10_
;
4269 ParamType current_value_
;
4272 const ParamGenerator
<T1
> g1_
;
4273 const ParamGenerator
<T2
> g2_
;
4274 const ParamGenerator
<T3
> g3_
;
4275 const ParamGenerator
<T4
> g4_
;
4276 const ParamGenerator
<T5
> g5_
;
4277 const ParamGenerator
<T6
> g6_
;
4278 const ParamGenerator
<T7
> g7_
;
4279 const ParamGenerator
<T8
> g8_
;
4280 const ParamGenerator
<T9
> g9_
;
4281 const ParamGenerator
<T10
> g10_
;
4285 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
4287 // Helper classes providing Combine() with polymorphic features. They allow
4288 // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
4289 // convertible to U.
4291 template <class Generator1
, class Generator2
>
4292 class CartesianProductHolder2
{
4294 CartesianProductHolder2(const Generator1
& g1
, const Generator2
& g2
)
4295 : g1_(g1
), g2_(g2
) {}
4296 template <typename T1
, typename T2
>
4297 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
> >() const {
4298 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
> >(
4299 new CartesianProductGenerator2
<T1
, T2
>(
4300 static_cast<ParamGenerator
<T1
> >(g1_
),
4301 static_cast<ParamGenerator
<T2
> >(g2_
)));
4305 const Generator1 g1_
;
4306 const Generator2 g2_
;
4309 template <class Generator1
, class Generator2
, class Generator3
>
4310 class CartesianProductHolder3
{
4312 CartesianProductHolder3(const Generator1
& g1
, const Generator2
& g2
,
4313 const Generator3
& g3
)
4314 : g1_(g1
), g2_(g2
), g3_(g3
) {}
4315 template <typename T1
, typename T2
, typename T3
>
4316 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
> >() const {
4317 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
> >(
4318 new CartesianProductGenerator3
<T1
, T2
, T3
>(
4319 static_cast<ParamGenerator
<T1
> >(g1_
),
4320 static_cast<ParamGenerator
<T2
> >(g2_
),
4321 static_cast<ParamGenerator
<T3
> >(g3_
)));
4325 const Generator1 g1_
;
4326 const Generator2 g2_
;
4327 const Generator3 g3_
;
4330 template <class Generator1
, class Generator2
, class Generator3
,
4332 class CartesianProductHolder4
{
4334 CartesianProductHolder4(const Generator1
& g1
, const Generator2
& g2
,
4335 const Generator3
& g3
, const Generator4
& g4
)
4336 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
) {}
4337 template <typename T1
, typename T2
, typename T3
, typename T4
>
4338 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
> >() const {
4339 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
> >(
4340 new CartesianProductGenerator4
<T1
, T2
, T3
, T4
>(
4341 static_cast<ParamGenerator
<T1
> >(g1_
),
4342 static_cast<ParamGenerator
<T2
> >(g2_
),
4343 static_cast<ParamGenerator
<T3
> >(g3_
),
4344 static_cast<ParamGenerator
<T4
> >(g4_
)));
4348 const Generator1 g1_
;
4349 const Generator2 g2_
;
4350 const Generator3 g3_
;
4351 const Generator4 g4_
;
4354 template <class Generator1
, class Generator2
, class Generator3
,
4355 class Generator4
, class Generator5
>
4356 class CartesianProductHolder5
{
4358 CartesianProductHolder5(const Generator1
& g1
, const Generator2
& g2
,
4359 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
)
4360 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
) {}
4361 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
4362 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
> >() const {
4363 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
> >(
4364 new CartesianProductGenerator5
<T1
, T2
, T3
, T4
, T5
>(
4365 static_cast<ParamGenerator
<T1
> >(g1_
),
4366 static_cast<ParamGenerator
<T2
> >(g2_
),
4367 static_cast<ParamGenerator
<T3
> >(g3_
),
4368 static_cast<ParamGenerator
<T4
> >(g4_
),
4369 static_cast<ParamGenerator
<T5
> >(g5_
)));
4373 const Generator1 g1_
;
4374 const Generator2 g2_
;
4375 const Generator3 g3_
;
4376 const Generator4 g4_
;
4377 const Generator5 g5_
;
4380 template <class Generator1
, class Generator2
, class Generator3
,
4381 class Generator4
, class Generator5
, class Generator6
>
4382 class CartesianProductHolder6
{
4384 CartesianProductHolder6(const Generator1
& g1
, const Generator2
& g2
,
4385 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
,
4386 const Generator6
& g6
)
4387 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
) {}
4388 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4390 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
> >() const {
4391 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
> >(
4392 new CartesianProductGenerator6
<T1
, T2
, T3
, T4
, T5
, T6
>(
4393 static_cast<ParamGenerator
<T1
> >(g1_
),
4394 static_cast<ParamGenerator
<T2
> >(g2_
),
4395 static_cast<ParamGenerator
<T3
> >(g3_
),
4396 static_cast<ParamGenerator
<T4
> >(g4_
),
4397 static_cast<ParamGenerator
<T5
> >(g5_
),
4398 static_cast<ParamGenerator
<T6
> >(g6_
)));
4402 const Generator1 g1_
;
4403 const Generator2 g2_
;
4404 const Generator3 g3_
;
4405 const Generator4 g4_
;
4406 const Generator5 g5_
;
4407 const Generator6 g6_
;
4410 template <class Generator1
, class Generator2
, class Generator3
,
4411 class Generator4
, class Generator5
, class Generator6
, class Generator7
>
4412 class CartesianProductHolder7
{
4414 CartesianProductHolder7(const Generator1
& g1
, const Generator2
& g2
,
4415 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
,
4416 const Generator6
& g6
, const Generator7
& g7
)
4417 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
) {}
4418 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4419 typename T6
, typename T7
>
4420 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
,
4422 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
> >(
4423 new CartesianProductGenerator7
<T1
, T2
, T3
, T4
, T5
, T6
, T7
>(
4424 static_cast<ParamGenerator
<T1
> >(g1_
),
4425 static_cast<ParamGenerator
<T2
> >(g2_
),
4426 static_cast<ParamGenerator
<T3
> >(g3_
),
4427 static_cast<ParamGenerator
<T4
> >(g4_
),
4428 static_cast<ParamGenerator
<T5
> >(g5_
),
4429 static_cast<ParamGenerator
<T6
> >(g6_
),
4430 static_cast<ParamGenerator
<T7
> >(g7_
)));
4434 const Generator1 g1_
;
4435 const Generator2 g2_
;
4436 const Generator3 g3_
;
4437 const Generator4 g4_
;
4438 const Generator5 g5_
;
4439 const Generator6 g6_
;
4440 const Generator7 g7_
;
4443 template <class Generator1
, class Generator2
, class Generator3
,
4444 class Generator4
, class Generator5
, class Generator6
, class Generator7
,
4446 class CartesianProductHolder8
{
4448 CartesianProductHolder8(const Generator1
& g1
, const Generator2
& g2
,
4449 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
,
4450 const Generator6
& g6
, const Generator7
& g7
, const Generator8
& g8
)
4451 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
),
4453 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4454 typename T6
, typename T7
, typename T8
>
4455 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
,
4457 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
> >(
4458 new CartesianProductGenerator8
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
>(
4459 static_cast<ParamGenerator
<T1
> >(g1_
),
4460 static_cast<ParamGenerator
<T2
> >(g2_
),
4461 static_cast<ParamGenerator
<T3
> >(g3_
),
4462 static_cast<ParamGenerator
<T4
> >(g4_
),
4463 static_cast<ParamGenerator
<T5
> >(g5_
),
4464 static_cast<ParamGenerator
<T6
> >(g6_
),
4465 static_cast<ParamGenerator
<T7
> >(g7_
),
4466 static_cast<ParamGenerator
<T8
> >(g8_
)));
4470 const Generator1 g1_
;
4471 const Generator2 g2_
;
4472 const Generator3 g3_
;
4473 const Generator4 g4_
;
4474 const Generator5 g5_
;
4475 const Generator6 g6_
;
4476 const Generator7 g7_
;
4477 const Generator8 g8_
;
4480 template <class Generator1
, class Generator2
, class Generator3
,
4481 class Generator4
, class Generator5
, class Generator6
, class Generator7
,
4482 class Generator8
, class Generator9
>
4483 class CartesianProductHolder9
{
4485 CartesianProductHolder9(const Generator1
& g1
, const Generator2
& g2
,
4486 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
,
4487 const Generator6
& g6
, const Generator7
& g7
, const Generator8
& g8
,
4488 const Generator9
& g9
)
4489 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
), g8_(g8
),
4491 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4492 typename T6
, typename T7
, typename T8
, typename T9
>
4493 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
,
4495 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
,
4497 new CartesianProductGenerator9
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
>(
4498 static_cast<ParamGenerator
<T1
> >(g1_
),
4499 static_cast<ParamGenerator
<T2
> >(g2_
),
4500 static_cast<ParamGenerator
<T3
> >(g3_
),
4501 static_cast<ParamGenerator
<T4
> >(g4_
),
4502 static_cast<ParamGenerator
<T5
> >(g5_
),
4503 static_cast<ParamGenerator
<T6
> >(g6_
),
4504 static_cast<ParamGenerator
<T7
> >(g7_
),
4505 static_cast<ParamGenerator
<T8
> >(g8_
),
4506 static_cast<ParamGenerator
<T9
> >(g9_
)));
4510 const Generator1 g1_
;
4511 const Generator2 g2_
;
4512 const Generator3 g3_
;
4513 const Generator4 g4_
;
4514 const Generator5 g5_
;
4515 const Generator6 g6_
;
4516 const Generator7 g7_
;
4517 const Generator8 g8_
;
4518 const Generator9 g9_
;
4521 template <class Generator1
, class Generator2
, class Generator3
,
4522 class Generator4
, class Generator5
, class Generator6
, class Generator7
,
4523 class Generator8
, class Generator9
, class Generator10
>
4524 class CartesianProductHolder10
{
4526 CartesianProductHolder10(const Generator1
& g1
, const Generator2
& g2
,
4527 const Generator3
& g3
, const Generator4
& g4
, const Generator5
& g5
,
4528 const Generator6
& g6
, const Generator7
& g7
, const Generator8
& g8
,
4529 const Generator9
& g9
, const Generator10
& g10
)
4530 : g1_(g1
), g2_(g2
), g3_(g3
), g4_(g4
), g5_(g5
), g6_(g6
), g7_(g7
), g8_(g8
),
4531 g9_(g9
), g10_(g10
) {}
4532 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
4533 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
>
4534 operator ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
,
4535 T9
, T10
> >() const {
4536 return ParamGenerator
< ::std::tr1::tuple
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
,
4538 new CartesianProductGenerator10
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
,
4540 static_cast<ParamGenerator
<T1
> >(g1_
),
4541 static_cast<ParamGenerator
<T2
> >(g2_
),
4542 static_cast<ParamGenerator
<T3
> >(g3_
),
4543 static_cast<ParamGenerator
<T4
> >(g4_
),
4544 static_cast<ParamGenerator
<T5
> >(g5_
),
4545 static_cast<ParamGenerator
<T6
> >(g6_
),
4546 static_cast<ParamGenerator
<T7
> >(g7_
),
4547 static_cast<ParamGenerator
<T8
> >(g8_
),
4548 static_cast<ParamGenerator
<T9
> >(g9_
),
4549 static_cast<ParamGenerator
<T10
> >(g10_
)));
4553 const Generator1 g1_
;
4554 const Generator2 g2_
;
4555 const Generator3 g3_
;
4556 const Generator4 g4_
;
4557 const Generator5 g5_
;
4558 const Generator6 g6_
;
4559 const Generator7 g7_
;
4560 const Generator8 g8_
;
4561 const Generator9 g9_
;
4562 const Generator10 g10_
;
4565 #endif // GTEST_HAS_COMBINE
4567 } // namespace internal
4568 } // namespace testing
4570 #endif // GTEST_HAS_PARAM_TEST
4572 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_