blob: 4fac8c02703d591eb2f22ef14841b42556c50408 [file] [log] [blame]
Austin Schuh0cbef622015-09-06 17:34:52 -07001// This file was GENERATED by command:
2// pump.py gtest-param-util-generated.h.pump
3// DO NOT EDIT BY HAND!!!
4
5// Copyright 2008 Google Inc.
6// All Rights Reserved.
7//
8// Redistribution and use in source and binary forms, with or without
9// modification, are permitted provided that the following conditions are
10// met:
11//
12// * Redistributions of source code must retain the above copyright
13// notice, this list of conditions and the following disclaimer.
14// * Redistributions in binary form must reproduce the above
15// copyright notice, this list of conditions and the following disclaimer
16// in the documentation and/or other materials provided with the
17// distribution.
18// * Neither the name of Google Inc. nor the names of its
19// contributors may be used to endorse or promote products derived from
20// this software without specific prior written permission.
21//
22// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Austin Schuh889ac432018-10-29 22:57:02 -070033
Austin Schuh0cbef622015-09-06 17:34:52 -070034
35// Type and function utilities for implementing parameterized tests.
36// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
37//
38// Currently Google Test supports at most 50 arguments in Values,
39// and at most 10 arguments in Combine. Please contact
40// googletestframework@googlegroups.com if you need more.
41// Please note that the number of arguments to Combine is limited
42// by the maximum arity of the implementation of tuple which is
43// currently set at 10.
44
Austin Schuh889ac432018-10-29 22:57:02 -070045// GOOGLETEST_CM0001 DO NOT DELETE
46
Austin Schuh0cbef622015-09-06 17:34:52 -070047#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
49
Austin Schuh0cbef622015-09-06 17:34:52 -070050#include "gtest/internal/gtest-param-util.h"
51#include "gtest/internal/gtest-port.h"
52
Austin Schuh0cbef622015-09-06 17:34:52 -070053namespace testing {
54
55// Forward declarations of ValuesIn(), which is implemented in
56// include/gtest/gtest-param-test.h.
57template <typename ForwardIterator>
58internal::ParamGenerator<
59 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
60ValuesIn(ForwardIterator begin, ForwardIterator end);
61
62template <typename T, size_t N>
63internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
64
65template <class Container>
66internal::ParamGenerator<typename Container::value_type> ValuesIn(
67 const Container& container);
68
69namespace internal {
70
71// Used in the Values() function to provide polymorphic capabilities.
72template <typename T1>
73class ValueArray1 {
74 public:
75 explicit ValueArray1(T1 v1) : v1_(v1) {}
76
77 template <typename T>
78 operator ParamGenerator<T>() const {
79 const T array[] = {static_cast<T>(v1_)};
80 return ValuesIn(array);
81 }
82
Austin Schuh889ac432018-10-29 22:57:02 -070083 ValueArray1(const ValueArray1& other) : v1_(other.v1_) {}
84
Austin Schuh0cbef622015-09-06 17:34:52 -070085 private:
86 // No implementation - assignment is unsupported.
87 void operator=(const ValueArray1& other);
88
89 const T1 v1_;
90};
91
92template <typename T1, typename T2>
93class ValueArray2 {
94 public:
95 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
96
97 template <typename T>
98 operator ParamGenerator<T>() const {
99 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
100 return ValuesIn(array);
101 }
102
Austin Schuh889ac432018-10-29 22:57:02 -0700103 ValueArray2(const ValueArray2& other) : v1_(other.v1_), v2_(other.v2_) {}
104
Austin Schuh0cbef622015-09-06 17:34:52 -0700105 private:
106 // No implementation - assignment is unsupported.
107 void operator=(const ValueArray2& other);
108
109 const T1 v1_;
110 const T2 v2_;
111};
112
113template <typename T1, typename T2, typename T3>
114class ValueArray3 {
115 public:
116 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
117
118 template <typename T>
119 operator ParamGenerator<T>() const {
120 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
121 static_cast<T>(v3_)};
122 return ValuesIn(array);
123 }
124
Austin Schuh889ac432018-10-29 22:57:02 -0700125 ValueArray3(const ValueArray3& other) : v1_(other.v1_), v2_(other.v2_),
126 v3_(other.v3_) {}
127
Austin Schuh0cbef622015-09-06 17:34:52 -0700128 private:
129 // No implementation - assignment is unsupported.
130 void operator=(const ValueArray3& other);
131
132 const T1 v1_;
133 const T2 v2_;
134 const T3 v3_;
135};
136
137template <typename T1, typename T2, typename T3, typename T4>
138class ValueArray4 {
139 public:
140 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
141 v4_(v4) {}
142
143 template <typename T>
144 operator ParamGenerator<T>() const {
145 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
146 static_cast<T>(v3_), static_cast<T>(v4_)};
147 return ValuesIn(array);
148 }
149
Austin Schuh889ac432018-10-29 22:57:02 -0700150 ValueArray4(const ValueArray4& other) : v1_(other.v1_), v2_(other.v2_),
151 v3_(other.v3_), v4_(other.v4_) {}
152
Austin Schuh0cbef622015-09-06 17:34:52 -0700153 private:
154 // No implementation - assignment is unsupported.
155 void operator=(const ValueArray4& other);
156
157 const T1 v1_;
158 const T2 v2_;
159 const T3 v3_;
160 const T4 v4_;
161};
162
163template <typename T1, typename T2, typename T3, typename T4, typename T5>
164class ValueArray5 {
165 public:
166 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
167 v4_(v4), v5_(v5) {}
168
169 template <typename T>
170 operator ParamGenerator<T>() const {
171 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
172 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
173 return ValuesIn(array);
174 }
175
Austin Schuh889ac432018-10-29 22:57:02 -0700176 ValueArray5(const ValueArray5& other) : v1_(other.v1_), v2_(other.v2_),
177 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_) {}
178
Austin Schuh0cbef622015-09-06 17:34:52 -0700179 private:
180 // No implementation - assignment is unsupported.
181 void operator=(const ValueArray5& other);
182
183 const T1 v1_;
184 const T2 v2_;
185 const T3 v3_;
186 const T4 v4_;
187 const T5 v5_;
188};
189
190template <typename T1, typename T2, typename T3, typename T4, typename T5,
191 typename T6>
192class ValueArray6 {
193 public:
194 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
195 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
196
197 template <typename T>
198 operator ParamGenerator<T>() const {
199 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
200 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
201 static_cast<T>(v6_)};
202 return ValuesIn(array);
203 }
204
Austin Schuh889ac432018-10-29 22:57:02 -0700205 ValueArray6(const ValueArray6& other) : v1_(other.v1_), v2_(other.v2_),
206 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_) {}
207
Austin Schuh0cbef622015-09-06 17:34:52 -0700208 private:
209 // No implementation - assignment is unsupported.
210 void operator=(const ValueArray6& other);
211
212 const T1 v1_;
213 const T2 v2_;
214 const T3 v3_;
215 const T4 v4_;
216 const T5 v5_;
217 const T6 v6_;
218};
219
220template <typename T1, typename T2, typename T3, typename T4, typename T5,
221 typename T6, typename T7>
222class ValueArray7 {
223 public:
224 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
225 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
226
227 template <typename T>
228 operator ParamGenerator<T>() const {
229 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
230 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
231 static_cast<T>(v6_), static_cast<T>(v7_)};
232 return ValuesIn(array);
233 }
234
Austin Schuh889ac432018-10-29 22:57:02 -0700235 ValueArray7(const ValueArray7& other) : v1_(other.v1_), v2_(other.v2_),
236 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
237 v7_(other.v7_) {}
238
Austin Schuh0cbef622015-09-06 17:34:52 -0700239 private:
240 // No implementation - assignment is unsupported.
241 void operator=(const ValueArray7& other);
242
243 const T1 v1_;
244 const T2 v2_;
245 const T3 v3_;
246 const T4 v4_;
247 const T5 v5_;
248 const T6 v6_;
249 const T7 v7_;
250};
251
252template <typename T1, typename T2, typename T3, typename T4, typename T5,
253 typename T6, typename T7, typename T8>
254class ValueArray8 {
255 public:
256 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
257 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
258 v8_(v8) {}
259
260 template <typename T>
261 operator ParamGenerator<T>() const {
262 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
263 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
264 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
265 return ValuesIn(array);
266 }
267
Austin Schuh889ac432018-10-29 22:57:02 -0700268 ValueArray8(const ValueArray8& other) : v1_(other.v1_), v2_(other.v2_),
269 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
270 v7_(other.v7_), v8_(other.v8_) {}
271
Austin Schuh0cbef622015-09-06 17:34:52 -0700272 private:
273 // No implementation - assignment is unsupported.
274 void operator=(const ValueArray8& other);
275
276 const T1 v1_;
277 const T2 v2_;
278 const T3 v3_;
279 const T4 v4_;
280 const T5 v5_;
281 const T6 v6_;
282 const T7 v7_;
283 const T8 v8_;
284};
285
286template <typename T1, typename T2, typename T3, typename T4, typename T5,
287 typename T6, typename T7, typename T8, typename T9>
288class ValueArray9 {
289 public:
290 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
291 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
292 v8_(v8), v9_(v9) {}
293
294 template <typename T>
295 operator ParamGenerator<T>() const {
296 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
297 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
298 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
299 static_cast<T>(v9_)};
300 return ValuesIn(array);
301 }
302
Austin Schuh889ac432018-10-29 22:57:02 -0700303 ValueArray9(const ValueArray9& other) : v1_(other.v1_), v2_(other.v2_),
304 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
305 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_) {}
306
Austin Schuh0cbef622015-09-06 17:34:52 -0700307 private:
308 // No implementation - assignment is unsupported.
309 void operator=(const ValueArray9& other);
310
311 const T1 v1_;
312 const T2 v2_;
313 const T3 v3_;
314 const T4 v4_;
315 const T5 v5_;
316 const T6 v6_;
317 const T7 v7_;
318 const T8 v8_;
319 const T9 v9_;
320};
321
322template <typename T1, typename T2, typename T3, typename T4, typename T5,
323 typename T6, typename T7, typename T8, typename T9, typename T10>
324class ValueArray10 {
325 public:
326 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
327 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
328 v8_(v8), v9_(v9), v10_(v10) {}
329
330 template <typename T>
331 operator ParamGenerator<T>() const {
332 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
333 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
334 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
335 static_cast<T>(v9_), static_cast<T>(v10_)};
336 return ValuesIn(array);
337 }
338
Austin Schuh889ac432018-10-29 22:57:02 -0700339 ValueArray10(const ValueArray10& other) : v1_(other.v1_), v2_(other.v2_),
340 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
341 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_) {}
342
Austin Schuh0cbef622015-09-06 17:34:52 -0700343 private:
344 // No implementation - assignment is unsupported.
345 void operator=(const ValueArray10& other);
346
347 const T1 v1_;
348 const T2 v2_;
349 const T3 v3_;
350 const T4 v4_;
351 const T5 v5_;
352 const T6 v6_;
353 const T7 v7_;
354 const T8 v8_;
355 const T9 v9_;
356 const T10 v10_;
357};
358
359template <typename T1, typename T2, typename T3, typename T4, typename T5,
360 typename T6, typename T7, typename T8, typename T9, typename T10,
361 typename T11>
362class ValueArray11 {
363 public:
364 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
365 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
366 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
367
368 template <typename T>
369 operator ParamGenerator<T>() const {
370 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
371 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
372 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
373 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
374 return ValuesIn(array);
375 }
376
Austin Schuh889ac432018-10-29 22:57:02 -0700377 ValueArray11(const ValueArray11& other) : v1_(other.v1_), v2_(other.v2_),
378 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
379 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
380 v11_(other.v11_) {}
381
Austin Schuh0cbef622015-09-06 17:34:52 -0700382 private:
383 // No implementation - assignment is unsupported.
384 void operator=(const ValueArray11& other);
385
386 const T1 v1_;
387 const T2 v2_;
388 const T3 v3_;
389 const T4 v4_;
390 const T5 v5_;
391 const T6 v6_;
392 const T7 v7_;
393 const T8 v8_;
394 const T9 v9_;
395 const T10 v10_;
396 const T11 v11_;
397};
398
399template <typename T1, typename T2, typename T3, typename T4, typename T5,
400 typename T6, typename T7, typename T8, typename T9, typename T10,
401 typename T11, typename T12>
402class ValueArray12 {
403 public:
404 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
405 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
406 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
407
408 template <typename T>
409 operator ParamGenerator<T>() const {
410 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
411 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
412 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
413 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
414 static_cast<T>(v12_)};
415 return ValuesIn(array);
416 }
417
Austin Schuh889ac432018-10-29 22:57:02 -0700418 ValueArray12(const ValueArray12& other) : v1_(other.v1_), v2_(other.v2_),
419 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
420 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
421 v11_(other.v11_), v12_(other.v12_) {}
422
Austin Schuh0cbef622015-09-06 17:34:52 -0700423 private:
424 // No implementation - assignment is unsupported.
425 void operator=(const ValueArray12& other);
426
427 const T1 v1_;
428 const T2 v2_;
429 const T3 v3_;
430 const T4 v4_;
431 const T5 v5_;
432 const T6 v6_;
433 const T7 v7_;
434 const T8 v8_;
435 const T9 v9_;
436 const T10 v10_;
437 const T11 v11_;
438 const T12 v12_;
439};
440
441template <typename T1, typename T2, typename T3, typename T4, typename T5,
442 typename T6, typename T7, typename T8, typename T9, typename T10,
443 typename T11, typename T12, typename T13>
444class ValueArray13 {
445 public:
446 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
447 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
448 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
449 v12_(v12), v13_(v13) {}
450
451 template <typename T>
452 operator ParamGenerator<T>() const {
453 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
454 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
455 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
456 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
457 static_cast<T>(v12_), static_cast<T>(v13_)};
458 return ValuesIn(array);
459 }
460
Austin Schuh889ac432018-10-29 22:57:02 -0700461 ValueArray13(const ValueArray13& other) : v1_(other.v1_), v2_(other.v2_),
462 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
463 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
464 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_) {}
465
Austin Schuh0cbef622015-09-06 17:34:52 -0700466 private:
467 // No implementation - assignment is unsupported.
468 void operator=(const ValueArray13& other);
469
470 const T1 v1_;
471 const T2 v2_;
472 const T3 v3_;
473 const T4 v4_;
474 const T5 v5_;
475 const T6 v6_;
476 const T7 v7_;
477 const T8 v8_;
478 const T9 v9_;
479 const T10 v10_;
480 const T11 v11_;
481 const T12 v12_;
482 const T13 v13_;
483};
484
485template <typename T1, typename T2, typename T3, typename T4, typename T5,
486 typename T6, typename T7, typename T8, typename T9, typename T10,
487 typename T11, typename T12, typename T13, typename T14>
488class ValueArray14 {
489 public:
490 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
491 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
492 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
493 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
494
495 template <typename T>
496 operator ParamGenerator<T>() const {
497 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
498 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
499 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
500 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
501 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
502 return ValuesIn(array);
503 }
504
Austin Schuh889ac432018-10-29 22:57:02 -0700505 ValueArray14(const ValueArray14& other) : v1_(other.v1_), v2_(other.v2_),
506 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
507 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
508 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_) {}
509
Austin Schuh0cbef622015-09-06 17:34:52 -0700510 private:
511 // No implementation - assignment is unsupported.
512 void operator=(const ValueArray14& other);
513
514 const T1 v1_;
515 const T2 v2_;
516 const T3 v3_;
517 const T4 v4_;
518 const T5 v5_;
519 const T6 v6_;
520 const T7 v7_;
521 const T8 v8_;
522 const T9 v9_;
523 const T10 v10_;
524 const T11 v11_;
525 const T12 v12_;
526 const T13 v13_;
527 const T14 v14_;
528};
529
530template <typename T1, typename T2, typename T3, typename T4, typename T5,
531 typename T6, typename T7, typename T8, typename T9, typename T10,
532 typename T11, typename T12, typename T13, typename T14, typename T15>
533class ValueArray15 {
534 public:
535 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
536 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
537 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
538 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
539
540 template <typename T>
541 operator ParamGenerator<T>() const {
542 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
543 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
544 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
545 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
546 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
547 static_cast<T>(v15_)};
548 return ValuesIn(array);
549 }
550
Austin Schuh889ac432018-10-29 22:57:02 -0700551 ValueArray15(const ValueArray15& other) : v1_(other.v1_), v2_(other.v2_),
552 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
553 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
554 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
555 v15_(other.v15_) {}
556
Austin Schuh0cbef622015-09-06 17:34:52 -0700557 private:
558 // No implementation - assignment is unsupported.
559 void operator=(const ValueArray15& other);
560
561 const T1 v1_;
562 const T2 v2_;
563 const T3 v3_;
564 const T4 v4_;
565 const T5 v5_;
566 const T6 v6_;
567 const T7 v7_;
568 const T8 v8_;
569 const T9 v9_;
570 const T10 v10_;
571 const T11 v11_;
572 const T12 v12_;
573 const T13 v13_;
574 const T14 v14_;
575 const T15 v15_;
576};
577
578template <typename T1, typename T2, typename T3, typename T4, typename T5,
579 typename T6, typename T7, typename T8, typename T9, typename T10,
580 typename T11, typename T12, typename T13, typename T14, typename T15,
581 typename T16>
582class ValueArray16 {
583 public:
584 ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
585 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
586 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
587 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
588 v16_(v16) {}
589
590 template <typename T>
591 operator ParamGenerator<T>() const {
592 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
593 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
594 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
595 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
596 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
597 static_cast<T>(v15_), static_cast<T>(v16_)};
598 return ValuesIn(array);
599 }
600
Austin Schuh889ac432018-10-29 22:57:02 -0700601 ValueArray16(const ValueArray16& other) : v1_(other.v1_), v2_(other.v2_),
602 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
603 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
604 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
605 v15_(other.v15_), v16_(other.v16_) {}
606
Austin Schuh0cbef622015-09-06 17:34:52 -0700607 private:
608 // No implementation - assignment is unsupported.
609 void operator=(const ValueArray16& other);
610
611 const T1 v1_;
612 const T2 v2_;
613 const T3 v3_;
614 const T4 v4_;
615 const T5 v5_;
616 const T6 v6_;
617 const T7 v7_;
618 const T8 v8_;
619 const T9 v9_;
620 const T10 v10_;
621 const T11 v11_;
622 const T12 v12_;
623 const T13 v13_;
624 const T14 v14_;
625 const T15 v15_;
626 const T16 v16_;
627};
628
629template <typename T1, typename T2, typename T3, typename T4, typename T5,
630 typename T6, typename T7, typename T8, typename T9, typename T10,
631 typename T11, typename T12, typename T13, typename T14, typename T15,
632 typename T16, typename T17>
633class ValueArray17 {
634 public:
635 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
636 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
637 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
638 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
639 v15_(v15), v16_(v16), v17_(v17) {}
640
641 template <typename T>
642 operator ParamGenerator<T>() const {
643 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
644 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
645 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
646 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
647 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
648 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
649 return ValuesIn(array);
650 }
651
Austin Schuh889ac432018-10-29 22:57:02 -0700652 ValueArray17(const ValueArray17& other) : v1_(other.v1_), v2_(other.v2_),
653 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
654 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
655 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
656 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_) {}
657
Austin Schuh0cbef622015-09-06 17:34:52 -0700658 private:
659 // No implementation - assignment is unsupported.
660 void operator=(const ValueArray17& other);
661
662 const T1 v1_;
663 const T2 v2_;
664 const T3 v3_;
665 const T4 v4_;
666 const T5 v5_;
667 const T6 v6_;
668 const T7 v7_;
669 const T8 v8_;
670 const T9 v9_;
671 const T10 v10_;
672 const T11 v11_;
673 const T12 v12_;
674 const T13 v13_;
675 const T14 v14_;
676 const T15 v15_;
677 const T16 v16_;
678 const T17 v17_;
679};
680
681template <typename T1, typename T2, typename T3, typename T4, typename T5,
682 typename T6, typename T7, typename T8, typename T9, typename T10,
683 typename T11, typename T12, typename T13, typename T14, typename T15,
684 typename T16, typename T17, typename T18>
685class ValueArray18 {
686 public:
687 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
688 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
689 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
690 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
691 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
692
693 template <typename T>
694 operator ParamGenerator<T>() const {
695 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
696 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
697 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
698 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
699 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
700 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
701 static_cast<T>(v18_)};
702 return ValuesIn(array);
703 }
704
Austin Schuh889ac432018-10-29 22:57:02 -0700705 ValueArray18(const ValueArray18& other) : v1_(other.v1_), v2_(other.v2_),
706 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
707 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
708 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
709 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_) {}
710
Austin Schuh0cbef622015-09-06 17:34:52 -0700711 private:
712 // No implementation - assignment is unsupported.
713 void operator=(const ValueArray18& other);
714
715 const T1 v1_;
716 const T2 v2_;
717 const T3 v3_;
718 const T4 v4_;
719 const T5 v5_;
720 const T6 v6_;
721 const T7 v7_;
722 const T8 v8_;
723 const T9 v9_;
724 const T10 v10_;
725 const T11 v11_;
726 const T12 v12_;
727 const T13 v13_;
728 const T14 v14_;
729 const T15 v15_;
730 const T16 v16_;
731 const T17 v17_;
732 const T18 v18_;
733};
734
735template <typename T1, typename T2, typename T3, typename T4, typename T5,
736 typename T6, typename T7, typename T8, typename T9, typename T10,
737 typename T11, typename T12, typename T13, typename T14, typename T15,
738 typename T16, typename T17, typename T18, typename T19>
739class ValueArray19 {
740 public:
741 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
742 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
743 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
744 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
745 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
746
747 template <typename T>
748 operator ParamGenerator<T>() const {
749 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
750 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
751 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
752 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
753 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
754 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
755 static_cast<T>(v18_), static_cast<T>(v19_)};
756 return ValuesIn(array);
757 }
758
Austin Schuh889ac432018-10-29 22:57:02 -0700759 ValueArray19(const ValueArray19& other) : v1_(other.v1_), v2_(other.v2_),
760 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
761 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
762 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
763 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
764 v19_(other.v19_) {}
765
Austin Schuh0cbef622015-09-06 17:34:52 -0700766 private:
767 // No implementation - assignment is unsupported.
768 void operator=(const ValueArray19& other);
769
770 const T1 v1_;
771 const T2 v2_;
772 const T3 v3_;
773 const T4 v4_;
774 const T5 v5_;
775 const T6 v6_;
776 const T7 v7_;
777 const T8 v8_;
778 const T9 v9_;
779 const T10 v10_;
780 const T11 v11_;
781 const T12 v12_;
782 const T13 v13_;
783 const T14 v14_;
784 const T15 v15_;
785 const T16 v16_;
786 const T17 v17_;
787 const T18 v18_;
788 const T19 v19_;
789};
790
791template <typename T1, typename T2, typename T3, typename T4, typename T5,
792 typename T6, typename T7, typename T8, typename T9, typename T10,
793 typename T11, typename T12, typename T13, typename T14, typename T15,
794 typename T16, typename T17, typename T18, typename T19, typename T20>
795class ValueArray20 {
796 public:
797 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
798 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
799 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
800 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
801 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
802 v19_(v19), v20_(v20) {}
803
804 template <typename T>
805 operator ParamGenerator<T>() const {
806 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
807 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
808 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
809 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
810 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
811 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
812 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
813 return ValuesIn(array);
814 }
815
Austin Schuh889ac432018-10-29 22:57:02 -0700816 ValueArray20(const ValueArray20& other) : v1_(other.v1_), v2_(other.v2_),
817 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
818 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
819 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
820 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
821 v19_(other.v19_), v20_(other.v20_) {}
822
Austin Schuh0cbef622015-09-06 17:34:52 -0700823 private:
824 // No implementation - assignment is unsupported.
825 void operator=(const ValueArray20& other);
826
827 const T1 v1_;
828 const T2 v2_;
829 const T3 v3_;
830 const T4 v4_;
831 const T5 v5_;
832 const T6 v6_;
833 const T7 v7_;
834 const T8 v8_;
835 const T9 v9_;
836 const T10 v10_;
837 const T11 v11_;
838 const T12 v12_;
839 const T13 v13_;
840 const T14 v14_;
841 const T15 v15_;
842 const T16 v16_;
843 const T17 v17_;
844 const T18 v18_;
845 const T19 v19_;
846 const T20 v20_;
847};
848
849template <typename T1, typename T2, typename T3, typename T4, typename T5,
850 typename T6, typename T7, typename T8, typename T9, typename T10,
851 typename T11, typename T12, typename T13, typename T14, typename T15,
852 typename T16, typename T17, typename T18, typename T19, typename T20,
853 typename T21>
854class ValueArray21 {
855 public:
856 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
857 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
858 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
859 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
860 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
861 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
862
863 template <typename T>
864 operator ParamGenerator<T>() const {
865 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
866 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
867 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
868 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
869 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
870 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
871 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
872 static_cast<T>(v21_)};
873 return ValuesIn(array);
874 }
875
Austin Schuh889ac432018-10-29 22:57:02 -0700876 ValueArray21(const ValueArray21& other) : v1_(other.v1_), v2_(other.v2_),
877 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
878 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
879 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
880 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
881 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_) {}
882
Austin Schuh0cbef622015-09-06 17:34:52 -0700883 private:
884 // No implementation - assignment is unsupported.
885 void operator=(const ValueArray21& other);
886
887 const T1 v1_;
888 const T2 v2_;
889 const T3 v3_;
890 const T4 v4_;
891 const T5 v5_;
892 const T6 v6_;
893 const T7 v7_;
894 const T8 v8_;
895 const T9 v9_;
896 const T10 v10_;
897 const T11 v11_;
898 const T12 v12_;
899 const T13 v13_;
900 const T14 v14_;
901 const T15 v15_;
902 const T16 v16_;
903 const T17 v17_;
904 const T18 v18_;
905 const T19 v19_;
906 const T20 v20_;
907 const T21 v21_;
908};
909
910template <typename T1, typename T2, typename T3, typename T4, typename T5,
911 typename T6, typename T7, typename T8, typename T9, typename T10,
912 typename T11, typename T12, typename T13, typename T14, typename T15,
913 typename T16, typename T17, typename T18, typename T19, typename T20,
914 typename T21, typename T22>
915class ValueArray22 {
916 public:
917 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
918 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
919 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
920 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
921 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
922 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
923
924 template <typename T>
925 operator ParamGenerator<T>() const {
926 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
927 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
928 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
929 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
930 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
931 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
932 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
933 static_cast<T>(v21_), static_cast<T>(v22_)};
934 return ValuesIn(array);
935 }
936
Austin Schuh889ac432018-10-29 22:57:02 -0700937 ValueArray22(const ValueArray22& other) : v1_(other.v1_), v2_(other.v2_),
938 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
939 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
940 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
941 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
942 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_) {}
943
Austin Schuh0cbef622015-09-06 17:34:52 -0700944 private:
945 // No implementation - assignment is unsupported.
946 void operator=(const ValueArray22& other);
947
948 const T1 v1_;
949 const T2 v2_;
950 const T3 v3_;
951 const T4 v4_;
952 const T5 v5_;
953 const T6 v6_;
954 const T7 v7_;
955 const T8 v8_;
956 const T9 v9_;
957 const T10 v10_;
958 const T11 v11_;
959 const T12 v12_;
960 const T13 v13_;
961 const T14 v14_;
962 const T15 v15_;
963 const T16 v16_;
964 const T17 v17_;
965 const T18 v18_;
966 const T19 v19_;
967 const T20 v20_;
968 const T21 v21_;
969 const T22 v22_;
970};
971
972template <typename T1, typename T2, typename T3, typename T4, typename T5,
973 typename T6, typename T7, typename T8, typename T9, typename T10,
974 typename T11, typename T12, typename T13, typename T14, typename T15,
975 typename T16, typename T17, typename T18, typename T19, typename T20,
976 typename T21, typename T22, typename T23>
977class ValueArray23 {
978 public:
979 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
980 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
981 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
982 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
983 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
984 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
985 v23_(v23) {}
986
987 template <typename T>
988 operator ParamGenerator<T>() const {
989 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
990 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
991 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
992 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
993 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
994 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
995 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
996 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
997 return ValuesIn(array);
998 }
999
Austin Schuh889ac432018-10-29 22:57:02 -07001000 ValueArray23(const ValueArray23& other) : v1_(other.v1_), v2_(other.v2_),
1001 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1002 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1003 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1004 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1005 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1006 v23_(other.v23_) {}
1007
Austin Schuh0cbef622015-09-06 17:34:52 -07001008 private:
1009 // No implementation - assignment is unsupported.
1010 void operator=(const ValueArray23& other);
1011
1012 const T1 v1_;
1013 const T2 v2_;
1014 const T3 v3_;
1015 const T4 v4_;
1016 const T5 v5_;
1017 const T6 v6_;
1018 const T7 v7_;
1019 const T8 v8_;
1020 const T9 v9_;
1021 const T10 v10_;
1022 const T11 v11_;
1023 const T12 v12_;
1024 const T13 v13_;
1025 const T14 v14_;
1026 const T15 v15_;
1027 const T16 v16_;
1028 const T17 v17_;
1029 const T18 v18_;
1030 const T19 v19_;
1031 const T20 v20_;
1032 const T21 v21_;
1033 const T22 v22_;
1034 const T23 v23_;
1035};
1036
1037template <typename T1, typename T2, typename T3, typename T4, typename T5,
1038 typename T6, typename T7, typename T8, typename T9, typename T10,
1039 typename T11, typename T12, typename T13, typename T14, typename T15,
1040 typename T16, typename T17, typename T18, typename T19, typename T20,
1041 typename T21, typename T22, typename T23, typename T24>
1042class ValueArray24 {
1043 public:
1044 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1045 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1046 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
1047 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1048 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1049 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1050 v22_(v22), v23_(v23), v24_(v24) {}
1051
1052 template <typename T>
1053 operator ParamGenerator<T>() const {
1054 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1055 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1056 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1057 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1058 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1059 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1060 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1061 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1062 static_cast<T>(v24_)};
1063 return ValuesIn(array);
1064 }
1065
Austin Schuh889ac432018-10-29 22:57:02 -07001066 ValueArray24(const ValueArray24& other) : v1_(other.v1_), v2_(other.v2_),
1067 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1068 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1069 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1070 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1071 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1072 v23_(other.v23_), v24_(other.v24_) {}
1073
Austin Schuh0cbef622015-09-06 17:34:52 -07001074 private:
1075 // No implementation - assignment is unsupported.
1076 void operator=(const ValueArray24& other);
1077
1078 const T1 v1_;
1079 const T2 v2_;
1080 const T3 v3_;
1081 const T4 v4_;
1082 const T5 v5_;
1083 const T6 v6_;
1084 const T7 v7_;
1085 const T8 v8_;
1086 const T9 v9_;
1087 const T10 v10_;
1088 const T11 v11_;
1089 const T12 v12_;
1090 const T13 v13_;
1091 const T14 v14_;
1092 const T15 v15_;
1093 const T16 v16_;
1094 const T17 v17_;
1095 const T18 v18_;
1096 const T19 v19_;
1097 const T20 v20_;
1098 const T21 v21_;
1099 const T22 v22_;
1100 const T23 v23_;
1101 const T24 v24_;
1102};
1103
1104template <typename T1, typename T2, typename T3, typename T4, typename T5,
1105 typename T6, typename T7, typename T8, typename T9, typename T10,
1106 typename T11, typename T12, typename T13, typename T14, typename T15,
1107 typename T16, typename T17, typename T18, typename T19, typename T20,
1108 typename T21, typename T22, typename T23, typename T24, typename T25>
1109class ValueArray25 {
1110 public:
1111 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1112 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1113 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
1114 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1115 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1116 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1117 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
1118
1119 template <typename T>
1120 operator ParamGenerator<T>() const {
1121 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1122 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1123 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1124 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1125 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1126 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1127 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1128 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1129 static_cast<T>(v24_), static_cast<T>(v25_)};
1130 return ValuesIn(array);
1131 }
1132
Austin Schuh889ac432018-10-29 22:57:02 -07001133 ValueArray25(const ValueArray25& other) : v1_(other.v1_), v2_(other.v2_),
1134 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1135 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1136 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1137 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1138 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1139 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_) {}
1140
Austin Schuh0cbef622015-09-06 17:34:52 -07001141 private:
1142 // No implementation - assignment is unsupported.
1143 void operator=(const ValueArray25& other);
1144
1145 const T1 v1_;
1146 const T2 v2_;
1147 const T3 v3_;
1148 const T4 v4_;
1149 const T5 v5_;
1150 const T6 v6_;
1151 const T7 v7_;
1152 const T8 v8_;
1153 const T9 v9_;
1154 const T10 v10_;
1155 const T11 v11_;
1156 const T12 v12_;
1157 const T13 v13_;
1158 const T14 v14_;
1159 const T15 v15_;
1160 const T16 v16_;
1161 const T17 v17_;
1162 const T18 v18_;
1163 const T19 v19_;
1164 const T20 v20_;
1165 const T21 v21_;
1166 const T22 v22_;
1167 const T23 v23_;
1168 const T24 v24_;
1169 const T25 v25_;
1170};
1171
1172template <typename T1, typename T2, typename T3, typename T4, typename T5,
1173 typename T6, typename T7, typename T8, typename T9, typename T10,
1174 typename T11, typename T12, typename T13, typename T14, typename T15,
1175 typename T16, typename T17, typename T18, typename T19, typename T20,
1176 typename T21, typename T22, typename T23, typename T24, typename T25,
1177 typename T26>
1178class ValueArray26 {
1179 public:
1180 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1181 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1182 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1183 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1184 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1185 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1186 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
1187
1188 template <typename T>
1189 operator ParamGenerator<T>() const {
1190 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1191 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1192 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1193 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1194 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1195 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1196 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1197 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1198 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
1199 return ValuesIn(array);
1200 }
1201
Austin Schuh889ac432018-10-29 22:57:02 -07001202 ValueArray26(const ValueArray26& other) : v1_(other.v1_), v2_(other.v2_),
1203 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1204 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1205 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1206 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1207 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1208 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_) {}
1209
Austin Schuh0cbef622015-09-06 17:34:52 -07001210 private:
1211 // No implementation - assignment is unsupported.
1212 void operator=(const ValueArray26& other);
1213
1214 const T1 v1_;
1215 const T2 v2_;
1216 const T3 v3_;
1217 const T4 v4_;
1218 const T5 v5_;
1219 const T6 v6_;
1220 const T7 v7_;
1221 const T8 v8_;
1222 const T9 v9_;
1223 const T10 v10_;
1224 const T11 v11_;
1225 const T12 v12_;
1226 const T13 v13_;
1227 const T14 v14_;
1228 const T15 v15_;
1229 const T16 v16_;
1230 const T17 v17_;
1231 const T18 v18_;
1232 const T19 v19_;
1233 const T20 v20_;
1234 const T21 v21_;
1235 const T22 v22_;
1236 const T23 v23_;
1237 const T24 v24_;
1238 const T25 v25_;
1239 const T26 v26_;
1240};
1241
1242template <typename T1, typename T2, typename T3, typename T4, typename T5,
1243 typename T6, typename T7, typename T8, typename T9, typename T10,
1244 typename T11, typename T12, typename T13, typename T14, typename T15,
1245 typename T16, typename T17, typename T18, typename T19, typename T20,
1246 typename T21, typename T22, typename T23, typename T24, typename T25,
1247 typename T26, typename T27>
1248class ValueArray27 {
1249 public:
1250 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1251 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1252 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1253 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1254 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1255 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1256 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1257 v26_(v26), v27_(v27) {}
1258
1259 template <typename T>
1260 operator ParamGenerator<T>() const {
1261 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1262 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1263 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1264 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1265 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1266 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1267 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1268 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1269 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1270 static_cast<T>(v27_)};
1271 return ValuesIn(array);
1272 }
1273
Austin Schuh889ac432018-10-29 22:57:02 -07001274 ValueArray27(const ValueArray27& other) : v1_(other.v1_), v2_(other.v2_),
1275 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1276 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1277 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1278 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1279 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1280 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1281 v27_(other.v27_) {}
1282
Austin Schuh0cbef622015-09-06 17:34:52 -07001283 private:
1284 // No implementation - assignment is unsupported.
1285 void operator=(const ValueArray27& other);
1286
1287 const T1 v1_;
1288 const T2 v2_;
1289 const T3 v3_;
1290 const T4 v4_;
1291 const T5 v5_;
1292 const T6 v6_;
1293 const T7 v7_;
1294 const T8 v8_;
1295 const T9 v9_;
1296 const T10 v10_;
1297 const T11 v11_;
1298 const T12 v12_;
1299 const T13 v13_;
1300 const T14 v14_;
1301 const T15 v15_;
1302 const T16 v16_;
1303 const T17 v17_;
1304 const T18 v18_;
1305 const T19 v19_;
1306 const T20 v20_;
1307 const T21 v21_;
1308 const T22 v22_;
1309 const T23 v23_;
1310 const T24 v24_;
1311 const T25 v25_;
1312 const T26 v26_;
1313 const T27 v27_;
1314};
1315
1316template <typename T1, typename T2, typename T3, typename T4, typename T5,
1317 typename T6, typename T7, typename T8, typename T9, typename T10,
1318 typename T11, typename T12, typename T13, typename T14, typename T15,
1319 typename T16, typename T17, typename T18, typename T19, typename T20,
1320 typename T21, typename T22, typename T23, typename T24, typename T25,
1321 typename T26, typename T27, typename T28>
1322class ValueArray28 {
1323 public:
1324 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1325 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1326 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1327 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1328 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1329 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1330 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1331 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1332
1333 template <typename T>
1334 operator ParamGenerator<T>() const {
1335 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1336 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1337 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1338 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1339 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1340 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1341 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1342 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1343 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1344 static_cast<T>(v27_), static_cast<T>(v28_)};
1345 return ValuesIn(array);
1346 }
1347
Austin Schuh889ac432018-10-29 22:57:02 -07001348 ValueArray28(const ValueArray28& other) : v1_(other.v1_), v2_(other.v2_),
1349 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1350 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1351 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1352 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1353 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1354 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1355 v27_(other.v27_), v28_(other.v28_) {}
1356
Austin Schuh0cbef622015-09-06 17:34:52 -07001357 private:
1358 // No implementation - assignment is unsupported.
1359 void operator=(const ValueArray28& other);
1360
1361 const T1 v1_;
1362 const T2 v2_;
1363 const T3 v3_;
1364 const T4 v4_;
1365 const T5 v5_;
1366 const T6 v6_;
1367 const T7 v7_;
1368 const T8 v8_;
1369 const T9 v9_;
1370 const T10 v10_;
1371 const T11 v11_;
1372 const T12 v12_;
1373 const T13 v13_;
1374 const T14 v14_;
1375 const T15 v15_;
1376 const T16 v16_;
1377 const T17 v17_;
1378 const T18 v18_;
1379 const T19 v19_;
1380 const T20 v20_;
1381 const T21 v21_;
1382 const T22 v22_;
1383 const T23 v23_;
1384 const T24 v24_;
1385 const T25 v25_;
1386 const T26 v26_;
1387 const T27 v27_;
1388 const T28 v28_;
1389};
1390
1391template <typename T1, typename T2, typename T3, typename T4, typename T5,
1392 typename T6, typename T7, typename T8, typename T9, typename T10,
1393 typename T11, typename T12, typename T13, typename T14, typename T15,
1394 typename T16, typename T17, typename T18, typename T19, typename T20,
1395 typename T21, typename T22, typename T23, typename T24, typename T25,
1396 typename T26, typename T27, typename T28, typename T29>
1397class ValueArray29 {
1398 public:
1399 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1400 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1401 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1402 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1403 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1404 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1405 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1406 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1407
1408 template <typename T>
1409 operator ParamGenerator<T>() const {
1410 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1411 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1412 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1413 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1414 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1415 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1416 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1417 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1418 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1419 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
1420 return ValuesIn(array);
1421 }
1422
Austin Schuh889ac432018-10-29 22:57:02 -07001423 ValueArray29(const ValueArray29& other) : v1_(other.v1_), v2_(other.v2_),
1424 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1425 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1426 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1427 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1428 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1429 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1430 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_) {}
1431
Austin Schuh0cbef622015-09-06 17:34:52 -07001432 private:
1433 // No implementation - assignment is unsupported.
1434 void operator=(const ValueArray29& other);
1435
1436 const T1 v1_;
1437 const T2 v2_;
1438 const T3 v3_;
1439 const T4 v4_;
1440 const T5 v5_;
1441 const T6 v6_;
1442 const T7 v7_;
1443 const T8 v8_;
1444 const T9 v9_;
1445 const T10 v10_;
1446 const T11 v11_;
1447 const T12 v12_;
1448 const T13 v13_;
1449 const T14 v14_;
1450 const T15 v15_;
1451 const T16 v16_;
1452 const T17 v17_;
1453 const T18 v18_;
1454 const T19 v19_;
1455 const T20 v20_;
1456 const T21 v21_;
1457 const T22 v22_;
1458 const T23 v23_;
1459 const T24 v24_;
1460 const T25 v25_;
1461 const T26 v26_;
1462 const T27 v27_;
1463 const T28 v28_;
1464 const T29 v29_;
1465};
1466
1467template <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>
1473class ValueArray30 {
1474 public:
1475 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1476 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1477 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1478 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1479 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1480 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1481 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1482 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1483 v29_(v29), v30_(v30) {}
1484
1485 template <typename T>
1486 operator ParamGenerator<T>() const {
1487 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1488 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1489 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1490 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1491 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1492 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1493 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1494 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1495 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1496 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1497 static_cast<T>(v30_)};
1498 return ValuesIn(array);
1499 }
1500
Austin Schuh889ac432018-10-29 22:57:02 -07001501 ValueArray30(const ValueArray30& other) : v1_(other.v1_), v2_(other.v2_),
1502 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1503 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1504 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1505 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1506 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1507 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1508 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_) {}
1509
Austin Schuh0cbef622015-09-06 17:34:52 -07001510 private:
1511 // No implementation - assignment is unsupported.
1512 void operator=(const ValueArray30& other);
1513
1514 const T1 v1_;
1515 const T2 v2_;
1516 const T3 v3_;
1517 const T4 v4_;
1518 const T5 v5_;
1519 const T6 v6_;
1520 const T7 v7_;
1521 const T8 v8_;
1522 const T9 v9_;
1523 const T10 v10_;
1524 const T11 v11_;
1525 const T12 v12_;
1526 const T13 v13_;
1527 const T14 v14_;
1528 const T15 v15_;
1529 const T16 v16_;
1530 const T17 v17_;
1531 const T18 v18_;
1532 const T19 v19_;
1533 const T20 v20_;
1534 const T21 v21_;
1535 const T22 v22_;
1536 const T23 v23_;
1537 const T24 v24_;
1538 const T25 v25_;
1539 const T26 v26_;
1540 const T27 v27_;
1541 const T28 v28_;
1542 const T29 v29_;
1543 const T30 v30_;
1544};
1545
1546template <typename T1, typename T2, typename T3, typename T4, typename T5,
1547 typename T6, typename T7, typename T8, typename T9, typename T10,
1548 typename T11, typename T12, typename T13, typename T14, typename T15,
1549 typename T16, typename T17, typename T18, typename T19, typename T20,
1550 typename T21, typename T22, typename T23, typename T24, typename T25,
1551 typename T26, typename T27, typename T28, typename T29, typename T30,
1552 typename T31>
1553class ValueArray31 {
1554 public:
1555 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1556 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1557 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1558 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1559 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1560 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1561 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1562 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1563 v29_(v29), v30_(v30), v31_(v31) {}
1564
1565 template <typename T>
1566 operator ParamGenerator<T>() const {
1567 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1568 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1569 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1570 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1571 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1572 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1573 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1574 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1575 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1576 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1577 static_cast<T>(v30_), static_cast<T>(v31_)};
1578 return ValuesIn(array);
1579 }
1580
Austin Schuh889ac432018-10-29 22:57:02 -07001581 ValueArray31(const ValueArray31& other) : v1_(other.v1_), v2_(other.v2_),
1582 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1583 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1584 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1585 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1586 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1587 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1588 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
1589 v31_(other.v31_) {}
1590
Austin Schuh0cbef622015-09-06 17:34:52 -07001591 private:
1592 // No implementation - assignment is unsupported.
1593 void operator=(const ValueArray31& other);
1594
1595 const T1 v1_;
1596 const T2 v2_;
1597 const T3 v3_;
1598 const T4 v4_;
1599 const T5 v5_;
1600 const T6 v6_;
1601 const T7 v7_;
1602 const T8 v8_;
1603 const T9 v9_;
1604 const T10 v10_;
1605 const T11 v11_;
1606 const T12 v12_;
1607 const T13 v13_;
1608 const T14 v14_;
1609 const T15 v15_;
1610 const T16 v16_;
1611 const T17 v17_;
1612 const T18 v18_;
1613 const T19 v19_;
1614 const T20 v20_;
1615 const T21 v21_;
1616 const T22 v22_;
1617 const T23 v23_;
1618 const T24 v24_;
1619 const T25 v25_;
1620 const T26 v26_;
1621 const T27 v27_;
1622 const T28 v28_;
1623 const T29 v29_;
1624 const T30 v30_;
1625 const T31 v31_;
1626};
1627
1628template <typename T1, typename T2, typename T3, typename T4, typename T5,
1629 typename T6, typename T7, typename T8, typename T9, typename T10,
1630 typename T11, typename T12, typename T13, typename T14, typename T15,
1631 typename T16, typename T17, typename T18, typename T19, typename T20,
1632 typename T21, typename T22, typename T23, typename T24, typename T25,
1633 typename T26, typename T27, typename T28, typename T29, typename T30,
1634 typename T31, typename T32>
1635class ValueArray32 {
1636 public:
1637 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1638 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1639 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1640 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1641 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1642 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1643 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1644 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1645 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1646
1647 template <typename T>
1648 operator ParamGenerator<T>() const {
1649 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1650 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1651 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1652 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1653 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1654 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1655 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1656 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1657 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1658 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1659 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
1660 return ValuesIn(array);
1661 }
1662
Austin Schuh889ac432018-10-29 22:57:02 -07001663 ValueArray32(const ValueArray32& other) : v1_(other.v1_), v2_(other.v2_),
1664 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1665 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1666 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1667 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1668 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1669 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1670 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
1671 v31_(other.v31_), v32_(other.v32_) {}
1672
Austin Schuh0cbef622015-09-06 17:34:52 -07001673 private:
1674 // No implementation - assignment is unsupported.
1675 void operator=(const ValueArray32& other);
1676
1677 const T1 v1_;
1678 const T2 v2_;
1679 const T3 v3_;
1680 const T4 v4_;
1681 const T5 v5_;
1682 const T6 v6_;
1683 const T7 v7_;
1684 const T8 v8_;
1685 const T9 v9_;
1686 const T10 v10_;
1687 const T11 v11_;
1688 const T12 v12_;
1689 const T13 v13_;
1690 const T14 v14_;
1691 const T15 v15_;
1692 const T16 v16_;
1693 const T17 v17_;
1694 const T18 v18_;
1695 const T19 v19_;
1696 const T20 v20_;
1697 const T21 v21_;
1698 const T22 v22_;
1699 const T23 v23_;
1700 const T24 v24_;
1701 const T25 v25_;
1702 const T26 v26_;
1703 const T27 v27_;
1704 const T28 v28_;
1705 const T29 v29_;
1706 const T30 v30_;
1707 const T31 v31_;
1708 const T32 v32_;
1709};
1710
1711template <typename T1, typename T2, typename T3, typename T4, typename T5,
1712 typename T6, typename T7, typename T8, typename T9, typename T10,
1713 typename T11, typename T12, typename T13, typename T14, typename T15,
1714 typename T16, typename T17, typename T18, typename T19, typename T20,
1715 typename T21, typename T22, typename T23, typename T24, typename T25,
1716 typename T26, typename T27, typename T28, typename T29, typename T30,
1717 typename T31, typename T32, typename T33>
1718class ValueArray33 {
1719 public:
1720 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1721 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1722 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1723 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1724 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1725 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1726 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1727 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1728 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1729 v33_(v33) {}
1730
1731 template <typename T>
1732 operator ParamGenerator<T>() const {
1733 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1734 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1735 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1736 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1737 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1738 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1739 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1740 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1741 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1742 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1743 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1744 static_cast<T>(v33_)};
1745 return ValuesIn(array);
1746 }
1747
Austin Schuh889ac432018-10-29 22:57:02 -07001748 ValueArray33(const ValueArray33& other) : v1_(other.v1_), v2_(other.v2_),
1749 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1750 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1751 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1752 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1753 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1754 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1755 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
1756 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_) {}
1757
Austin Schuh0cbef622015-09-06 17:34:52 -07001758 private:
1759 // No implementation - assignment is unsupported.
1760 void operator=(const ValueArray33& other);
1761
1762 const T1 v1_;
1763 const T2 v2_;
1764 const T3 v3_;
1765 const T4 v4_;
1766 const T5 v5_;
1767 const T6 v6_;
1768 const T7 v7_;
1769 const T8 v8_;
1770 const T9 v9_;
1771 const T10 v10_;
1772 const T11 v11_;
1773 const T12 v12_;
1774 const T13 v13_;
1775 const T14 v14_;
1776 const T15 v15_;
1777 const T16 v16_;
1778 const T17 v17_;
1779 const T18 v18_;
1780 const T19 v19_;
1781 const T20 v20_;
1782 const T21 v21_;
1783 const T22 v22_;
1784 const T23 v23_;
1785 const T24 v24_;
1786 const T25 v25_;
1787 const T26 v26_;
1788 const T27 v27_;
1789 const T28 v28_;
1790 const T29 v29_;
1791 const T30 v30_;
1792 const T31 v31_;
1793 const T32 v32_;
1794 const T33 v33_;
1795};
1796
1797template <typename T1, typename T2, typename T3, typename T4, typename T5,
1798 typename T6, typename T7, typename T8, typename T9, typename T10,
1799 typename T11, typename T12, typename T13, typename T14, typename T15,
1800 typename T16, typename T17, typename T18, typename T19, typename T20,
1801 typename T21, typename T22, typename T23, typename T24, typename T25,
1802 typename T26, typename T27, typename T28, typename T29, typename T30,
1803 typename T31, typename T32, typename T33, typename T34>
1804class ValueArray34 {
1805 public:
1806 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1807 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1808 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1809 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1810 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1811 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1812 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1813 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1814 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1815 v33_(v33), v34_(v34) {}
1816
1817 template <typename T>
1818 operator ParamGenerator<T>() const {
1819 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1820 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1821 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1822 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1823 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1824 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1825 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1826 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1827 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1828 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1829 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1830 static_cast<T>(v33_), static_cast<T>(v34_)};
1831 return ValuesIn(array);
1832 }
1833
Austin Schuh889ac432018-10-29 22:57:02 -07001834 ValueArray34(const ValueArray34& other) : v1_(other.v1_), v2_(other.v2_),
1835 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1836 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1837 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1838 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1839 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1840 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1841 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
1842 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_) {}
1843
Austin Schuh0cbef622015-09-06 17:34:52 -07001844 private:
1845 // No implementation - assignment is unsupported.
1846 void operator=(const ValueArray34& other);
1847
1848 const T1 v1_;
1849 const T2 v2_;
1850 const T3 v3_;
1851 const T4 v4_;
1852 const T5 v5_;
1853 const T6 v6_;
1854 const T7 v7_;
1855 const T8 v8_;
1856 const T9 v9_;
1857 const T10 v10_;
1858 const T11 v11_;
1859 const T12 v12_;
1860 const T13 v13_;
1861 const T14 v14_;
1862 const T15 v15_;
1863 const T16 v16_;
1864 const T17 v17_;
1865 const T18 v18_;
1866 const T19 v19_;
1867 const T20 v20_;
1868 const T21 v21_;
1869 const T22 v22_;
1870 const T23 v23_;
1871 const T24 v24_;
1872 const T25 v25_;
1873 const T26 v26_;
1874 const T27 v27_;
1875 const T28 v28_;
1876 const T29 v29_;
1877 const T30 v30_;
1878 const T31 v31_;
1879 const T32 v32_;
1880 const T33 v33_;
1881 const T34 v34_;
1882};
1883
1884template <typename T1, typename T2, typename T3, typename T4, typename T5,
1885 typename T6, typename T7, typename T8, typename T9, typename T10,
1886 typename T11, typename T12, typename T13, typename T14, typename T15,
1887 typename T16, typename T17, typename T18, typename T19, typename T20,
1888 typename T21, typename T22, typename T23, typename T24, typename T25,
1889 typename T26, typename T27, typename T28, typename T29, typename T30,
1890 typename T31, typename T32, typename T33, typename T34, typename T35>
1891class ValueArray35 {
1892 public:
1893 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1894 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1895 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1896 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1897 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1898 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1899 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1900 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1901 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1902 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1903
1904 template <typename T>
1905 operator ParamGenerator<T>() const {
1906 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1907 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1908 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1909 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1910 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1911 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1912 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1913 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1914 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1915 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1916 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1917 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
1918 return ValuesIn(array);
1919 }
1920
Austin Schuh889ac432018-10-29 22:57:02 -07001921 ValueArray35(const ValueArray35& other) : v1_(other.v1_), v2_(other.v2_),
1922 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
1923 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
1924 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
1925 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
1926 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
1927 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
1928 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
1929 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
1930 v35_(other.v35_) {}
1931
Austin Schuh0cbef622015-09-06 17:34:52 -07001932 private:
1933 // No implementation - assignment is unsupported.
1934 void operator=(const ValueArray35& other);
1935
1936 const T1 v1_;
1937 const T2 v2_;
1938 const T3 v3_;
1939 const T4 v4_;
1940 const T5 v5_;
1941 const T6 v6_;
1942 const T7 v7_;
1943 const T8 v8_;
1944 const T9 v9_;
1945 const T10 v10_;
1946 const T11 v11_;
1947 const T12 v12_;
1948 const T13 v13_;
1949 const T14 v14_;
1950 const T15 v15_;
1951 const T16 v16_;
1952 const T17 v17_;
1953 const T18 v18_;
1954 const T19 v19_;
1955 const T20 v20_;
1956 const T21 v21_;
1957 const T22 v22_;
1958 const T23 v23_;
1959 const T24 v24_;
1960 const T25 v25_;
1961 const T26 v26_;
1962 const T27 v27_;
1963 const T28 v28_;
1964 const T29 v29_;
1965 const T30 v30_;
1966 const T31 v31_;
1967 const T32 v32_;
1968 const T33 v33_;
1969 const T34 v34_;
1970 const T35 v35_;
1971};
1972
1973template <typename T1, typename T2, typename T3, typename T4, typename T5,
1974 typename T6, typename T7, typename T8, typename T9, typename T10,
1975 typename T11, typename T12, typename T13, typename T14, typename T15,
1976 typename T16, typename T17, typename T18, typename T19, typename T20,
1977 typename T21, typename T22, typename T23, typename T24, typename T25,
1978 typename T26, typename T27, typename T28, typename T29, typename T30,
1979 typename T31, typename T32, typename T33, typename T34, typename T35,
1980 typename T36>
1981class ValueArray36 {
1982 public:
1983 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1984 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1985 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1986 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1987 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1988 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1989 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1990 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1991 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1992 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1993
1994 template <typename T>
1995 operator ParamGenerator<T>() const {
1996 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1997 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1998 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1999 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2000 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2001 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2002 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2003 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2004 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2005 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2006 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2007 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2008 static_cast<T>(v36_)};
2009 return ValuesIn(array);
2010 }
2011
Austin Schuh889ac432018-10-29 22:57:02 -07002012 ValueArray36(const ValueArray36& other) : v1_(other.v1_), v2_(other.v2_),
2013 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2014 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2015 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2016 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2017 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2018 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2019 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2020 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2021 v35_(other.v35_), v36_(other.v36_) {}
2022
Austin Schuh0cbef622015-09-06 17:34:52 -07002023 private:
2024 // No implementation - assignment is unsupported.
2025 void operator=(const ValueArray36& other);
2026
2027 const T1 v1_;
2028 const T2 v2_;
2029 const T3 v3_;
2030 const T4 v4_;
2031 const T5 v5_;
2032 const T6 v6_;
2033 const T7 v7_;
2034 const T8 v8_;
2035 const T9 v9_;
2036 const T10 v10_;
2037 const T11 v11_;
2038 const T12 v12_;
2039 const T13 v13_;
2040 const T14 v14_;
2041 const T15 v15_;
2042 const T16 v16_;
2043 const T17 v17_;
2044 const T18 v18_;
2045 const T19 v19_;
2046 const T20 v20_;
2047 const T21 v21_;
2048 const T22 v22_;
2049 const T23 v23_;
2050 const T24 v24_;
2051 const T25 v25_;
2052 const T26 v26_;
2053 const T27 v27_;
2054 const T28 v28_;
2055 const T29 v29_;
2056 const T30 v30_;
2057 const T31 v31_;
2058 const T32 v32_;
2059 const T33 v33_;
2060 const T34 v34_;
2061 const T35 v35_;
2062 const T36 v36_;
2063};
2064
2065template <typename T1, typename T2, typename T3, typename T4, typename T5,
2066 typename T6, typename T7, typename T8, typename T9, typename T10,
2067 typename T11, typename T12, typename T13, typename T14, typename T15,
2068 typename T16, typename T17, typename T18, typename T19, typename T20,
2069 typename T21, typename T22, typename T23, typename T24, typename T25,
2070 typename T26, typename T27, typename T28, typename T29, typename T30,
2071 typename T31, typename T32, typename T33, typename T34, typename T35,
2072 typename T36, typename T37>
2073class ValueArray37 {
2074 public:
2075 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2076 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2077 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2078 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2079 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2080 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2081 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2082 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2083 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2084 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2085 v36_(v36), v37_(v37) {}
2086
2087 template <typename T>
2088 operator ParamGenerator<T>() const {
2089 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2090 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2091 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2092 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2093 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2094 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2095 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2096 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2097 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2098 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2099 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2100 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2101 static_cast<T>(v36_), static_cast<T>(v37_)};
2102 return ValuesIn(array);
2103 }
2104
Austin Schuh889ac432018-10-29 22:57:02 -07002105 ValueArray37(const ValueArray37& other) : v1_(other.v1_), v2_(other.v2_),
2106 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2107 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2108 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2109 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2110 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2111 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2112 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2113 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2114 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_) {}
2115
Austin Schuh0cbef622015-09-06 17:34:52 -07002116 private:
2117 // No implementation - assignment is unsupported.
2118 void operator=(const ValueArray37& other);
2119
2120 const T1 v1_;
2121 const T2 v2_;
2122 const T3 v3_;
2123 const T4 v4_;
2124 const T5 v5_;
2125 const T6 v6_;
2126 const T7 v7_;
2127 const T8 v8_;
2128 const T9 v9_;
2129 const T10 v10_;
2130 const T11 v11_;
2131 const T12 v12_;
2132 const T13 v13_;
2133 const T14 v14_;
2134 const T15 v15_;
2135 const T16 v16_;
2136 const T17 v17_;
2137 const T18 v18_;
2138 const T19 v19_;
2139 const T20 v20_;
2140 const T21 v21_;
2141 const T22 v22_;
2142 const T23 v23_;
2143 const T24 v24_;
2144 const T25 v25_;
2145 const T26 v26_;
2146 const T27 v27_;
2147 const T28 v28_;
2148 const T29 v29_;
2149 const T30 v30_;
2150 const T31 v31_;
2151 const T32 v32_;
2152 const T33 v33_;
2153 const T34 v34_;
2154 const T35 v35_;
2155 const T36 v36_;
2156 const T37 v37_;
2157};
2158
2159template <typename T1, typename T2, typename T3, typename T4, typename T5,
2160 typename T6, typename T7, typename T8, typename T9, typename T10,
2161 typename T11, typename T12, typename T13, typename T14, typename T15,
2162 typename T16, typename T17, typename T18, typename T19, typename T20,
2163 typename T21, typename T22, typename T23, typename T24, typename T25,
2164 typename T26, typename T27, typename T28, typename T29, typename T30,
2165 typename T31, typename T32, typename T33, typename T34, typename T35,
2166 typename T36, typename T37, typename T38>
2167class ValueArray38 {
2168 public:
2169 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2170 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2171 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2172 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2173 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
2174 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2175 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2176 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2177 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2178 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2179 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
2180
2181 template <typename T>
2182 operator ParamGenerator<T>() const {
2183 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2184 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2185 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2186 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2187 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2188 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2189 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2190 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2191 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2192 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2193 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2194 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2195 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
2196 return ValuesIn(array);
2197 }
2198
Austin Schuh889ac432018-10-29 22:57:02 -07002199 ValueArray38(const ValueArray38& other) : v1_(other.v1_), v2_(other.v2_),
2200 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2201 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2202 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2203 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2204 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2205 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2206 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2207 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2208 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_) {}
2209
Austin Schuh0cbef622015-09-06 17:34:52 -07002210 private:
2211 // No implementation - assignment is unsupported.
2212 void operator=(const ValueArray38& other);
2213
2214 const T1 v1_;
2215 const T2 v2_;
2216 const T3 v3_;
2217 const T4 v4_;
2218 const T5 v5_;
2219 const T6 v6_;
2220 const T7 v7_;
2221 const T8 v8_;
2222 const T9 v9_;
2223 const T10 v10_;
2224 const T11 v11_;
2225 const T12 v12_;
2226 const T13 v13_;
2227 const T14 v14_;
2228 const T15 v15_;
2229 const T16 v16_;
2230 const T17 v17_;
2231 const T18 v18_;
2232 const T19 v19_;
2233 const T20 v20_;
2234 const T21 v21_;
2235 const T22 v22_;
2236 const T23 v23_;
2237 const T24 v24_;
2238 const T25 v25_;
2239 const T26 v26_;
2240 const T27 v27_;
2241 const T28 v28_;
2242 const T29 v29_;
2243 const T30 v30_;
2244 const T31 v31_;
2245 const T32 v32_;
2246 const T33 v33_;
2247 const T34 v34_;
2248 const T35 v35_;
2249 const T36 v36_;
2250 const T37 v37_;
2251 const T38 v38_;
2252};
2253
2254template <typename T1, typename T2, typename T3, typename T4, typename T5,
2255 typename T6, typename T7, typename T8, typename T9, typename T10,
2256 typename T11, typename T12, typename T13, typename T14, typename T15,
2257 typename T16, typename T17, typename T18, typename T19, typename T20,
2258 typename T21, typename T22, typename T23, typename T24, typename T25,
2259 typename T26, typename T27, typename T28, typename T29, typename T30,
2260 typename T31, typename T32, typename T33, typename T34, typename T35,
2261 typename T36, typename T37, typename T38, typename T39>
2262class ValueArray39 {
2263 public:
2264 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2265 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2266 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2267 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2268 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
2269 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2270 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2271 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2272 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2273 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2274 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
2275
2276 template <typename T>
2277 operator ParamGenerator<T>() const {
2278 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2279 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2280 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2281 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2282 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2283 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2284 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2285 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2286 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2287 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2288 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2289 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2290 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2291 static_cast<T>(v39_)};
2292 return ValuesIn(array);
2293 }
2294
Austin Schuh889ac432018-10-29 22:57:02 -07002295 ValueArray39(const ValueArray39& other) : v1_(other.v1_), v2_(other.v2_),
2296 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2297 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2298 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2299 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2300 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2301 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2302 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2303 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2304 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2305 v39_(other.v39_) {}
2306
Austin Schuh0cbef622015-09-06 17:34:52 -07002307 private:
2308 // No implementation - assignment is unsupported.
2309 void operator=(const ValueArray39& other);
2310
2311 const T1 v1_;
2312 const T2 v2_;
2313 const T3 v3_;
2314 const T4 v4_;
2315 const T5 v5_;
2316 const T6 v6_;
2317 const T7 v7_;
2318 const T8 v8_;
2319 const T9 v9_;
2320 const T10 v10_;
2321 const T11 v11_;
2322 const T12 v12_;
2323 const T13 v13_;
2324 const T14 v14_;
2325 const T15 v15_;
2326 const T16 v16_;
2327 const T17 v17_;
2328 const T18 v18_;
2329 const T19 v19_;
2330 const T20 v20_;
2331 const T21 v21_;
2332 const T22 v22_;
2333 const T23 v23_;
2334 const T24 v24_;
2335 const T25 v25_;
2336 const T26 v26_;
2337 const T27 v27_;
2338 const T28 v28_;
2339 const T29 v29_;
2340 const T30 v30_;
2341 const T31 v31_;
2342 const T32 v32_;
2343 const T33 v33_;
2344 const T34 v34_;
2345 const T35 v35_;
2346 const T36 v36_;
2347 const T37 v37_;
2348 const T38 v38_;
2349 const T39 v39_;
2350};
2351
2352template <typename T1, typename T2, typename T3, typename T4, typename T5,
2353 typename T6, typename T7, typename T8, typename T9, typename T10,
2354 typename T11, typename T12, typename T13, typename T14, typename T15,
2355 typename T16, typename T17, typename T18, typename T19, typename T20,
2356 typename T21, typename T22, typename T23, typename T24, typename T25,
2357 typename T26, typename T27, typename T28, typename T29, typename T30,
2358 typename T31, typename T32, typename T33, typename T34, typename T35,
2359 typename T36, typename T37, typename T38, typename T39, typename T40>
2360class ValueArray40 {
2361 public:
2362 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2363 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2364 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2365 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2366 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
2367 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2368 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2369 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2370 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2371 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2372 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2373 v40_(v40) {}
2374
2375 template <typename T>
2376 operator ParamGenerator<T>() const {
2377 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2378 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2379 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2380 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2381 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2382 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2383 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2384 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2385 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2386 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2387 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2388 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2389 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2390 static_cast<T>(v39_), static_cast<T>(v40_)};
2391 return ValuesIn(array);
2392 }
2393
Austin Schuh889ac432018-10-29 22:57:02 -07002394 ValueArray40(const ValueArray40& other) : v1_(other.v1_), v2_(other.v2_),
2395 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2396 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2397 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2398 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2399 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2400 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2401 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2402 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2403 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2404 v39_(other.v39_), v40_(other.v40_) {}
2405
Austin Schuh0cbef622015-09-06 17:34:52 -07002406 private:
2407 // No implementation - assignment is unsupported.
2408 void operator=(const ValueArray40& other);
2409
2410 const T1 v1_;
2411 const T2 v2_;
2412 const T3 v3_;
2413 const T4 v4_;
2414 const T5 v5_;
2415 const T6 v6_;
2416 const T7 v7_;
2417 const T8 v8_;
2418 const T9 v9_;
2419 const T10 v10_;
2420 const T11 v11_;
2421 const T12 v12_;
2422 const T13 v13_;
2423 const T14 v14_;
2424 const T15 v15_;
2425 const T16 v16_;
2426 const T17 v17_;
2427 const T18 v18_;
2428 const T19 v19_;
2429 const T20 v20_;
2430 const T21 v21_;
2431 const T22 v22_;
2432 const T23 v23_;
2433 const T24 v24_;
2434 const T25 v25_;
2435 const T26 v26_;
2436 const T27 v27_;
2437 const T28 v28_;
2438 const T29 v29_;
2439 const T30 v30_;
2440 const T31 v31_;
2441 const T32 v32_;
2442 const T33 v33_;
2443 const T34 v34_;
2444 const T35 v35_;
2445 const T36 v36_;
2446 const T37 v37_;
2447 const T38 v38_;
2448 const T39 v39_;
2449 const T40 v40_;
2450};
2451
2452template <typename T1, typename T2, typename T3, typename T4, typename T5,
2453 typename T6, typename T7, typename T8, typename T9, typename T10,
2454 typename T11, typename T12, typename T13, typename T14, typename T15,
2455 typename T16, typename T17, typename T18, typename T19, typename T20,
2456 typename T21, typename T22, typename T23, typename T24, typename T25,
2457 typename T26, typename T27, typename T28, typename T29, typename T30,
2458 typename T31, typename T32, typename T33, typename T34, typename T35,
2459 typename T36, typename T37, typename T38, typename T39, typename T40,
2460 typename T41>
2461class ValueArray41 {
2462 public:
2463 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2464 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2465 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2466 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2467 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
2468 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2469 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2470 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2471 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2472 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2473 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2474 v39_(v39), v40_(v40), v41_(v41) {}
2475
2476 template <typename T>
2477 operator ParamGenerator<T>() const {
2478 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2479 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2480 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2481 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2482 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2483 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2484 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2485 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2486 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2487 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2488 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2489 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2490 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2491 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
2492 return ValuesIn(array);
2493 }
2494
Austin Schuh889ac432018-10-29 22:57:02 -07002495 ValueArray41(const ValueArray41& other) : v1_(other.v1_), v2_(other.v2_),
2496 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2497 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2498 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2499 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2500 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2501 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2502 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2503 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2504 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2505 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_) {}
2506
Austin Schuh0cbef622015-09-06 17:34:52 -07002507 private:
2508 // No implementation - assignment is unsupported.
2509 void operator=(const ValueArray41& other);
2510
2511 const T1 v1_;
2512 const T2 v2_;
2513 const T3 v3_;
2514 const T4 v4_;
2515 const T5 v5_;
2516 const T6 v6_;
2517 const T7 v7_;
2518 const T8 v8_;
2519 const T9 v9_;
2520 const T10 v10_;
2521 const T11 v11_;
2522 const T12 v12_;
2523 const T13 v13_;
2524 const T14 v14_;
2525 const T15 v15_;
2526 const T16 v16_;
2527 const T17 v17_;
2528 const T18 v18_;
2529 const T19 v19_;
2530 const T20 v20_;
2531 const T21 v21_;
2532 const T22 v22_;
2533 const T23 v23_;
2534 const T24 v24_;
2535 const T25 v25_;
2536 const T26 v26_;
2537 const T27 v27_;
2538 const T28 v28_;
2539 const T29 v29_;
2540 const T30 v30_;
2541 const T31 v31_;
2542 const T32 v32_;
2543 const T33 v33_;
2544 const T34 v34_;
2545 const T35 v35_;
2546 const T36 v36_;
2547 const T37 v37_;
2548 const T38 v38_;
2549 const T39 v39_;
2550 const T40 v40_;
2551 const T41 v41_;
2552};
2553
2554template <typename T1, typename T2, typename T3, typename T4, typename T5,
2555 typename T6, typename T7, typename T8, typename T9, typename T10,
2556 typename T11, typename T12, typename T13, typename T14, typename T15,
2557 typename T16, typename T17, typename T18, typename T19, typename T20,
2558 typename T21, typename T22, typename T23, typename T24, typename T25,
2559 typename T26, typename T27, typename T28, typename T29, typename T30,
2560 typename T31, typename T32, typename T33, typename T34, typename T35,
2561 typename T36, typename T37, typename T38, typename T39, typename T40,
2562 typename T41, typename T42>
2563class ValueArray42 {
2564 public:
2565 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2566 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2567 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2568 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2569 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2570 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2571 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2572 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2573 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2574 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2575 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2576 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2577
2578 template <typename T>
2579 operator ParamGenerator<T>() const {
2580 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2581 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2582 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2583 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2584 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2585 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2586 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2587 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2588 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2589 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2590 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2591 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2592 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2593 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2594 static_cast<T>(v42_)};
2595 return ValuesIn(array);
2596 }
2597
Austin Schuh889ac432018-10-29 22:57:02 -07002598 ValueArray42(const ValueArray42& other) : v1_(other.v1_), v2_(other.v2_),
2599 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2600 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2601 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2602 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2603 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2604 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2605 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2606 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2607 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2608 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_) {}
2609
Austin Schuh0cbef622015-09-06 17:34:52 -07002610 private:
2611 // No implementation - assignment is unsupported.
2612 void operator=(const ValueArray42& other);
2613
2614 const T1 v1_;
2615 const T2 v2_;
2616 const T3 v3_;
2617 const T4 v4_;
2618 const T5 v5_;
2619 const T6 v6_;
2620 const T7 v7_;
2621 const T8 v8_;
2622 const T9 v9_;
2623 const T10 v10_;
2624 const T11 v11_;
2625 const T12 v12_;
2626 const T13 v13_;
2627 const T14 v14_;
2628 const T15 v15_;
2629 const T16 v16_;
2630 const T17 v17_;
2631 const T18 v18_;
2632 const T19 v19_;
2633 const T20 v20_;
2634 const T21 v21_;
2635 const T22 v22_;
2636 const T23 v23_;
2637 const T24 v24_;
2638 const T25 v25_;
2639 const T26 v26_;
2640 const T27 v27_;
2641 const T28 v28_;
2642 const T29 v29_;
2643 const T30 v30_;
2644 const T31 v31_;
2645 const T32 v32_;
2646 const T33 v33_;
2647 const T34 v34_;
2648 const T35 v35_;
2649 const T36 v36_;
2650 const T37 v37_;
2651 const T38 v38_;
2652 const T39 v39_;
2653 const T40 v40_;
2654 const T41 v41_;
2655 const T42 v42_;
2656};
2657
2658template <typename T1, typename T2, typename T3, typename T4, typename T5,
2659 typename T6, typename T7, typename T8, typename T9, typename T10,
2660 typename T11, typename T12, typename T13, typename T14, typename T15,
2661 typename T16, typename T17, typename T18, typename T19, typename T20,
2662 typename T21, typename T22, typename T23, typename T24, typename T25,
2663 typename T26, typename T27, typename T28, typename T29, typename T30,
2664 typename T31, typename T32, typename T33, typename T34, typename T35,
2665 typename T36, typename T37, typename T38, typename T39, typename T40,
2666 typename T41, typename T42, typename T43>
2667class ValueArray43 {
2668 public:
2669 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2670 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2671 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2672 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2673 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2674 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2675 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2676 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2677 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2678 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2679 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2680 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2681
2682 template <typename T>
2683 operator ParamGenerator<T>() const {
2684 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2685 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2686 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2687 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2688 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2689 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2690 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2691 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2692 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2693 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2694 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2695 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2696 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2697 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2698 static_cast<T>(v42_), static_cast<T>(v43_)};
2699 return ValuesIn(array);
2700 }
2701
Austin Schuh889ac432018-10-29 22:57:02 -07002702 ValueArray43(const ValueArray43& other) : v1_(other.v1_), v2_(other.v2_),
2703 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2704 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2705 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2706 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2707 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2708 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2709 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2710 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2711 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2712 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
2713 v43_(other.v43_) {}
2714
Austin Schuh0cbef622015-09-06 17:34:52 -07002715 private:
2716 // No implementation - assignment is unsupported.
2717 void operator=(const ValueArray43& other);
2718
2719 const T1 v1_;
2720 const T2 v2_;
2721 const T3 v3_;
2722 const T4 v4_;
2723 const T5 v5_;
2724 const T6 v6_;
2725 const T7 v7_;
2726 const T8 v8_;
2727 const T9 v9_;
2728 const T10 v10_;
2729 const T11 v11_;
2730 const T12 v12_;
2731 const T13 v13_;
2732 const T14 v14_;
2733 const T15 v15_;
2734 const T16 v16_;
2735 const T17 v17_;
2736 const T18 v18_;
2737 const T19 v19_;
2738 const T20 v20_;
2739 const T21 v21_;
2740 const T22 v22_;
2741 const T23 v23_;
2742 const T24 v24_;
2743 const T25 v25_;
2744 const T26 v26_;
2745 const T27 v27_;
2746 const T28 v28_;
2747 const T29 v29_;
2748 const T30 v30_;
2749 const T31 v31_;
2750 const T32 v32_;
2751 const T33 v33_;
2752 const T34 v34_;
2753 const T35 v35_;
2754 const T36 v36_;
2755 const T37 v37_;
2756 const T38 v38_;
2757 const T39 v39_;
2758 const T40 v40_;
2759 const T41 v41_;
2760 const T42 v42_;
2761 const T43 v43_;
2762};
2763
2764template <typename T1, typename T2, typename T3, typename T4, typename T5,
2765 typename T6, typename T7, typename T8, typename T9, typename T10,
2766 typename T11, typename T12, typename T13, typename T14, typename T15,
2767 typename T16, typename T17, typename T18, typename T19, typename T20,
2768 typename T21, typename T22, typename T23, typename T24, typename T25,
2769 typename T26, typename T27, typename T28, typename T29, typename T30,
2770 typename T31, typename T32, typename T33, typename T34, typename T35,
2771 typename T36, typename T37, typename T38, typename T39, typename T40,
2772 typename T41, typename T42, typename T43, typename T44>
2773class ValueArray44 {
2774 public:
2775 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2776 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2777 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2778 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2779 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2780 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2781 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2782 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2783 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2784 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2785 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2786 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2787 v43_(v43), v44_(v44) {}
2788
2789 template <typename T>
2790 operator ParamGenerator<T>() const {
2791 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2792 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2793 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2794 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2795 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2796 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2797 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2798 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2799 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2800 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2801 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2802 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2803 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2804 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2805 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
2806 return ValuesIn(array);
2807 }
2808
Austin Schuh889ac432018-10-29 22:57:02 -07002809 ValueArray44(const ValueArray44& other) : v1_(other.v1_), v2_(other.v2_),
2810 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2811 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2812 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2813 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2814 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2815 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2816 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2817 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2818 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2819 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
2820 v43_(other.v43_), v44_(other.v44_) {}
2821
Austin Schuh0cbef622015-09-06 17:34:52 -07002822 private:
2823 // No implementation - assignment is unsupported.
2824 void operator=(const ValueArray44& other);
2825
2826 const T1 v1_;
2827 const T2 v2_;
2828 const T3 v3_;
2829 const T4 v4_;
2830 const T5 v5_;
2831 const T6 v6_;
2832 const T7 v7_;
2833 const T8 v8_;
2834 const T9 v9_;
2835 const T10 v10_;
2836 const T11 v11_;
2837 const T12 v12_;
2838 const T13 v13_;
2839 const T14 v14_;
2840 const T15 v15_;
2841 const T16 v16_;
2842 const T17 v17_;
2843 const T18 v18_;
2844 const T19 v19_;
2845 const T20 v20_;
2846 const T21 v21_;
2847 const T22 v22_;
2848 const T23 v23_;
2849 const T24 v24_;
2850 const T25 v25_;
2851 const T26 v26_;
2852 const T27 v27_;
2853 const T28 v28_;
2854 const T29 v29_;
2855 const T30 v30_;
2856 const T31 v31_;
2857 const T32 v32_;
2858 const T33 v33_;
2859 const T34 v34_;
2860 const T35 v35_;
2861 const T36 v36_;
2862 const T37 v37_;
2863 const T38 v38_;
2864 const T39 v39_;
2865 const T40 v40_;
2866 const T41 v41_;
2867 const T42 v42_;
2868 const T43 v43_;
2869 const T44 v44_;
2870};
2871
2872template <typename T1, typename T2, typename T3, typename T4, typename T5,
2873 typename T6, typename T7, typename T8, typename T9, typename T10,
2874 typename T11, typename T12, typename T13, typename T14, typename T15,
2875 typename T16, typename T17, typename T18, typename T19, typename T20,
2876 typename T21, typename T22, typename T23, typename T24, typename T25,
2877 typename T26, typename T27, typename T28, typename T29, typename T30,
2878 typename T31, typename T32, typename T33, typename T34, typename T35,
2879 typename T36, typename T37, typename T38, typename T39, typename T40,
2880 typename T41, typename T42, typename T43, typename T44, typename T45>
2881class ValueArray45 {
2882 public:
2883 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2884 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2885 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2886 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2887 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2888 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2889 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2890 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2891 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2892 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2893 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2894 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2895 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2896
2897 template <typename T>
2898 operator ParamGenerator<T>() const {
2899 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2900 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2901 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2902 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2903 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2904 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2905 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2906 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2907 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2908 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2909 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2910 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2911 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2912 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2913 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2914 static_cast<T>(v45_)};
2915 return ValuesIn(array);
2916 }
2917
Austin Schuh889ac432018-10-29 22:57:02 -07002918 ValueArray45(const ValueArray45& other) : v1_(other.v1_), v2_(other.v2_),
2919 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
2920 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
2921 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
2922 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
2923 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
2924 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
2925 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
2926 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
2927 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
2928 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
2929 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_) {}
2930
Austin Schuh0cbef622015-09-06 17:34:52 -07002931 private:
2932 // No implementation - assignment is unsupported.
2933 void operator=(const ValueArray45& other);
2934
2935 const T1 v1_;
2936 const T2 v2_;
2937 const T3 v3_;
2938 const T4 v4_;
2939 const T5 v5_;
2940 const T6 v6_;
2941 const T7 v7_;
2942 const T8 v8_;
2943 const T9 v9_;
2944 const T10 v10_;
2945 const T11 v11_;
2946 const T12 v12_;
2947 const T13 v13_;
2948 const T14 v14_;
2949 const T15 v15_;
2950 const T16 v16_;
2951 const T17 v17_;
2952 const T18 v18_;
2953 const T19 v19_;
2954 const T20 v20_;
2955 const T21 v21_;
2956 const T22 v22_;
2957 const T23 v23_;
2958 const T24 v24_;
2959 const T25 v25_;
2960 const T26 v26_;
2961 const T27 v27_;
2962 const T28 v28_;
2963 const T29 v29_;
2964 const T30 v30_;
2965 const T31 v31_;
2966 const T32 v32_;
2967 const T33 v33_;
2968 const T34 v34_;
2969 const T35 v35_;
2970 const T36 v36_;
2971 const T37 v37_;
2972 const T38 v38_;
2973 const T39 v39_;
2974 const T40 v40_;
2975 const T41 v41_;
2976 const T42 v42_;
2977 const T43 v43_;
2978 const T44 v44_;
2979 const T45 v45_;
2980};
2981
2982template <typename T1, typename T2, typename T3, typename T4, typename T5,
2983 typename T6, typename T7, typename T8, typename T9, typename T10,
2984 typename T11, typename T12, typename T13, typename T14, typename T15,
2985 typename T16, typename T17, typename T18, typename T19, typename T20,
2986 typename T21, typename T22, typename T23, typename T24, typename T25,
2987 typename T26, typename T27, typename T28, typename T29, typename T30,
2988 typename T31, typename T32, typename T33, typename T34, typename T35,
2989 typename T36, typename T37, typename T38, typename T39, typename T40,
2990 typename T41, typename T42, typename T43, typename T44, typename T45,
2991 typename T46>
2992class ValueArray46 {
2993 public:
2994 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2995 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2996 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2997 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2998 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2999 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
3000 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
3001 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
3002 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
3003 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
3004 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
3005 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
3006 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
3007
3008 template <typename T>
3009 operator ParamGenerator<T>() const {
3010 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3011 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3012 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3013 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3014 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3015 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3016 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3017 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3018 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3019 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3020 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3021 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3022 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3023 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3024 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3025 static_cast<T>(v45_), static_cast<T>(v46_)};
3026 return ValuesIn(array);
3027 }
3028
Austin Schuh889ac432018-10-29 22:57:02 -07003029 ValueArray46(const ValueArray46& other) : v1_(other.v1_), v2_(other.v2_),
3030 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3031 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3032 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3033 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3034 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3035 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3036 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3037 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3038 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3039 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3040 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_) {}
3041
Austin Schuh0cbef622015-09-06 17:34:52 -07003042 private:
3043 // No implementation - assignment is unsupported.
3044 void operator=(const ValueArray46& other);
3045
3046 const T1 v1_;
3047 const T2 v2_;
3048 const T3 v3_;
3049 const T4 v4_;
3050 const T5 v5_;
3051 const T6 v6_;
3052 const T7 v7_;
3053 const T8 v8_;
3054 const T9 v9_;
3055 const T10 v10_;
3056 const T11 v11_;
3057 const T12 v12_;
3058 const T13 v13_;
3059 const T14 v14_;
3060 const T15 v15_;
3061 const T16 v16_;
3062 const T17 v17_;
3063 const T18 v18_;
3064 const T19 v19_;
3065 const T20 v20_;
3066 const T21 v21_;
3067 const T22 v22_;
3068 const T23 v23_;
3069 const T24 v24_;
3070 const T25 v25_;
3071 const T26 v26_;
3072 const T27 v27_;
3073 const T28 v28_;
3074 const T29 v29_;
3075 const T30 v30_;
3076 const T31 v31_;
3077 const T32 v32_;
3078 const T33 v33_;
3079 const T34 v34_;
3080 const T35 v35_;
3081 const T36 v36_;
3082 const T37 v37_;
3083 const T38 v38_;
3084 const T39 v39_;
3085 const T40 v40_;
3086 const T41 v41_;
3087 const T42 v42_;
3088 const T43 v43_;
3089 const T44 v44_;
3090 const T45 v45_;
3091 const T46 v46_;
3092};
3093
3094template <typename T1, typename T2, typename T3, typename T4, typename T5,
3095 typename T6, typename T7, typename T8, typename T9, typename T10,
3096 typename T11, typename T12, typename T13, typename T14, typename T15,
3097 typename T16, typename T17, typename T18, typename T19, typename T20,
3098 typename T21, typename T22, typename T23, typename T24, typename T25,
3099 typename T26, typename T27, typename T28, typename T29, typename T30,
3100 typename T31, typename T32, typename T33, typename T34, typename T35,
3101 typename T36, typename T37, typename T38, typename T39, typename T40,
3102 typename T41, typename T42, typename T43, typename T44, typename T45,
3103 typename T46, typename T47>
3104class ValueArray47 {
3105 public:
3106 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3107 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3108 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3109 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3110 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3111 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
3112 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
3113 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
3114 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
3115 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
3116 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
3117 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
3118 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
3119 v47_(v47) {}
3120
3121 template <typename T>
3122 operator ParamGenerator<T>() const {
3123 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3124 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3125 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3126 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3127 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3128 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3129 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3130 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3131 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3132 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3133 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3134 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3135 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3136 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3137 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3138 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
3139 return ValuesIn(array);
3140 }
3141
Austin Schuh889ac432018-10-29 22:57:02 -07003142 ValueArray47(const ValueArray47& other) : v1_(other.v1_), v2_(other.v2_),
3143 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3144 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3145 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3146 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3147 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3148 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3149 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3150 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3151 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3152 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3153 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3154 v47_(other.v47_) {}
3155
Austin Schuh0cbef622015-09-06 17:34:52 -07003156 private:
3157 // No implementation - assignment is unsupported.
3158 void operator=(const ValueArray47& other);
3159
3160 const T1 v1_;
3161 const T2 v2_;
3162 const T3 v3_;
3163 const T4 v4_;
3164 const T5 v5_;
3165 const T6 v6_;
3166 const T7 v7_;
3167 const T8 v8_;
3168 const T9 v9_;
3169 const T10 v10_;
3170 const T11 v11_;
3171 const T12 v12_;
3172 const T13 v13_;
3173 const T14 v14_;
3174 const T15 v15_;
3175 const T16 v16_;
3176 const T17 v17_;
3177 const T18 v18_;
3178 const T19 v19_;
3179 const T20 v20_;
3180 const T21 v21_;
3181 const T22 v22_;
3182 const T23 v23_;
3183 const T24 v24_;
3184 const T25 v25_;
3185 const T26 v26_;
3186 const T27 v27_;
3187 const T28 v28_;
3188 const T29 v29_;
3189 const T30 v30_;
3190 const T31 v31_;
3191 const T32 v32_;
3192 const T33 v33_;
3193 const T34 v34_;
3194 const T35 v35_;
3195 const T36 v36_;
3196 const T37 v37_;
3197 const T38 v38_;
3198 const T39 v39_;
3199 const T40 v40_;
3200 const T41 v41_;
3201 const T42 v42_;
3202 const T43 v43_;
3203 const T44 v44_;
3204 const T45 v45_;
3205 const T46 v46_;
3206 const T47 v47_;
3207};
3208
3209template <typename T1, typename T2, typename T3, typename T4, typename T5,
3210 typename T6, typename T7, typename T8, typename T9, typename T10,
3211 typename T11, typename T12, typename T13, typename T14, typename T15,
3212 typename T16, typename T17, typename T18, typename T19, typename T20,
3213 typename T21, typename T22, typename T23, typename T24, typename T25,
3214 typename T26, typename T27, typename T28, typename T29, typename T30,
3215 typename T31, typename T32, typename T33, typename T34, typename T35,
3216 typename T36, typename T37, typename T38, typename T39, typename T40,
3217 typename T41, typename T42, typename T43, typename T44, typename T45,
3218 typename T46, typename T47, typename T48>
3219class ValueArray48 {
3220 public:
3221 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3222 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3223 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3224 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3225 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3226 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
3227 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
3228 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
3229 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
3230 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
3231 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
3232 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
3233 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
3234 v46_(v46), v47_(v47), v48_(v48) {}
3235
3236 template <typename T>
3237 operator ParamGenerator<T>() const {
3238 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3239 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3240 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3241 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3242 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3243 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3244 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3245 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3246 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3247 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3248 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3249 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3250 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3251 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3252 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3253 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3254 static_cast<T>(v48_)};
3255 return ValuesIn(array);
3256 }
3257
Austin Schuh889ac432018-10-29 22:57:02 -07003258 ValueArray48(const ValueArray48& other) : v1_(other.v1_), v2_(other.v2_),
3259 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3260 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3261 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3262 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3263 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3264 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3265 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3266 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3267 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3268 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3269 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3270 v47_(other.v47_), v48_(other.v48_) {}
3271
Austin Schuh0cbef622015-09-06 17:34:52 -07003272 private:
3273 // No implementation - assignment is unsupported.
3274 void operator=(const ValueArray48& other);
3275
3276 const T1 v1_;
3277 const T2 v2_;
3278 const T3 v3_;
3279 const T4 v4_;
3280 const T5 v5_;
3281 const T6 v6_;
3282 const T7 v7_;
3283 const T8 v8_;
3284 const T9 v9_;
3285 const T10 v10_;
3286 const T11 v11_;
3287 const T12 v12_;
3288 const T13 v13_;
3289 const T14 v14_;
3290 const T15 v15_;
3291 const T16 v16_;
3292 const T17 v17_;
3293 const T18 v18_;
3294 const T19 v19_;
3295 const T20 v20_;
3296 const T21 v21_;
3297 const T22 v22_;
3298 const T23 v23_;
3299 const T24 v24_;
3300 const T25 v25_;
3301 const T26 v26_;
3302 const T27 v27_;
3303 const T28 v28_;
3304 const T29 v29_;
3305 const T30 v30_;
3306 const T31 v31_;
3307 const T32 v32_;
3308 const T33 v33_;
3309 const T34 v34_;
3310 const T35 v35_;
3311 const T36 v36_;
3312 const T37 v37_;
3313 const T38 v38_;
3314 const T39 v39_;
3315 const T40 v40_;
3316 const T41 v41_;
3317 const T42 v42_;
3318 const T43 v43_;
3319 const T44 v44_;
3320 const T45 v45_;
3321 const T46 v46_;
3322 const T47 v47_;
3323 const T48 v48_;
3324};
3325
3326template <typename T1, typename T2, typename T3, typename T4, typename T5,
3327 typename T6, typename T7, typename T8, typename T9, typename T10,
3328 typename T11, typename T12, typename T13, typename T14, typename T15,
3329 typename T16, typename T17, typename T18, typename T19, typename T20,
3330 typename T21, typename T22, typename T23, typename T24, typename T25,
3331 typename T26, typename T27, typename T28, typename T29, typename T30,
3332 typename T31, typename T32, typename T33, typename T34, typename T35,
3333 typename T36, typename T37, typename T38, typename T39, typename T40,
3334 typename T41, typename T42, typename T43, typename T44, typename T45,
3335 typename T46, typename T47, typename T48, typename T49>
3336class ValueArray49 {
3337 public:
3338 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3339 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3340 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3341 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3342 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3343 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
3344 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3345 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3346 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3347 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3348 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3349 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3350 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3351 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
3352
3353 template <typename T>
3354 operator ParamGenerator<T>() const {
3355 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3356 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3357 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3358 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3359 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3360 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3361 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3362 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3363 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3364 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3365 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3366 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3367 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3368 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3369 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3370 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3371 static_cast<T>(v48_), static_cast<T>(v49_)};
3372 return ValuesIn(array);
3373 }
3374
Austin Schuh889ac432018-10-29 22:57:02 -07003375 ValueArray49(const ValueArray49& other) : v1_(other.v1_), v2_(other.v2_),
3376 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3377 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3378 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3379 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3380 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3381 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3382 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3383 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3384 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3385 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3386 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3387 v47_(other.v47_), v48_(other.v48_), v49_(other.v49_) {}
3388
Austin Schuh0cbef622015-09-06 17:34:52 -07003389 private:
3390 // No implementation - assignment is unsupported.
3391 void operator=(const ValueArray49& other);
3392
3393 const T1 v1_;
3394 const T2 v2_;
3395 const T3 v3_;
3396 const T4 v4_;
3397 const T5 v5_;
3398 const T6 v6_;
3399 const T7 v7_;
3400 const T8 v8_;
3401 const T9 v9_;
3402 const T10 v10_;
3403 const T11 v11_;
3404 const T12 v12_;
3405 const T13 v13_;
3406 const T14 v14_;
3407 const T15 v15_;
3408 const T16 v16_;
3409 const T17 v17_;
3410 const T18 v18_;
3411 const T19 v19_;
3412 const T20 v20_;
3413 const T21 v21_;
3414 const T22 v22_;
3415 const T23 v23_;
3416 const T24 v24_;
3417 const T25 v25_;
3418 const T26 v26_;
3419 const T27 v27_;
3420 const T28 v28_;
3421 const T29 v29_;
3422 const T30 v30_;
3423 const T31 v31_;
3424 const T32 v32_;
3425 const T33 v33_;
3426 const T34 v34_;
3427 const T35 v35_;
3428 const T36 v36_;
3429 const T37 v37_;
3430 const T38 v38_;
3431 const T39 v39_;
3432 const T40 v40_;
3433 const T41 v41_;
3434 const T42 v42_;
3435 const T43 v43_;
3436 const T44 v44_;
3437 const T45 v45_;
3438 const T46 v46_;
3439 const T47 v47_;
3440 const T48 v48_;
3441 const T49 v49_;
3442};
3443
3444template <typename T1, typename T2, typename T3, typename T4, typename T5,
3445 typename T6, typename T7, typename T8, typename T9, typename T10,
3446 typename T11, typename T12, typename T13, typename T14, typename T15,
3447 typename T16, typename T17, typename T18, typename T19, typename T20,
3448 typename T21, typename T22, typename T23, typename T24, typename T25,
3449 typename T26, typename T27, typename T28, typename T29, typename T30,
3450 typename T31, typename T32, typename T33, typename T34, typename T35,
3451 typename T36, typename T37, typename T38, typename T39, typename T40,
3452 typename T41, typename T42, typename T43, typename T44, typename T45,
3453 typename T46, typename T47, typename T48, typename T49, typename T50>
3454class ValueArray50 {
3455 public:
3456 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3457 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3458 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3459 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3460 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3461 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3462 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3463 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3464 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3465 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3466 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3467 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3468 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3469 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3470
3471 template <typename T>
3472 operator ParamGenerator<T>() const {
3473 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3474 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3475 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3476 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3477 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3478 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3479 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3480 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3481 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3482 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3483 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3484 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3485 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3486 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3487 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3488 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3489 static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
3490 return ValuesIn(array);
3491 }
3492
Austin Schuh889ac432018-10-29 22:57:02 -07003493 ValueArray50(const ValueArray50& other) : v1_(other.v1_), v2_(other.v2_),
3494 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3495 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3496 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3497 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3498 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3499 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3500 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3501 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3502 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3503 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3504 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3505 v47_(other.v47_), v48_(other.v48_), v49_(other.v49_), v50_(other.v50_) {}
3506
Austin Schuh0cbef622015-09-06 17:34:52 -07003507 private:
3508 // No implementation - assignment is unsupported.
3509 void operator=(const ValueArray50& other);
3510
3511 const T1 v1_;
3512 const T2 v2_;
3513 const T3 v3_;
3514 const T4 v4_;
3515 const T5 v5_;
3516 const T6 v6_;
3517 const T7 v7_;
3518 const T8 v8_;
3519 const T9 v9_;
3520 const T10 v10_;
3521 const T11 v11_;
3522 const T12 v12_;
3523 const T13 v13_;
3524 const T14 v14_;
3525 const T15 v15_;
3526 const T16 v16_;
3527 const T17 v17_;
3528 const T18 v18_;
3529 const T19 v19_;
3530 const T20 v20_;
3531 const T21 v21_;
3532 const T22 v22_;
3533 const T23 v23_;
3534 const T24 v24_;
3535 const T25 v25_;
3536 const T26 v26_;
3537 const T27 v27_;
3538 const T28 v28_;
3539 const T29 v29_;
3540 const T30 v30_;
3541 const T31 v31_;
3542 const T32 v32_;
3543 const T33 v33_;
3544 const T34 v34_;
3545 const T35 v35_;
3546 const T36 v36_;
3547 const T37 v37_;
3548 const T38 v38_;
3549 const T39 v39_;
3550 const T40 v40_;
3551 const T41 v41_;
3552 const T42 v42_;
3553 const T43 v43_;
3554 const T44 v44_;
3555 const T45 v45_;
3556 const T46 v46_;
3557 const T47 v47_;
3558 const T48 v48_;
3559 const T49 v49_;
3560 const T50 v50_;
3561};
3562
3563# if GTEST_HAS_COMBINE
3564// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
3565//
3566// Generates values from the Cartesian product of values produced
3567// by the argument generators.
3568//
3569template <typename T1, typename T2>
3570class CartesianProductGenerator2
3571 : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {
3572 public:
3573 typedef ::testing::tuple<T1, T2> ParamType;
3574
3575 CartesianProductGenerator2(const ParamGenerator<T1>& g1,
3576 const ParamGenerator<T2>& g2)
3577 : g1_(g1), g2_(g2) {}
3578 virtual ~CartesianProductGenerator2() {}
3579
3580 virtual ParamIteratorInterface<ParamType>* Begin() const {
3581 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
3582 }
3583 virtual ParamIteratorInterface<ParamType>* End() const {
3584 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
3585 }
3586
3587 private:
3588 class Iterator : public ParamIteratorInterface<ParamType> {
3589 public:
3590 Iterator(const ParamGeneratorInterface<ParamType>* base,
3591 const ParamGenerator<T1>& g1,
3592 const typename ParamGenerator<T1>::iterator& current1,
3593 const ParamGenerator<T2>& g2,
3594 const typename ParamGenerator<T2>::iterator& current2)
3595 : base_(base),
3596 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3597 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3598 ComputeCurrentValue();
3599 }
3600 virtual ~Iterator() {}
3601
3602 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3603 return base_;
3604 }
3605 // Advance should not be called on beyond-of-range iterators
3606 // so no component iterators must be beyond end of range, either.
3607 virtual void Advance() {
3608 assert(!AtEnd());
3609 ++current2_;
3610 if (current2_ == end2_) {
3611 current2_ = begin2_;
3612 ++current1_;
3613 }
3614 ComputeCurrentValue();
3615 }
3616 virtual ParamIteratorInterface<ParamType>* Clone() const {
3617 return new Iterator(*this);
3618 }
Austin Schuh889ac432018-10-29 22:57:02 -07003619 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07003620 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3621 // Having the same base generator guarantees that the other
3622 // iterator is of the same type and we can downcast.
3623 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3624 << "The program attempted to compare iterators "
3625 << "from different generators." << std::endl;
3626 const Iterator* typed_other =
3627 CheckedDowncastToActualType<const Iterator>(&other);
3628 // We must report iterators equal if they both point beyond their
3629 // respective ranges. That can happen in a variety of fashions,
3630 // so we have to consult AtEnd().
3631 return (AtEnd() && typed_other->AtEnd()) ||
3632 (
3633 current1_ == typed_other->current1_ &&
3634 current2_ == typed_other->current2_);
3635 }
3636
3637 private:
3638 Iterator(const Iterator& other)
3639 : base_(other.base_),
3640 begin1_(other.begin1_),
3641 end1_(other.end1_),
3642 current1_(other.current1_),
3643 begin2_(other.begin2_),
3644 end2_(other.end2_),
3645 current2_(other.current2_) {
3646 ComputeCurrentValue();
3647 }
3648
3649 void ComputeCurrentValue() {
3650 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07003651 current_value_.reset(new ParamType(*current1_, *current2_));
Austin Schuh0cbef622015-09-06 17:34:52 -07003652 }
3653 bool AtEnd() const {
3654 // We must report iterator past the end of the range when either of the
3655 // component iterators has reached the end of its range.
3656 return
3657 current1_ == end1_ ||
3658 current2_ == end2_;
3659 }
3660
3661 // No implementation - assignment is unsupported.
3662 void operator=(const Iterator& other);
3663
3664 const ParamGeneratorInterface<ParamType>* const base_;
3665 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3666 // current[i]_ is the actual traversing iterator.
3667 const typename ParamGenerator<T1>::iterator begin1_;
3668 const typename ParamGenerator<T1>::iterator end1_;
3669 typename ParamGenerator<T1>::iterator current1_;
3670 const typename ParamGenerator<T2>::iterator begin2_;
3671 const typename ParamGenerator<T2>::iterator end2_;
3672 typename ParamGenerator<T2>::iterator current2_;
Austin Schuh889ac432018-10-29 22:57:02 -07003673 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07003674 }; // class CartesianProductGenerator2::Iterator
3675
3676 // No implementation - assignment is unsupported.
3677 void operator=(const CartesianProductGenerator2& other);
3678
3679 const ParamGenerator<T1> g1_;
3680 const ParamGenerator<T2> g2_;
3681}; // class CartesianProductGenerator2
3682
3683
3684template <typename T1, typename T2, typename T3>
3685class CartesianProductGenerator3
3686 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
3687 public:
3688 typedef ::testing::tuple<T1, T2, T3> ParamType;
3689
3690 CartesianProductGenerator3(const ParamGenerator<T1>& g1,
3691 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
3692 : g1_(g1), g2_(g2), g3_(g3) {}
3693 virtual ~CartesianProductGenerator3() {}
3694
3695 virtual ParamIteratorInterface<ParamType>* Begin() const {
3696 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3697 g3_.begin());
3698 }
3699 virtual ParamIteratorInterface<ParamType>* End() const {
3700 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3701 }
3702
3703 private:
3704 class Iterator : public ParamIteratorInterface<ParamType> {
3705 public:
3706 Iterator(const ParamGeneratorInterface<ParamType>* base,
3707 const ParamGenerator<T1>& g1,
3708 const typename ParamGenerator<T1>::iterator& current1,
3709 const ParamGenerator<T2>& g2,
3710 const typename ParamGenerator<T2>::iterator& current2,
3711 const ParamGenerator<T3>& g3,
3712 const typename ParamGenerator<T3>::iterator& current3)
3713 : base_(base),
3714 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3715 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3716 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
3717 ComputeCurrentValue();
3718 }
3719 virtual ~Iterator() {}
3720
3721 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3722 return base_;
3723 }
3724 // Advance should not be called on beyond-of-range iterators
3725 // so no component iterators must be beyond end of range, either.
3726 virtual void Advance() {
3727 assert(!AtEnd());
3728 ++current3_;
3729 if (current3_ == end3_) {
3730 current3_ = begin3_;
3731 ++current2_;
3732 }
3733 if (current2_ == end2_) {
3734 current2_ = begin2_;
3735 ++current1_;
3736 }
3737 ComputeCurrentValue();
3738 }
3739 virtual ParamIteratorInterface<ParamType>* Clone() const {
3740 return new Iterator(*this);
3741 }
Austin Schuh889ac432018-10-29 22:57:02 -07003742 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07003743 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3744 // Having the same base generator guarantees that the other
3745 // iterator is of the same type and we can downcast.
3746 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3747 << "The program attempted to compare iterators "
3748 << "from different generators." << std::endl;
3749 const Iterator* typed_other =
3750 CheckedDowncastToActualType<const Iterator>(&other);
3751 // We must report iterators equal if they both point beyond their
3752 // respective ranges. That can happen in a variety of fashions,
3753 // so we have to consult AtEnd().
3754 return (AtEnd() && typed_other->AtEnd()) ||
3755 (
3756 current1_ == typed_other->current1_ &&
3757 current2_ == typed_other->current2_ &&
3758 current3_ == typed_other->current3_);
3759 }
3760
3761 private:
3762 Iterator(const Iterator& other)
3763 : base_(other.base_),
3764 begin1_(other.begin1_),
3765 end1_(other.end1_),
3766 current1_(other.current1_),
3767 begin2_(other.begin2_),
3768 end2_(other.end2_),
3769 current2_(other.current2_),
3770 begin3_(other.begin3_),
3771 end3_(other.end3_),
3772 current3_(other.current3_) {
3773 ComputeCurrentValue();
3774 }
3775
3776 void ComputeCurrentValue() {
3777 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07003778 current_value_.reset(new ParamType(*current1_, *current2_, *current3_));
Austin Schuh0cbef622015-09-06 17:34:52 -07003779 }
3780 bool AtEnd() const {
3781 // We must report iterator past the end of the range when either of the
3782 // component iterators has reached the end of its range.
3783 return
3784 current1_ == end1_ ||
3785 current2_ == end2_ ||
3786 current3_ == end3_;
3787 }
3788
3789 // No implementation - assignment is unsupported.
3790 void operator=(const Iterator& other);
3791
3792 const ParamGeneratorInterface<ParamType>* const base_;
3793 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3794 // current[i]_ is the actual traversing iterator.
3795 const typename ParamGenerator<T1>::iterator begin1_;
3796 const typename ParamGenerator<T1>::iterator end1_;
3797 typename ParamGenerator<T1>::iterator current1_;
3798 const typename ParamGenerator<T2>::iterator begin2_;
3799 const typename ParamGenerator<T2>::iterator end2_;
3800 typename ParamGenerator<T2>::iterator current2_;
3801 const typename ParamGenerator<T3>::iterator begin3_;
3802 const typename ParamGenerator<T3>::iterator end3_;
3803 typename ParamGenerator<T3>::iterator current3_;
Austin Schuh889ac432018-10-29 22:57:02 -07003804 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07003805 }; // class CartesianProductGenerator3::Iterator
3806
3807 // No implementation - assignment is unsupported.
3808 void operator=(const CartesianProductGenerator3& other);
3809
3810 const ParamGenerator<T1> g1_;
3811 const ParamGenerator<T2> g2_;
3812 const ParamGenerator<T3> g3_;
3813}; // class CartesianProductGenerator3
3814
3815
3816template <typename T1, typename T2, typename T3, typename T4>
3817class CartesianProductGenerator4
3818 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
3819 public:
3820 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
3821
3822 CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3823 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3824 const ParamGenerator<T4>& g4)
3825 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3826 virtual ~CartesianProductGenerator4() {}
3827
3828 virtual ParamIteratorInterface<ParamType>* Begin() const {
3829 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3830 g3_.begin(), g4_, g4_.begin());
3831 }
3832 virtual ParamIteratorInterface<ParamType>* End() const {
3833 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3834 g4_, g4_.end());
3835 }
3836
3837 private:
3838 class Iterator : public ParamIteratorInterface<ParamType> {
3839 public:
3840 Iterator(const ParamGeneratorInterface<ParamType>* base,
3841 const ParamGenerator<T1>& g1,
3842 const typename ParamGenerator<T1>::iterator& current1,
3843 const ParamGenerator<T2>& g2,
3844 const typename ParamGenerator<T2>::iterator& current2,
3845 const ParamGenerator<T3>& g3,
3846 const typename ParamGenerator<T3>::iterator& current3,
3847 const ParamGenerator<T4>& g4,
3848 const typename ParamGenerator<T4>::iterator& current4)
3849 : base_(base),
3850 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3851 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3852 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3853 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3854 ComputeCurrentValue();
3855 }
3856 virtual ~Iterator() {}
3857
3858 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3859 return base_;
3860 }
3861 // Advance should not be called on beyond-of-range iterators
3862 // so no component iterators must be beyond end of range, either.
3863 virtual void Advance() {
3864 assert(!AtEnd());
3865 ++current4_;
3866 if (current4_ == end4_) {
3867 current4_ = begin4_;
3868 ++current3_;
3869 }
3870 if (current3_ == end3_) {
3871 current3_ = begin3_;
3872 ++current2_;
3873 }
3874 if (current2_ == end2_) {
3875 current2_ = begin2_;
3876 ++current1_;
3877 }
3878 ComputeCurrentValue();
3879 }
3880 virtual ParamIteratorInterface<ParamType>* Clone() const {
3881 return new Iterator(*this);
3882 }
Austin Schuh889ac432018-10-29 22:57:02 -07003883 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07003884 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3885 // Having the same base generator guarantees that the other
3886 // iterator is of the same type and we can downcast.
3887 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3888 << "The program attempted to compare iterators "
3889 << "from different generators." << std::endl;
3890 const Iterator* typed_other =
3891 CheckedDowncastToActualType<const Iterator>(&other);
3892 // We must report iterators equal if they both point beyond their
3893 // respective ranges. That can happen in a variety of fashions,
3894 // so we have to consult AtEnd().
3895 return (AtEnd() && typed_other->AtEnd()) ||
3896 (
3897 current1_ == typed_other->current1_ &&
3898 current2_ == typed_other->current2_ &&
3899 current3_ == typed_other->current3_ &&
3900 current4_ == typed_other->current4_);
3901 }
3902
3903 private:
3904 Iterator(const Iterator& other)
3905 : base_(other.base_),
3906 begin1_(other.begin1_),
3907 end1_(other.end1_),
3908 current1_(other.current1_),
3909 begin2_(other.begin2_),
3910 end2_(other.end2_),
3911 current2_(other.current2_),
3912 begin3_(other.begin3_),
3913 end3_(other.end3_),
3914 current3_(other.current3_),
3915 begin4_(other.begin4_),
3916 end4_(other.end4_),
3917 current4_(other.current4_) {
3918 ComputeCurrentValue();
3919 }
3920
3921 void ComputeCurrentValue() {
3922 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07003923 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
3924 *current4_));
Austin Schuh0cbef622015-09-06 17:34:52 -07003925 }
3926 bool AtEnd() const {
3927 // We must report iterator past the end of the range when either of the
3928 // component iterators has reached the end of its range.
3929 return
3930 current1_ == end1_ ||
3931 current2_ == end2_ ||
3932 current3_ == end3_ ||
3933 current4_ == end4_;
3934 }
3935
3936 // No implementation - assignment is unsupported.
3937 void operator=(const Iterator& other);
3938
3939 const ParamGeneratorInterface<ParamType>* const base_;
3940 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3941 // current[i]_ is the actual traversing iterator.
3942 const typename ParamGenerator<T1>::iterator begin1_;
3943 const typename ParamGenerator<T1>::iterator end1_;
3944 typename ParamGenerator<T1>::iterator current1_;
3945 const typename ParamGenerator<T2>::iterator begin2_;
3946 const typename ParamGenerator<T2>::iterator end2_;
3947 typename ParamGenerator<T2>::iterator current2_;
3948 const typename ParamGenerator<T3>::iterator begin3_;
3949 const typename ParamGenerator<T3>::iterator end3_;
3950 typename ParamGenerator<T3>::iterator current3_;
3951 const typename ParamGenerator<T4>::iterator begin4_;
3952 const typename ParamGenerator<T4>::iterator end4_;
3953 typename ParamGenerator<T4>::iterator current4_;
Austin Schuh889ac432018-10-29 22:57:02 -07003954 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07003955 }; // class CartesianProductGenerator4::Iterator
3956
3957 // No implementation - assignment is unsupported.
3958 void operator=(const CartesianProductGenerator4& other);
3959
3960 const ParamGenerator<T1> g1_;
3961 const ParamGenerator<T2> g2_;
3962 const ParamGenerator<T3> g3_;
3963 const ParamGenerator<T4> g4_;
3964}; // class CartesianProductGenerator4
3965
3966
3967template <typename T1, typename T2, typename T3, typename T4, typename T5>
3968class CartesianProductGenerator5
3969 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
3970 public:
3971 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
3972
3973 CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3974 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3975 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3976 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3977 virtual ~CartesianProductGenerator5() {}
3978
3979 virtual ParamIteratorInterface<ParamType>* Begin() const {
3980 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3981 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3982 }
3983 virtual ParamIteratorInterface<ParamType>* End() const {
3984 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3985 g4_, g4_.end(), g5_, g5_.end());
3986 }
3987
3988 private:
3989 class Iterator : public ParamIteratorInterface<ParamType> {
3990 public:
3991 Iterator(const ParamGeneratorInterface<ParamType>* base,
3992 const ParamGenerator<T1>& g1,
3993 const typename ParamGenerator<T1>::iterator& current1,
3994 const ParamGenerator<T2>& g2,
3995 const typename ParamGenerator<T2>::iterator& current2,
3996 const ParamGenerator<T3>& g3,
3997 const typename ParamGenerator<T3>::iterator& current3,
3998 const ParamGenerator<T4>& g4,
3999 const typename ParamGenerator<T4>::iterator& current4,
4000 const ParamGenerator<T5>& g5,
4001 const typename ParamGenerator<T5>::iterator& current5)
4002 : base_(base),
4003 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4004 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4005 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4006 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4007 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
4008 ComputeCurrentValue();
4009 }
4010 virtual ~Iterator() {}
4011
4012 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4013 return base_;
4014 }
4015 // Advance should not be called on beyond-of-range iterators
4016 // so no component iterators must be beyond end of range, either.
4017 virtual void Advance() {
4018 assert(!AtEnd());
4019 ++current5_;
4020 if (current5_ == end5_) {
4021 current5_ = begin5_;
4022 ++current4_;
4023 }
4024 if (current4_ == end4_) {
4025 current4_ = begin4_;
4026 ++current3_;
4027 }
4028 if (current3_ == end3_) {
4029 current3_ = begin3_;
4030 ++current2_;
4031 }
4032 if (current2_ == end2_) {
4033 current2_ = begin2_;
4034 ++current1_;
4035 }
4036 ComputeCurrentValue();
4037 }
4038 virtual ParamIteratorInterface<ParamType>* Clone() const {
4039 return new Iterator(*this);
4040 }
Austin Schuh889ac432018-10-29 22:57:02 -07004041 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07004042 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4043 // Having the same base generator guarantees that the other
4044 // iterator is of the same type and we can downcast.
4045 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4046 << "The program attempted to compare iterators "
4047 << "from different generators." << std::endl;
4048 const Iterator* typed_other =
4049 CheckedDowncastToActualType<const Iterator>(&other);
4050 // We must report iterators equal if they both point beyond their
4051 // respective ranges. That can happen in a variety of fashions,
4052 // so we have to consult AtEnd().
4053 return (AtEnd() && typed_other->AtEnd()) ||
4054 (
4055 current1_ == typed_other->current1_ &&
4056 current2_ == typed_other->current2_ &&
4057 current3_ == typed_other->current3_ &&
4058 current4_ == typed_other->current4_ &&
4059 current5_ == typed_other->current5_);
4060 }
4061
4062 private:
4063 Iterator(const Iterator& other)
4064 : base_(other.base_),
4065 begin1_(other.begin1_),
4066 end1_(other.end1_),
4067 current1_(other.current1_),
4068 begin2_(other.begin2_),
4069 end2_(other.end2_),
4070 current2_(other.current2_),
4071 begin3_(other.begin3_),
4072 end3_(other.end3_),
4073 current3_(other.current3_),
4074 begin4_(other.begin4_),
4075 end4_(other.end4_),
4076 current4_(other.current4_),
4077 begin5_(other.begin5_),
4078 end5_(other.end5_),
4079 current5_(other.current5_) {
4080 ComputeCurrentValue();
4081 }
4082
4083 void ComputeCurrentValue() {
4084 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07004085 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4086 *current4_, *current5_));
Austin Schuh0cbef622015-09-06 17:34:52 -07004087 }
4088 bool AtEnd() const {
4089 // We must report iterator past the end of the range when either of the
4090 // component iterators has reached the end of its range.
4091 return
4092 current1_ == end1_ ||
4093 current2_ == end2_ ||
4094 current3_ == end3_ ||
4095 current4_ == end4_ ||
4096 current5_ == end5_;
4097 }
4098
4099 // No implementation - assignment is unsupported.
4100 void operator=(const Iterator& other);
4101
4102 const ParamGeneratorInterface<ParamType>* const base_;
4103 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4104 // current[i]_ is the actual traversing iterator.
4105 const typename ParamGenerator<T1>::iterator begin1_;
4106 const typename ParamGenerator<T1>::iterator end1_;
4107 typename ParamGenerator<T1>::iterator current1_;
4108 const typename ParamGenerator<T2>::iterator begin2_;
4109 const typename ParamGenerator<T2>::iterator end2_;
4110 typename ParamGenerator<T2>::iterator current2_;
4111 const typename ParamGenerator<T3>::iterator begin3_;
4112 const typename ParamGenerator<T3>::iterator end3_;
4113 typename ParamGenerator<T3>::iterator current3_;
4114 const typename ParamGenerator<T4>::iterator begin4_;
4115 const typename ParamGenerator<T4>::iterator end4_;
4116 typename ParamGenerator<T4>::iterator current4_;
4117 const typename ParamGenerator<T5>::iterator begin5_;
4118 const typename ParamGenerator<T5>::iterator end5_;
4119 typename ParamGenerator<T5>::iterator current5_;
Austin Schuh889ac432018-10-29 22:57:02 -07004120 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07004121 }; // class CartesianProductGenerator5::Iterator
4122
4123 // No implementation - assignment is unsupported.
4124 void operator=(const CartesianProductGenerator5& other);
4125
4126 const ParamGenerator<T1> g1_;
4127 const ParamGenerator<T2> g2_;
4128 const ParamGenerator<T3> g3_;
4129 const ParamGenerator<T4> g4_;
4130 const ParamGenerator<T5> g5_;
4131}; // class CartesianProductGenerator5
4132
4133
4134template <typename T1, typename T2, typename T3, typename T4, typename T5,
4135 typename T6>
4136class CartesianProductGenerator6
4137 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
4138 T6> > {
4139 public:
4140 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
4141
4142 CartesianProductGenerator6(const ParamGenerator<T1>& g1,
4143 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4144 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4145 const ParamGenerator<T6>& g6)
4146 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4147 virtual ~CartesianProductGenerator6() {}
4148
4149 virtual ParamIteratorInterface<ParamType>* Begin() const {
4150 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4151 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
4152 }
4153 virtual ParamIteratorInterface<ParamType>* End() const {
4154 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4155 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
4156 }
4157
4158 private:
4159 class Iterator : public ParamIteratorInterface<ParamType> {
4160 public:
4161 Iterator(const ParamGeneratorInterface<ParamType>* base,
4162 const ParamGenerator<T1>& g1,
4163 const typename ParamGenerator<T1>::iterator& current1,
4164 const ParamGenerator<T2>& g2,
4165 const typename ParamGenerator<T2>::iterator& current2,
4166 const ParamGenerator<T3>& g3,
4167 const typename ParamGenerator<T3>::iterator& current3,
4168 const ParamGenerator<T4>& g4,
4169 const typename ParamGenerator<T4>::iterator& current4,
4170 const ParamGenerator<T5>& g5,
4171 const typename ParamGenerator<T5>::iterator& current5,
4172 const ParamGenerator<T6>& g6,
4173 const typename ParamGenerator<T6>::iterator& current6)
4174 : base_(base),
4175 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4176 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4177 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4178 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4179 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4180 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
4181 ComputeCurrentValue();
4182 }
4183 virtual ~Iterator() {}
4184
4185 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4186 return base_;
4187 }
4188 // Advance should not be called on beyond-of-range iterators
4189 // so no component iterators must be beyond end of range, either.
4190 virtual void Advance() {
4191 assert(!AtEnd());
4192 ++current6_;
4193 if (current6_ == end6_) {
4194 current6_ = begin6_;
4195 ++current5_;
4196 }
4197 if (current5_ == end5_) {
4198 current5_ = begin5_;
4199 ++current4_;
4200 }
4201 if (current4_ == end4_) {
4202 current4_ = begin4_;
4203 ++current3_;
4204 }
4205 if (current3_ == end3_) {
4206 current3_ = begin3_;
4207 ++current2_;
4208 }
4209 if (current2_ == end2_) {
4210 current2_ = begin2_;
4211 ++current1_;
4212 }
4213 ComputeCurrentValue();
4214 }
4215 virtual ParamIteratorInterface<ParamType>* Clone() const {
4216 return new Iterator(*this);
4217 }
Austin Schuh889ac432018-10-29 22:57:02 -07004218 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07004219 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4220 // Having the same base generator guarantees that the other
4221 // iterator is of the same type and we can downcast.
4222 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4223 << "The program attempted to compare iterators "
4224 << "from different generators." << std::endl;
4225 const Iterator* typed_other =
4226 CheckedDowncastToActualType<const Iterator>(&other);
4227 // We must report iterators equal if they both point beyond their
4228 // respective ranges. That can happen in a variety of fashions,
4229 // so we have to consult AtEnd().
4230 return (AtEnd() && typed_other->AtEnd()) ||
4231 (
4232 current1_ == typed_other->current1_ &&
4233 current2_ == typed_other->current2_ &&
4234 current3_ == typed_other->current3_ &&
4235 current4_ == typed_other->current4_ &&
4236 current5_ == typed_other->current5_ &&
4237 current6_ == typed_other->current6_);
4238 }
4239
4240 private:
4241 Iterator(const Iterator& other)
4242 : base_(other.base_),
4243 begin1_(other.begin1_),
4244 end1_(other.end1_),
4245 current1_(other.current1_),
4246 begin2_(other.begin2_),
4247 end2_(other.end2_),
4248 current2_(other.current2_),
4249 begin3_(other.begin3_),
4250 end3_(other.end3_),
4251 current3_(other.current3_),
4252 begin4_(other.begin4_),
4253 end4_(other.end4_),
4254 current4_(other.current4_),
4255 begin5_(other.begin5_),
4256 end5_(other.end5_),
4257 current5_(other.current5_),
4258 begin6_(other.begin6_),
4259 end6_(other.end6_),
4260 current6_(other.current6_) {
4261 ComputeCurrentValue();
4262 }
4263
4264 void ComputeCurrentValue() {
4265 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07004266 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4267 *current4_, *current5_, *current6_));
Austin Schuh0cbef622015-09-06 17:34:52 -07004268 }
4269 bool AtEnd() const {
4270 // We must report iterator past the end of the range when either of the
4271 // component iterators has reached the end of its range.
4272 return
4273 current1_ == end1_ ||
4274 current2_ == end2_ ||
4275 current3_ == end3_ ||
4276 current4_ == end4_ ||
4277 current5_ == end5_ ||
4278 current6_ == end6_;
4279 }
4280
4281 // No implementation - assignment is unsupported.
4282 void operator=(const Iterator& other);
4283
4284 const ParamGeneratorInterface<ParamType>* const base_;
4285 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4286 // current[i]_ is the actual traversing iterator.
4287 const typename ParamGenerator<T1>::iterator begin1_;
4288 const typename ParamGenerator<T1>::iterator end1_;
4289 typename ParamGenerator<T1>::iterator current1_;
4290 const typename ParamGenerator<T2>::iterator begin2_;
4291 const typename ParamGenerator<T2>::iterator end2_;
4292 typename ParamGenerator<T2>::iterator current2_;
4293 const typename ParamGenerator<T3>::iterator begin3_;
4294 const typename ParamGenerator<T3>::iterator end3_;
4295 typename ParamGenerator<T3>::iterator current3_;
4296 const typename ParamGenerator<T4>::iterator begin4_;
4297 const typename ParamGenerator<T4>::iterator end4_;
4298 typename ParamGenerator<T4>::iterator current4_;
4299 const typename ParamGenerator<T5>::iterator begin5_;
4300 const typename ParamGenerator<T5>::iterator end5_;
4301 typename ParamGenerator<T5>::iterator current5_;
4302 const typename ParamGenerator<T6>::iterator begin6_;
4303 const typename ParamGenerator<T6>::iterator end6_;
4304 typename ParamGenerator<T6>::iterator current6_;
Austin Schuh889ac432018-10-29 22:57:02 -07004305 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07004306 }; // class CartesianProductGenerator6::Iterator
4307
4308 // No implementation - assignment is unsupported.
4309 void operator=(const CartesianProductGenerator6& other);
4310
4311 const ParamGenerator<T1> g1_;
4312 const ParamGenerator<T2> g2_;
4313 const ParamGenerator<T3> g3_;
4314 const ParamGenerator<T4> g4_;
4315 const ParamGenerator<T5> g5_;
4316 const ParamGenerator<T6> g6_;
4317}; // class CartesianProductGenerator6
4318
4319
4320template <typename T1, typename T2, typename T3, typename T4, typename T5,
4321 typename T6, typename T7>
4322class CartesianProductGenerator7
4323 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4324 T7> > {
4325 public:
4326 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
4327
4328 CartesianProductGenerator7(const ParamGenerator<T1>& g1,
4329 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4330 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4331 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
4332 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4333 virtual ~CartesianProductGenerator7() {}
4334
4335 virtual ParamIteratorInterface<ParamType>* Begin() const {
4336 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4337 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4338 g7_.begin());
4339 }
4340 virtual ParamIteratorInterface<ParamType>* End() const {
4341 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4342 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
4343 }
4344
4345 private:
4346 class Iterator : public ParamIteratorInterface<ParamType> {
4347 public:
4348 Iterator(const ParamGeneratorInterface<ParamType>* base,
4349 const ParamGenerator<T1>& g1,
4350 const typename ParamGenerator<T1>::iterator& current1,
4351 const ParamGenerator<T2>& g2,
4352 const typename ParamGenerator<T2>::iterator& current2,
4353 const ParamGenerator<T3>& g3,
4354 const typename ParamGenerator<T3>::iterator& current3,
4355 const ParamGenerator<T4>& g4,
4356 const typename ParamGenerator<T4>::iterator& current4,
4357 const ParamGenerator<T5>& g5,
4358 const typename ParamGenerator<T5>::iterator& current5,
4359 const ParamGenerator<T6>& g6,
4360 const typename ParamGenerator<T6>::iterator& current6,
4361 const ParamGenerator<T7>& g7,
4362 const typename ParamGenerator<T7>::iterator& current7)
4363 : base_(base),
4364 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4365 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4366 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4367 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4368 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4369 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4370 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
4371 ComputeCurrentValue();
4372 }
4373 virtual ~Iterator() {}
4374
4375 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4376 return base_;
4377 }
4378 // Advance should not be called on beyond-of-range iterators
4379 // so no component iterators must be beyond end of range, either.
4380 virtual void Advance() {
4381 assert(!AtEnd());
4382 ++current7_;
4383 if (current7_ == end7_) {
4384 current7_ = begin7_;
4385 ++current6_;
4386 }
4387 if (current6_ == end6_) {
4388 current6_ = begin6_;
4389 ++current5_;
4390 }
4391 if (current5_ == end5_) {
4392 current5_ = begin5_;
4393 ++current4_;
4394 }
4395 if (current4_ == end4_) {
4396 current4_ = begin4_;
4397 ++current3_;
4398 }
4399 if (current3_ == end3_) {
4400 current3_ = begin3_;
4401 ++current2_;
4402 }
4403 if (current2_ == end2_) {
4404 current2_ = begin2_;
4405 ++current1_;
4406 }
4407 ComputeCurrentValue();
4408 }
4409 virtual ParamIteratorInterface<ParamType>* Clone() const {
4410 return new Iterator(*this);
4411 }
Austin Schuh889ac432018-10-29 22:57:02 -07004412 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07004413 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4414 // Having the same base generator guarantees that the other
4415 // iterator is of the same type and we can downcast.
4416 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4417 << "The program attempted to compare iterators "
4418 << "from different generators." << std::endl;
4419 const Iterator* typed_other =
4420 CheckedDowncastToActualType<const Iterator>(&other);
4421 // We must report iterators equal if they both point beyond their
4422 // respective ranges. That can happen in a variety of fashions,
4423 // so we have to consult AtEnd().
4424 return (AtEnd() && typed_other->AtEnd()) ||
4425 (
4426 current1_ == typed_other->current1_ &&
4427 current2_ == typed_other->current2_ &&
4428 current3_ == typed_other->current3_ &&
4429 current4_ == typed_other->current4_ &&
4430 current5_ == typed_other->current5_ &&
4431 current6_ == typed_other->current6_ &&
4432 current7_ == typed_other->current7_);
4433 }
4434
4435 private:
4436 Iterator(const Iterator& other)
4437 : base_(other.base_),
4438 begin1_(other.begin1_),
4439 end1_(other.end1_),
4440 current1_(other.current1_),
4441 begin2_(other.begin2_),
4442 end2_(other.end2_),
4443 current2_(other.current2_),
4444 begin3_(other.begin3_),
4445 end3_(other.end3_),
4446 current3_(other.current3_),
4447 begin4_(other.begin4_),
4448 end4_(other.end4_),
4449 current4_(other.current4_),
4450 begin5_(other.begin5_),
4451 end5_(other.end5_),
4452 current5_(other.current5_),
4453 begin6_(other.begin6_),
4454 end6_(other.end6_),
4455 current6_(other.current6_),
4456 begin7_(other.begin7_),
4457 end7_(other.end7_),
4458 current7_(other.current7_) {
4459 ComputeCurrentValue();
4460 }
4461
4462 void ComputeCurrentValue() {
4463 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07004464 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4465 *current4_, *current5_, *current6_, *current7_));
Austin Schuh0cbef622015-09-06 17:34:52 -07004466 }
4467 bool AtEnd() const {
4468 // We must report iterator past the end of the range when either of the
4469 // component iterators has reached the end of its range.
4470 return
4471 current1_ == end1_ ||
4472 current2_ == end2_ ||
4473 current3_ == end3_ ||
4474 current4_ == end4_ ||
4475 current5_ == end5_ ||
4476 current6_ == end6_ ||
4477 current7_ == end7_;
4478 }
4479
4480 // No implementation - assignment is unsupported.
4481 void operator=(const Iterator& other);
4482
4483 const ParamGeneratorInterface<ParamType>* const base_;
4484 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4485 // current[i]_ is the actual traversing iterator.
4486 const typename ParamGenerator<T1>::iterator begin1_;
4487 const typename ParamGenerator<T1>::iterator end1_;
4488 typename ParamGenerator<T1>::iterator current1_;
4489 const typename ParamGenerator<T2>::iterator begin2_;
4490 const typename ParamGenerator<T2>::iterator end2_;
4491 typename ParamGenerator<T2>::iterator current2_;
4492 const typename ParamGenerator<T3>::iterator begin3_;
4493 const typename ParamGenerator<T3>::iterator end3_;
4494 typename ParamGenerator<T3>::iterator current3_;
4495 const typename ParamGenerator<T4>::iterator begin4_;
4496 const typename ParamGenerator<T4>::iterator end4_;
4497 typename ParamGenerator<T4>::iterator current4_;
4498 const typename ParamGenerator<T5>::iterator begin5_;
4499 const typename ParamGenerator<T5>::iterator end5_;
4500 typename ParamGenerator<T5>::iterator current5_;
4501 const typename ParamGenerator<T6>::iterator begin6_;
4502 const typename ParamGenerator<T6>::iterator end6_;
4503 typename ParamGenerator<T6>::iterator current6_;
4504 const typename ParamGenerator<T7>::iterator begin7_;
4505 const typename ParamGenerator<T7>::iterator end7_;
4506 typename ParamGenerator<T7>::iterator current7_;
Austin Schuh889ac432018-10-29 22:57:02 -07004507 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07004508 }; // class CartesianProductGenerator7::Iterator
4509
4510 // No implementation - assignment is unsupported.
4511 void operator=(const CartesianProductGenerator7& other);
4512
4513 const ParamGenerator<T1> g1_;
4514 const ParamGenerator<T2> g2_;
4515 const ParamGenerator<T3> g3_;
4516 const ParamGenerator<T4> g4_;
4517 const ParamGenerator<T5> g5_;
4518 const ParamGenerator<T6> g6_;
4519 const ParamGenerator<T7> g7_;
4520}; // class CartesianProductGenerator7
4521
4522
4523template <typename T1, typename T2, typename T3, typename T4, typename T5,
4524 typename T6, typename T7, typename T8>
4525class CartesianProductGenerator8
4526 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4527 T7, T8> > {
4528 public:
4529 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4530
4531 CartesianProductGenerator8(const ParamGenerator<T1>& g1,
4532 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4533 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4534 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4535 const ParamGenerator<T8>& g8)
4536 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4537 g8_(g8) {}
4538 virtual ~CartesianProductGenerator8() {}
4539
4540 virtual ParamIteratorInterface<ParamType>* Begin() const {
4541 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4542 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4543 g7_.begin(), g8_, g8_.begin());
4544 }
4545 virtual ParamIteratorInterface<ParamType>* End() const {
4546 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4547 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4548 g8_.end());
4549 }
4550
4551 private:
4552 class Iterator : public ParamIteratorInterface<ParamType> {
4553 public:
4554 Iterator(const ParamGeneratorInterface<ParamType>* base,
4555 const ParamGenerator<T1>& g1,
4556 const typename ParamGenerator<T1>::iterator& current1,
4557 const ParamGenerator<T2>& g2,
4558 const typename ParamGenerator<T2>::iterator& current2,
4559 const ParamGenerator<T3>& g3,
4560 const typename ParamGenerator<T3>::iterator& current3,
4561 const ParamGenerator<T4>& g4,
4562 const typename ParamGenerator<T4>::iterator& current4,
4563 const ParamGenerator<T5>& g5,
4564 const typename ParamGenerator<T5>::iterator& current5,
4565 const ParamGenerator<T6>& g6,
4566 const typename ParamGenerator<T6>::iterator& current6,
4567 const ParamGenerator<T7>& g7,
4568 const typename ParamGenerator<T7>::iterator& current7,
4569 const ParamGenerator<T8>& g8,
4570 const typename ParamGenerator<T8>::iterator& current8)
4571 : base_(base),
4572 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4573 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4574 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4575 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4576 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4577 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4578 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4579 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
4580 ComputeCurrentValue();
4581 }
4582 virtual ~Iterator() {}
4583
4584 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4585 return base_;
4586 }
4587 // Advance should not be called on beyond-of-range iterators
4588 // so no component iterators must be beyond end of range, either.
4589 virtual void Advance() {
4590 assert(!AtEnd());
4591 ++current8_;
4592 if (current8_ == end8_) {
4593 current8_ = begin8_;
4594 ++current7_;
4595 }
4596 if (current7_ == end7_) {
4597 current7_ = begin7_;
4598 ++current6_;
4599 }
4600 if (current6_ == end6_) {
4601 current6_ = begin6_;
4602 ++current5_;
4603 }
4604 if (current5_ == end5_) {
4605 current5_ = begin5_;
4606 ++current4_;
4607 }
4608 if (current4_ == end4_) {
4609 current4_ = begin4_;
4610 ++current3_;
4611 }
4612 if (current3_ == end3_) {
4613 current3_ = begin3_;
4614 ++current2_;
4615 }
4616 if (current2_ == end2_) {
4617 current2_ = begin2_;
4618 ++current1_;
4619 }
4620 ComputeCurrentValue();
4621 }
4622 virtual ParamIteratorInterface<ParamType>* Clone() const {
4623 return new Iterator(*this);
4624 }
Austin Schuh889ac432018-10-29 22:57:02 -07004625 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07004626 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4627 // Having the same base generator guarantees that the other
4628 // iterator is of the same type and we can downcast.
4629 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4630 << "The program attempted to compare iterators "
4631 << "from different generators." << std::endl;
4632 const Iterator* typed_other =
4633 CheckedDowncastToActualType<const Iterator>(&other);
4634 // We must report iterators equal if they both point beyond their
4635 // respective ranges. That can happen in a variety of fashions,
4636 // so we have to consult AtEnd().
4637 return (AtEnd() && typed_other->AtEnd()) ||
4638 (
4639 current1_ == typed_other->current1_ &&
4640 current2_ == typed_other->current2_ &&
4641 current3_ == typed_other->current3_ &&
4642 current4_ == typed_other->current4_ &&
4643 current5_ == typed_other->current5_ &&
4644 current6_ == typed_other->current6_ &&
4645 current7_ == typed_other->current7_ &&
4646 current8_ == typed_other->current8_);
4647 }
4648
4649 private:
4650 Iterator(const Iterator& other)
4651 : base_(other.base_),
4652 begin1_(other.begin1_),
4653 end1_(other.end1_),
4654 current1_(other.current1_),
4655 begin2_(other.begin2_),
4656 end2_(other.end2_),
4657 current2_(other.current2_),
4658 begin3_(other.begin3_),
4659 end3_(other.end3_),
4660 current3_(other.current3_),
4661 begin4_(other.begin4_),
4662 end4_(other.end4_),
4663 current4_(other.current4_),
4664 begin5_(other.begin5_),
4665 end5_(other.end5_),
4666 current5_(other.current5_),
4667 begin6_(other.begin6_),
4668 end6_(other.end6_),
4669 current6_(other.current6_),
4670 begin7_(other.begin7_),
4671 end7_(other.end7_),
4672 current7_(other.current7_),
4673 begin8_(other.begin8_),
4674 end8_(other.end8_),
4675 current8_(other.current8_) {
4676 ComputeCurrentValue();
4677 }
4678
4679 void ComputeCurrentValue() {
4680 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07004681 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4682 *current4_, *current5_, *current6_, *current7_, *current8_));
Austin Schuh0cbef622015-09-06 17:34:52 -07004683 }
4684 bool AtEnd() const {
4685 // We must report iterator past the end of the range when either of the
4686 // component iterators has reached the end of its range.
4687 return
4688 current1_ == end1_ ||
4689 current2_ == end2_ ||
4690 current3_ == end3_ ||
4691 current4_ == end4_ ||
4692 current5_ == end5_ ||
4693 current6_ == end6_ ||
4694 current7_ == end7_ ||
4695 current8_ == end8_;
4696 }
4697
4698 // No implementation - assignment is unsupported.
4699 void operator=(const Iterator& other);
4700
4701 const ParamGeneratorInterface<ParamType>* const base_;
4702 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4703 // current[i]_ is the actual traversing iterator.
4704 const typename ParamGenerator<T1>::iterator begin1_;
4705 const typename ParamGenerator<T1>::iterator end1_;
4706 typename ParamGenerator<T1>::iterator current1_;
4707 const typename ParamGenerator<T2>::iterator begin2_;
4708 const typename ParamGenerator<T2>::iterator end2_;
4709 typename ParamGenerator<T2>::iterator current2_;
4710 const typename ParamGenerator<T3>::iterator begin3_;
4711 const typename ParamGenerator<T3>::iterator end3_;
4712 typename ParamGenerator<T3>::iterator current3_;
4713 const typename ParamGenerator<T4>::iterator begin4_;
4714 const typename ParamGenerator<T4>::iterator end4_;
4715 typename ParamGenerator<T4>::iterator current4_;
4716 const typename ParamGenerator<T5>::iterator begin5_;
4717 const typename ParamGenerator<T5>::iterator end5_;
4718 typename ParamGenerator<T5>::iterator current5_;
4719 const typename ParamGenerator<T6>::iterator begin6_;
4720 const typename ParamGenerator<T6>::iterator end6_;
4721 typename ParamGenerator<T6>::iterator current6_;
4722 const typename ParamGenerator<T7>::iterator begin7_;
4723 const typename ParamGenerator<T7>::iterator end7_;
4724 typename ParamGenerator<T7>::iterator current7_;
4725 const typename ParamGenerator<T8>::iterator begin8_;
4726 const typename ParamGenerator<T8>::iterator end8_;
4727 typename ParamGenerator<T8>::iterator current8_;
Austin Schuh889ac432018-10-29 22:57:02 -07004728 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07004729 }; // class CartesianProductGenerator8::Iterator
4730
4731 // No implementation - assignment is unsupported.
4732 void operator=(const CartesianProductGenerator8& other);
4733
4734 const ParamGenerator<T1> g1_;
4735 const ParamGenerator<T2> g2_;
4736 const ParamGenerator<T3> g3_;
4737 const ParamGenerator<T4> g4_;
4738 const ParamGenerator<T5> g5_;
4739 const ParamGenerator<T6> g6_;
4740 const ParamGenerator<T7> g7_;
4741 const ParamGenerator<T8> g8_;
4742}; // class CartesianProductGenerator8
4743
4744
4745template <typename T1, typename T2, typename T3, typename T4, typename T5,
4746 typename T6, typename T7, typename T8, typename T9>
4747class CartesianProductGenerator9
4748 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4749 T7, T8, T9> > {
4750 public:
4751 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4752
4753 CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4754 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4755 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4756 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4757 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4758 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4759 g9_(g9) {}
4760 virtual ~CartesianProductGenerator9() {}
4761
4762 virtual ParamIteratorInterface<ParamType>* Begin() const {
4763 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4764 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4765 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4766 }
4767 virtual ParamIteratorInterface<ParamType>* End() const {
4768 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4769 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4770 g8_.end(), g9_, g9_.end());
4771 }
4772
4773 private:
4774 class Iterator : public ParamIteratorInterface<ParamType> {
4775 public:
4776 Iterator(const ParamGeneratorInterface<ParamType>* base,
4777 const ParamGenerator<T1>& g1,
4778 const typename ParamGenerator<T1>::iterator& current1,
4779 const ParamGenerator<T2>& g2,
4780 const typename ParamGenerator<T2>::iterator& current2,
4781 const ParamGenerator<T3>& g3,
4782 const typename ParamGenerator<T3>::iterator& current3,
4783 const ParamGenerator<T4>& g4,
4784 const typename ParamGenerator<T4>::iterator& current4,
4785 const ParamGenerator<T5>& g5,
4786 const typename ParamGenerator<T5>::iterator& current5,
4787 const ParamGenerator<T6>& g6,
4788 const typename ParamGenerator<T6>::iterator& current6,
4789 const ParamGenerator<T7>& g7,
4790 const typename ParamGenerator<T7>::iterator& current7,
4791 const ParamGenerator<T8>& g8,
4792 const typename ParamGenerator<T8>::iterator& current8,
4793 const ParamGenerator<T9>& g9,
4794 const typename ParamGenerator<T9>::iterator& current9)
4795 : base_(base),
4796 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4797 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4798 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4799 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4800 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4801 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4802 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4803 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4804 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4805 ComputeCurrentValue();
4806 }
4807 virtual ~Iterator() {}
4808
4809 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4810 return base_;
4811 }
4812 // Advance should not be called on beyond-of-range iterators
4813 // so no component iterators must be beyond end of range, either.
4814 virtual void Advance() {
4815 assert(!AtEnd());
4816 ++current9_;
4817 if (current9_ == end9_) {
4818 current9_ = begin9_;
4819 ++current8_;
4820 }
4821 if (current8_ == end8_) {
4822 current8_ = begin8_;
4823 ++current7_;
4824 }
4825 if (current7_ == end7_) {
4826 current7_ = begin7_;
4827 ++current6_;
4828 }
4829 if (current6_ == end6_) {
4830 current6_ = begin6_;
4831 ++current5_;
4832 }
4833 if (current5_ == end5_) {
4834 current5_ = begin5_;
4835 ++current4_;
4836 }
4837 if (current4_ == end4_) {
4838 current4_ = begin4_;
4839 ++current3_;
4840 }
4841 if (current3_ == end3_) {
4842 current3_ = begin3_;
4843 ++current2_;
4844 }
4845 if (current2_ == end2_) {
4846 current2_ = begin2_;
4847 ++current1_;
4848 }
4849 ComputeCurrentValue();
4850 }
4851 virtual ParamIteratorInterface<ParamType>* Clone() const {
4852 return new Iterator(*this);
4853 }
Austin Schuh889ac432018-10-29 22:57:02 -07004854 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07004855 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4856 // Having the same base generator guarantees that the other
4857 // iterator is of the same type and we can downcast.
4858 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4859 << "The program attempted to compare iterators "
4860 << "from different generators." << std::endl;
4861 const Iterator* typed_other =
4862 CheckedDowncastToActualType<const Iterator>(&other);
4863 // We must report iterators equal if they both point beyond their
4864 // respective ranges. That can happen in a variety of fashions,
4865 // so we have to consult AtEnd().
4866 return (AtEnd() && typed_other->AtEnd()) ||
4867 (
4868 current1_ == typed_other->current1_ &&
4869 current2_ == typed_other->current2_ &&
4870 current3_ == typed_other->current3_ &&
4871 current4_ == typed_other->current4_ &&
4872 current5_ == typed_other->current5_ &&
4873 current6_ == typed_other->current6_ &&
4874 current7_ == typed_other->current7_ &&
4875 current8_ == typed_other->current8_ &&
4876 current9_ == typed_other->current9_);
4877 }
4878
4879 private:
4880 Iterator(const Iterator& other)
4881 : base_(other.base_),
4882 begin1_(other.begin1_),
4883 end1_(other.end1_),
4884 current1_(other.current1_),
4885 begin2_(other.begin2_),
4886 end2_(other.end2_),
4887 current2_(other.current2_),
4888 begin3_(other.begin3_),
4889 end3_(other.end3_),
4890 current3_(other.current3_),
4891 begin4_(other.begin4_),
4892 end4_(other.end4_),
4893 current4_(other.current4_),
4894 begin5_(other.begin5_),
4895 end5_(other.end5_),
4896 current5_(other.current5_),
4897 begin6_(other.begin6_),
4898 end6_(other.end6_),
4899 current6_(other.current6_),
4900 begin7_(other.begin7_),
4901 end7_(other.end7_),
4902 current7_(other.current7_),
4903 begin8_(other.begin8_),
4904 end8_(other.end8_),
4905 current8_(other.current8_),
4906 begin9_(other.begin9_),
4907 end9_(other.end9_),
4908 current9_(other.current9_) {
4909 ComputeCurrentValue();
4910 }
4911
4912 void ComputeCurrentValue() {
4913 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07004914 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
Austin Schuh0cbef622015-09-06 17:34:52 -07004915 *current4_, *current5_, *current6_, *current7_, *current8_,
Austin Schuh889ac432018-10-29 22:57:02 -07004916 *current9_));
Austin Schuh0cbef622015-09-06 17:34:52 -07004917 }
4918 bool AtEnd() const {
4919 // We must report iterator past the end of the range when either of the
4920 // component iterators has reached the end of its range.
4921 return
4922 current1_ == end1_ ||
4923 current2_ == end2_ ||
4924 current3_ == end3_ ||
4925 current4_ == end4_ ||
4926 current5_ == end5_ ||
4927 current6_ == end6_ ||
4928 current7_ == end7_ ||
4929 current8_ == end8_ ||
4930 current9_ == end9_;
4931 }
4932
4933 // No implementation - assignment is unsupported.
4934 void operator=(const Iterator& other);
4935
4936 const ParamGeneratorInterface<ParamType>* const base_;
4937 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4938 // current[i]_ is the actual traversing iterator.
4939 const typename ParamGenerator<T1>::iterator begin1_;
4940 const typename ParamGenerator<T1>::iterator end1_;
4941 typename ParamGenerator<T1>::iterator current1_;
4942 const typename ParamGenerator<T2>::iterator begin2_;
4943 const typename ParamGenerator<T2>::iterator end2_;
4944 typename ParamGenerator<T2>::iterator current2_;
4945 const typename ParamGenerator<T3>::iterator begin3_;
4946 const typename ParamGenerator<T3>::iterator end3_;
4947 typename ParamGenerator<T3>::iterator current3_;
4948 const typename ParamGenerator<T4>::iterator begin4_;
4949 const typename ParamGenerator<T4>::iterator end4_;
4950 typename ParamGenerator<T4>::iterator current4_;
4951 const typename ParamGenerator<T5>::iterator begin5_;
4952 const typename ParamGenerator<T5>::iterator end5_;
4953 typename ParamGenerator<T5>::iterator current5_;
4954 const typename ParamGenerator<T6>::iterator begin6_;
4955 const typename ParamGenerator<T6>::iterator end6_;
4956 typename ParamGenerator<T6>::iterator current6_;
4957 const typename ParamGenerator<T7>::iterator begin7_;
4958 const typename ParamGenerator<T7>::iterator end7_;
4959 typename ParamGenerator<T7>::iterator current7_;
4960 const typename ParamGenerator<T8>::iterator begin8_;
4961 const typename ParamGenerator<T8>::iterator end8_;
4962 typename ParamGenerator<T8>::iterator current8_;
4963 const typename ParamGenerator<T9>::iterator begin9_;
4964 const typename ParamGenerator<T9>::iterator end9_;
4965 typename ParamGenerator<T9>::iterator current9_;
Austin Schuh889ac432018-10-29 22:57:02 -07004966 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07004967 }; // class CartesianProductGenerator9::Iterator
4968
4969 // No implementation - assignment is unsupported.
4970 void operator=(const CartesianProductGenerator9& other);
4971
4972 const ParamGenerator<T1> g1_;
4973 const ParamGenerator<T2> g2_;
4974 const ParamGenerator<T3> g3_;
4975 const ParamGenerator<T4> g4_;
4976 const ParamGenerator<T5> g5_;
4977 const ParamGenerator<T6> g6_;
4978 const ParamGenerator<T7> g7_;
4979 const ParamGenerator<T8> g8_;
4980 const ParamGenerator<T9> g9_;
4981}; // class CartesianProductGenerator9
4982
4983
4984template <typename T1, typename T2, typename T3, typename T4, typename T5,
4985 typename T6, typename T7, typename T8, typename T9, typename T10>
4986class CartesianProductGenerator10
4987 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4988 T7, T8, T9, T10> > {
4989 public:
4990 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4991
4992 CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4993 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4994 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4995 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4996 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4997 const ParamGenerator<T10>& g10)
4998 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4999 g9_(g9), g10_(g10) {}
5000 virtual ~CartesianProductGenerator10() {}
5001
5002 virtual ParamIteratorInterface<ParamType>* Begin() const {
5003 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
5004 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
5005 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
5006 }
5007 virtual ParamIteratorInterface<ParamType>* End() const {
5008 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
5009 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
5010 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
5011 }
5012
5013 private:
5014 class Iterator : public ParamIteratorInterface<ParamType> {
5015 public:
5016 Iterator(const ParamGeneratorInterface<ParamType>* base,
5017 const ParamGenerator<T1>& g1,
5018 const typename ParamGenerator<T1>::iterator& current1,
5019 const ParamGenerator<T2>& g2,
5020 const typename ParamGenerator<T2>::iterator& current2,
5021 const ParamGenerator<T3>& g3,
5022 const typename ParamGenerator<T3>::iterator& current3,
5023 const ParamGenerator<T4>& g4,
5024 const typename ParamGenerator<T4>::iterator& current4,
5025 const ParamGenerator<T5>& g5,
5026 const typename ParamGenerator<T5>::iterator& current5,
5027 const ParamGenerator<T6>& g6,
5028 const typename ParamGenerator<T6>::iterator& current6,
5029 const ParamGenerator<T7>& g7,
5030 const typename ParamGenerator<T7>::iterator& current7,
5031 const ParamGenerator<T8>& g8,
5032 const typename ParamGenerator<T8>::iterator& current8,
5033 const ParamGenerator<T9>& g9,
5034 const typename ParamGenerator<T9>::iterator& current9,
5035 const ParamGenerator<T10>& g10,
5036 const typename ParamGenerator<T10>::iterator& current10)
5037 : base_(base),
5038 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
5039 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
5040 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
5041 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
5042 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
5043 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
5044 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
5045 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
5046 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
5047 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
5048 ComputeCurrentValue();
5049 }
5050 virtual ~Iterator() {}
5051
5052 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
5053 return base_;
5054 }
5055 // Advance should not be called on beyond-of-range iterators
5056 // so no component iterators must be beyond end of range, either.
5057 virtual void Advance() {
5058 assert(!AtEnd());
5059 ++current10_;
5060 if (current10_ == end10_) {
5061 current10_ = begin10_;
5062 ++current9_;
5063 }
5064 if (current9_ == end9_) {
5065 current9_ = begin9_;
5066 ++current8_;
5067 }
5068 if (current8_ == end8_) {
5069 current8_ = begin8_;
5070 ++current7_;
5071 }
5072 if (current7_ == end7_) {
5073 current7_ = begin7_;
5074 ++current6_;
5075 }
5076 if (current6_ == end6_) {
5077 current6_ = begin6_;
5078 ++current5_;
5079 }
5080 if (current5_ == end5_) {
5081 current5_ = begin5_;
5082 ++current4_;
5083 }
5084 if (current4_ == end4_) {
5085 current4_ = begin4_;
5086 ++current3_;
5087 }
5088 if (current3_ == end3_) {
5089 current3_ = begin3_;
5090 ++current2_;
5091 }
5092 if (current2_ == end2_) {
5093 current2_ = begin2_;
5094 ++current1_;
5095 }
5096 ComputeCurrentValue();
5097 }
5098 virtual ParamIteratorInterface<ParamType>* Clone() const {
5099 return new Iterator(*this);
5100 }
Austin Schuh889ac432018-10-29 22:57:02 -07005101 virtual const ParamType* Current() const { return current_value_.get(); }
Austin Schuh0cbef622015-09-06 17:34:52 -07005102 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
5103 // Having the same base generator guarantees that the other
5104 // iterator is of the same type and we can downcast.
5105 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
5106 << "The program attempted to compare iterators "
5107 << "from different generators." << std::endl;
5108 const Iterator* typed_other =
5109 CheckedDowncastToActualType<const Iterator>(&other);
5110 // We must report iterators equal if they both point beyond their
5111 // respective ranges. That can happen in a variety of fashions,
5112 // so we have to consult AtEnd().
5113 return (AtEnd() && typed_other->AtEnd()) ||
5114 (
5115 current1_ == typed_other->current1_ &&
5116 current2_ == typed_other->current2_ &&
5117 current3_ == typed_other->current3_ &&
5118 current4_ == typed_other->current4_ &&
5119 current5_ == typed_other->current5_ &&
5120 current6_ == typed_other->current6_ &&
5121 current7_ == typed_other->current7_ &&
5122 current8_ == typed_other->current8_ &&
5123 current9_ == typed_other->current9_ &&
5124 current10_ == typed_other->current10_);
5125 }
5126
5127 private:
5128 Iterator(const Iterator& other)
5129 : base_(other.base_),
5130 begin1_(other.begin1_),
5131 end1_(other.end1_),
5132 current1_(other.current1_),
5133 begin2_(other.begin2_),
5134 end2_(other.end2_),
5135 current2_(other.current2_),
5136 begin3_(other.begin3_),
5137 end3_(other.end3_),
5138 current3_(other.current3_),
5139 begin4_(other.begin4_),
5140 end4_(other.end4_),
5141 current4_(other.current4_),
5142 begin5_(other.begin5_),
5143 end5_(other.end5_),
5144 current5_(other.current5_),
5145 begin6_(other.begin6_),
5146 end6_(other.end6_),
5147 current6_(other.current6_),
5148 begin7_(other.begin7_),
5149 end7_(other.end7_),
5150 current7_(other.current7_),
5151 begin8_(other.begin8_),
5152 end8_(other.end8_),
5153 current8_(other.current8_),
5154 begin9_(other.begin9_),
5155 end9_(other.end9_),
5156 current9_(other.current9_),
5157 begin10_(other.begin10_),
5158 end10_(other.end10_),
5159 current10_(other.current10_) {
5160 ComputeCurrentValue();
5161 }
5162
5163 void ComputeCurrentValue() {
5164 if (!AtEnd())
Austin Schuh889ac432018-10-29 22:57:02 -07005165 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
Austin Schuh0cbef622015-09-06 17:34:52 -07005166 *current4_, *current5_, *current6_, *current7_, *current8_,
Austin Schuh889ac432018-10-29 22:57:02 -07005167 *current9_, *current10_));
Austin Schuh0cbef622015-09-06 17:34:52 -07005168 }
5169 bool AtEnd() const {
5170 // We must report iterator past the end of the range when either of the
5171 // component iterators has reached the end of its range.
5172 return
5173 current1_ == end1_ ||
5174 current2_ == end2_ ||
5175 current3_ == end3_ ||
5176 current4_ == end4_ ||
5177 current5_ == end5_ ||
5178 current6_ == end6_ ||
5179 current7_ == end7_ ||
5180 current8_ == end8_ ||
5181 current9_ == end9_ ||
5182 current10_ == end10_;
5183 }
5184
5185 // No implementation - assignment is unsupported.
5186 void operator=(const Iterator& other);
5187
5188 const ParamGeneratorInterface<ParamType>* const base_;
5189 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
5190 // current[i]_ is the actual traversing iterator.
5191 const typename ParamGenerator<T1>::iterator begin1_;
5192 const typename ParamGenerator<T1>::iterator end1_;
5193 typename ParamGenerator<T1>::iterator current1_;
5194 const typename ParamGenerator<T2>::iterator begin2_;
5195 const typename ParamGenerator<T2>::iterator end2_;
5196 typename ParamGenerator<T2>::iterator current2_;
5197 const typename ParamGenerator<T3>::iterator begin3_;
5198 const typename ParamGenerator<T3>::iterator end3_;
5199 typename ParamGenerator<T3>::iterator current3_;
5200 const typename ParamGenerator<T4>::iterator begin4_;
5201 const typename ParamGenerator<T4>::iterator end4_;
5202 typename ParamGenerator<T4>::iterator current4_;
5203 const typename ParamGenerator<T5>::iterator begin5_;
5204 const typename ParamGenerator<T5>::iterator end5_;
5205 typename ParamGenerator<T5>::iterator current5_;
5206 const typename ParamGenerator<T6>::iterator begin6_;
5207 const typename ParamGenerator<T6>::iterator end6_;
5208 typename ParamGenerator<T6>::iterator current6_;
5209 const typename ParamGenerator<T7>::iterator begin7_;
5210 const typename ParamGenerator<T7>::iterator end7_;
5211 typename ParamGenerator<T7>::iterator current7_;
5212 const typename ParamGenerator<T8>::iterator begin8_;
5213 const typename ParamGenerator<T8>::iterator end8_;
5214 typename ParamGenerator<T8>::iterator current8_;
5215 const typename ParamGenerator<T9>::iterator begin9_;
5216 const typename ParamGenerator<T9>::iterator end9_;
5217 typename ParamGenerator<T9>::iterator current9_;
5218 const typename ParamGenerator<T10>::iterator begin10_;
5219 const typename ParamGenerator<T10>::iterator end10_;
5220 typename ParamGenerator<T10>::iterator current10_;
Austin Schuh889ac432018-10-29 22:57:02 -07005221 linked_ptr<ParamType> current_value_;
Austin Schuh0cbef622015-09-06 17:34:52 -07005222 }; // class CartesianProductGenerator10::Iterator
5223
5224 // No implementation - assignment is unsupported.
5225 void operator=(const CartesianProductGenerator10& other);
5226
5227 const ParamGenerator<T1> g1_;
5228 const ParamGenerator<T2> g2_;
5229 const ParamGenerator<T3> g3_;
5230 const ParamGenerator<T4> g4_;
5231 const ParamGenerator<T5> g5_;
5232 const ParamGenerator<T6> g6_;
5233 const ParamGenerator<T7> g7_;
5234 const ParamGenerator<T8> g8_;
5235 const ParamGenerator<T9> g9_;
5236 const ParamGenerator<T10> g10_;
5237}; // class CartesianProductGenerator10
5238
5239
5240// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
5241//
5242// Helper classes providing Combine() with polymorphic features. They allow
5243// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
5244// convertible to U.
5245//
5246template <class Generator1, class Generator2>
5247class CartesianProductHolder2 {
5248 public:
5249CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
5250 : g1_(g1), g2_(g2) {}
5251 template <typename T1, typename T2>
5252 operator ParamGenerator< ::testing::tuple<T1, T2> >() const {
5253 return ParamGenerator< ::testing::tuple<T1, T2> >(
5254 new CartesianProductGenerator2<T1, T2>(
5255 static_cast<ParamGenerator<T1> >(g1_),
5256 static_cast<ParamGenerator<T2> >(g2_)));
5257 }
5258
5259 private:
5260 // No implementation - assignment is unsupported.
5261 void operator=(const CartesianProductHolder2& other);
5262
5263 const Generator1 g1_;
5264 const Generator2 g2_;
5265}; // class CartesianProductHolder2
5266
5267template <class Generator1, class Generator2, class Generator3>
5268class CartesianProductHolder3 {
5269 public:
5270CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
5271 const Generator3& g3)
5272 : g1_(g1), g2_(g2), g3_(g3) {}
5273 template <typename T1, typename T2, typename T3>
5274 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const {
5275 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
5276 new CartesianProductGenerator3<T1, T2, T3>(
5277 static_cast<ParamGenerator<T1> >(g1_),
5278 static_cast<ParamGenerator<T2> >(g2_),
5279 static_cast<ParamGenerator<T3> >(g3_)));
5280 }
5281
5282 private:
5283 // No implementation - assignment is unsupported.
5284 void operator=(const CartesianProductHolder3& other);
5285
5286 const Generator1 g1_;
5287 const Generator2 g2_;
5288 const Generator3 g3_;
5289}; // class CartesianProductHolder3
5290
5291template <class Generator1, class Generator2, class Generator3,
5292 class Generator4>
5293class CartesianProductHolder4 {
5294 public:
5295CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
5296 const Generator3& g3, const Generator4& g4)
5297 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
5298 template <typename T1, typename T2, typename T3, typename T4>
5299 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const {
5300 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
5301 new CartesianProductGenerator4<T1, T2, T3, T4>(
5302 static_cast<ParamGenerator<T1> >(g1_),
5303 static_cast<ParamGenerator<T2> >(g2_),
5304 static_cast<ParamGenerator<T3> >(g3_),
5305 static_cast<ParamGenerator<T4> >(g4_)));
5306 }
5307
5308 private:
5309 // No implementation - assignment is unsupported.
5310 void operator=(const CartesianProductHolder4& other);
5311
5312 const Generator1 g1_;
5313 const Generator2 g2_;
5314 const Generator3 g3_;
5315 const Generator4 g4_;
5316}; // class CartesianProductHolder4
5317
5318template <class Generator1, class Generator2, class Generator3,
5319 class Generator4, class Generator5>
5320class CartesianProductHolder5 {
5321 public:
5322CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
5323 const Generator3& g3, const Generator4& g4, const Generator5& g5)
5324 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
5325 template <typename T1, typename T2, typename T3, typename T4, typename T5>
5326 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const {
5327 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
5328 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
5329 static_cast<ParamGenerator<T1> >(g1_),
5330 static_cast<ParamGenerator<T2> >(g2_),
5331 static_cast<ParamGenerator<T3> >(g3_),
5332 static_cast<ParamGenerator<T4> >(g4_),
5333 static_cast<ParamGenerator<T5> >(g5_)));
5334 }
5335
5336 private:
5337 // No implementation - assignment is unsupported.
5338 void operator=(const CartesianProductHolder5& other);
5339
5340 const Generator1 g1_;
5341 const Generator2 g2_;
5342 const Generator3 g3_;
5343 const Generator4 g4_;
5344 const Generator5 g5_;
5345}; // class CartesianProductHolder5
5346
5347template <class Generator1, class Generator2, class Generator3,
5348 class Generator4, class Generator5, class Generator6>
5349class CartesianProductHolder6 {
5350 public:
5351CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
5352 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5353 const Generator6& g6)
5354 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
5355 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5356 typename T6>
5357 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const {
5358 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
5359 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
5360 static_cast<ParamGenerator<T1> >(g1_),
5361 static_cast<ParamGenerator<T2> >(g2_),
5362 static_cast<ParamGenerator<T3> >(g3_),
5363 static_cast<ParamGenerator<T4> >(g4_),
5364 static_cast<ParamGenerator<T5> >(g5_),
5365 static_cast<ParamGenerator<T6> >(g6_)));
5366 }
5367
5368 private:
5369 // No implementation - assignment is unsupported.
5370 void operator=(const CartesianProductHolder6& other);
5371
5372 const Generator1 g1_;
5373 const Generator2 g2_;
5374 const Generator3 g3_;
5375 const Generator4 g4_;
5376 const Generator5 g5_;
5377 const Generator6 g6_;
5378}; // class CartesianProductHolder6
5379
5380template <class Generator1, class Generator2, class Generator3,
5381 class Generator4, class Generator5, class Generator6, class Generator7>
5382class CartesianProductHolder7 {
5383 public:
5384CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
5385 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5386 const Generator6& g6, const Generator7& g7)
5387 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
5388 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5389 typename T6, typename T7>
5390 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,
5391 T7> >() const {
5392 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
5393 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
5394 static_cast<ParamGenerator<T1> >(g1_),
5395 static_cast<ParamGenerator<T2> >(g2_),
5396 static_cast<ParamGenerator<T3> >(g3_),
5397 static_cast<ParamGenerator<T4> >(g4_),
5398 static_cast<ParamGenerator<T5> >(g5_),
5399 static_cast<ParamGenerator<T6> >(g6_),
5400 static_cast<ParamGenerator<T7> >(g7_)));
5401 }
5402
5403 private:
5404 // No implementation - assignment is unsupported.
5405 void operator=(const CartesianProductHolder7& other);
5406
5407 const Generator1 g1_;
5408 const Generator2 g2_;
5409 const Generator3 g3_;
5410 const Generator4 g4_;
5411 const Generator5 g5_;
5412 const Generator6 g6_;
5413 const Generator7 g7_;
5414}; // class CartesianProductHolder7
5415
5416template <class Generator1, class Generator2, class Generator3,
5417 class Generator4, class Generator5, class Generator6, class Generator7,
5418 class Generator8>
5419class CartesianProductHolder8 {
5420 public:
5421CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
5422 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5423 const Generator6& g6, const Generator7& g7, const Generator8& g8)
5424 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5425 g8_(g8) {}
5426 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5427 typename T6, typename T7, typename T8>
5428 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,
5429 T8> >() const {
5430 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5431 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5432 static_cast<ParamGenerator<T1> >(g1_),
5433 static_cast<ParamGenerator<T2> >(g2_),
5434 static_cast<ParamGenerator<T3> >(g3_),
5435 static_cast<ParamGenerator<T4> >(g4_),
5436 static_cast<ParamGenerator<T5> >(g5_),
5437 static_cast<ParamGenerator<T6> >(g6_),
5438 static_cast<ParamGenerator<T7> >(g7_),
5439 static_cast<ParamGenerator<T8> >(g8_)));
5440 }
5441
5442 private:
5443 // No implementation - assignment is unsupported.
5444 void operator=(const CartesianProductHolder8& other);
5445
5446 const Generator1 g1_;
5447 const Generator2 g2_;
5448 const Generator3 g3_;
5449 const Generator4 g4_;
5450 const Generator5 g5_;
5451 const Generator6 g6_;
5452 const Generator7 g7_;
5453 const Generator8 g8_;
5454}; // class CartesianProductHolder8
5455
5456template <class Generator1, class Generator2, class Generator3,
5457 class Generator4, class Generator5, class Generator6, class Generator7,
5458 class Generator8, class Generator9>
5459class CartesianProductHolder9 {
5460 public:
5461CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
5462 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5463 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5464 const Generator9& g9)
5465 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5466 g9_(g9) {}
5467 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5468 typename T6, typename T7, typename T8, typename T9>
5469 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5470 T9> >() const {
5471 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5472 T9> >(
5473 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5474 static_cast<ParamGenerator<T1> >(g1_),
5475 static_cast<ParamGenerator<T2> >(g2_),
5476 static_cast<ParamGenerator<T3> >(g3_),
5477 static_cast<ParamGenerator<T4> >(g4_),
5478 static_cast<ParamGenerator<T5> >(g5_),
5479 static_cast<ParamGenerator<T6> >(g6_),
5480 static_cast<ParamGenerator<T7> >(g7_),
5481 static_cast<ParamGenerator<T8> >(g8_),
5482 static_cast<ParamGenerator<T9> >(g9_)));
5483 }
5484
5485 private:
5486 // No implementation - assignment is unsupported.
5487 void operator=(const CartesianProductHolder9& other);
5488
5489 const Generator1 g1_;
5490 const Generator2 g2_;
5491 const Generator3 g3_;
5492 const Generator4 g4_;
5493 const Generator5 g5_;
5494 const Generator6 g6_;
5495 const Generator7 g7_;
5496 const Generator8 g8_;
5497 const Generator9 g9_;
5498}; // class CartesianProductHolder9
5499
5500template <class Generator1, class Generator2, class Generator3,
5501 class Generator4, class Generator5, class Generator6, class Generator7,
5502 class Generator8, class Generator9, class Generator10>
5503class CartesianProductHolder10 {
5504 public:
5505CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
5506 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5507 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5508 const Generator9& g9, const Generator10& g10)
5509 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5510 g9_(g9), g10_(g10) {}
5511 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5512 typename T6, typename T7, typename T8, typename T9, typename T10>
5513 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5514 T10> >() const {
5515 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5516 T10> >(
5517 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5518 T10>(
5519 static_cast<ParamGenerator<T1> >(g1_),
5520 static_cast<ParamGenerator<T2> >(g2_),
5521 static_cast<ParamGenerator<T3> >(g3_),
5522 static_cast<ParamGenerator<T4> >(g4_),
5523 static_cast<ParamGenerator<T5> >(g5_),
5524 static_cast<ParamGenerator<T6> >(g6_),
5525 static_cast<ParamGenerator<T7> >(g7_),
5526 static_cast<ParamGenerator<T8> >(g8_),
5527 static_cast<ParamGenerator<T9> >(g9_),
5528 static_cast<ParamGenerator<T10> >(g10_)));
5529 }
5530
5531 private:
5532 // No implementation - assignment is unsupported.
5533 void operator=(const CartesianProductHolder10& other);
5534
5535 const Generator1 g1_;
5536 const Generator2 g2_;
5537 const Generator3 g3_;
5538 const Generator4 g4_;
5539 const Generator5 g5_;
5540 const Generator6 g6_;
5541 const Generator7 g7_;
5542 const Generator8 g8_;
5543 const Generator9 g9_;
5544 const Generator10 g10_;
5545}; // class CartesianProductHolder10
5546
5547# endif // GTEST_HAS_COMBINE
5548
5549} // namespace internal
5550} // namespace testing
5551
Austin Schuh0cbef622015-09-06 17:34:52 -07005552#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_