00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
00047 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
00048
00049
00050
00051
00052 #include "gtest/internal/gtest-param-util.h"
00053 #include "gtest/internal/gtest-port.h"
00054
00055 #if GTEST_HAS_PARAM_TEST
00056
00057 namespace testing {
00058
00059
00060
00061 template <typename ForwardIterator>
00062 internal::ParamGenerator<
00063 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
00064 ValuesIn(ForwardIterator begin, ForwardIterator end);
00065
00066 template <typename T, size_t N>
00067 internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
00068
00069 template <class Container>
00070 internal::ParamGenerator<typename Container::value_type> ValuesIn(
00071 const Container& container);
00072
00073 namespace internal {
00074
00075
00076 template <typename T1>
00077 class ValueArray1 {
00078 public:
00079 explicit ValueArray1(T1 v1) : v1_(v1) {}
00080
00081 template <typename T>
00082 operator ParamGenerator<T>() const {
00083 const T array[] = {static_cast<T>(v1_)};
00084 return ValuesIn(array);
00085 }
00086
00087 private:
00088
00089 void operator=(const ValueArray1& other);
00090
00091 const T1 v1_;
00092 };
00093
00094 template <typename T1, typename T2>
00095 class ValueArray2 {
00096 public:
00097 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
00098
00099 template <typename T>
00100 operator ParamGenerator<T>() const {
00101 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
00102 return ValuesIn(array);
00103 }
00104
00105 private:
00106
00107 void operator=(const ValueArray2& other);
00108
00109 const T1 v1_;
00110 const T2 v2_;
00111 };
00112
00113 template <typename T1, typename T2, typename T3>
00114 class ValueArray3 {
00115 public:
00116 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
00117
00118 template <typename T>
00119 operator ParamGenerator<T>() const {
00120 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00121 static_cast<T>(v3_)};
00122 return ValuesIn(array);
00123 }
00124
00125 private:
00126
00127 void operator=(const ValueArray3& other);
00128
00129 const T1 v1_;
00130 const T2 v2_;
00131 const T3 v3_;
00132 };
00133
00134 template <typename T1, typename T2, typename T3, typename T4>
00135 class ValueArray4 {
00136 public:
00137 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
00138 v4_(v4) {}
00139
00140 template <typename T>
00141 operator ParamGenerator<T>() const {
00142 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00143 static_cast<T>(v3_), static_cast<T>(v4_)};
00144 return ValuesIn(array);
00145 }
00146
00147 private:
00148
00149 void operator=(const ValueArray4& other);
00150
00151 const T1 v1_;
00152 const T2 v2_;
00153 const T3 v3_;
00154 const T4 v4_;
00155 };
00156
00157 template <typename T1, typename T2, typename T3, typename T4, typename T5>
00158 class ValueArray5 {
00159 public:
00160 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
00161 v4_(v4), v5_(v5) {}
00162
00163 template <typename T>
00164 operator ParamGenerator<T>() const {
00165 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00166 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
00167 return ValuesIn(array);
00168 }
00169
00170 private:
00171
00172 void operator=(const ValueArray5& other);
00173
00174 const T1 v1_;
00175 const T2 v2_;
00176 const T3 v3_;
00177 const T4 v4_;
00178 const T5 v5_;
00179 };
00180
00181 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00182 typename T6>
00183 class ValueArray6 {
00184 public:
00185 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
00186 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
00187
00188 template <typename T>
00189 operator ParamGenerator<T>() const {
00190 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00191 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00192 static_cast<T>(v6_)};
00193 return ValuesIn(array);
00194 }
00195
00196 private:
00197
00198 void operator=(const ValueArray6& other);
00199
00200 const T1 v1_;
00201 const T2 v2_;
00202 const T3 v3_;
00203 const T4 v4_;
00204 const T5 v5_;
00205 const T6 v6_;
00206 };
00207
00208 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00209 typename T6, typename T7>
00210 class ValueArray7 {
00211 public:
00212 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
00213 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
00214
00215 template <typename T>
00216 operator ParamGenerator<T>() const {
00217 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00218 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00219 static_cast<T>(v6_), static_cast<T>(v7_)};
00220 return ValuesIn(array);
00221 }
00222
00223 private:
00224
00225 void operator=(const ValueArray7& other);
00226
00227 const T1 v1_;
00228 const T2 v2_;
00229 const T3 v3_;
00230 const T4 v4_;
00231 const T5 v5_;
00232 const T6 v6_;
00233 const T7 v7_;
00234 };
00235
00236 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00237 typename T6, typename T7, typename T8>
00238 class ValueArray8 {
00239 public:
00240 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
00241 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00242 v8_(v8) {}
00243
00244 template <typename T>
00245 operator ParamGenerator<T>() const {
00246 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00247 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00248 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
00249 return ValuesIn(array);
00250 }
00251
00252 private:
00253
00254 void operator=(const ValueArray8& other);
00255
00256 const T1 v1_;
00257 const T2 v2_;
00258 const T3 v3_;
00259 const T4 v4_;
00260 const T5 v5_;
00261 const T6 v6_;
00262 const T7 v7_;
00263 const T8 v8_;
00264 };
00265
00266 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00267 typename T6, typename T7, typename T8, typename T9>
00268 class ValueArray9 {
00269 public:
00270 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
00271 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00272 v8_(v8), v9_(v9) {}
00273
00274 template <typename T>
00275 operator ParamGenerator<T>() const {
00276 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00277 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00278 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00279 static_cast<T>(v9_)};
00280 return ValuesIn(array);
00281 }
00282
00283 private:
00284
00285 void operator=(const ValueArray9& other);
00286
00287 const T1 v1_;
00288 const T2 v2_;
00289 const T3 v3_;
00290 const T4 v4_;
00291 const T5 v5_;
00292 const T6 v6_;
00293 const T7 v7_;
00294 const T8 v8_;
00295 const T9 v9_;
00296 };
00297
00298 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00299 typename T6, typename T7, typename T8, typename T9, typename T10>
00300 class ValueArray10 {
00301 public:
00302 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00303 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00304 v8_(v8), v9_(v9), v10_(v10) {}
00305
00306 template <typename T>
00307 operator ParamGenerator<T>() const {
00308 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00309 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00310 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00311 static_cast<T>(v9_), static_cast<T>(v10_)};
00312 return ValuesIn(array);
00313 }
00314
00315 private:
00316
00317 void operator=(const ValueArray10& other);
00318
00319 const T1 v1_;
00320 const T2 v2_;
00321 const T3 v3_;
00322 const T4 v4_;
00323 const T5 v5_;
00324 const T6 v6_;
00325 const T7 v7_;
00326 const T8 v8_;
00327 const T9 v9_;
00328 const T10 v10_;
00329 };
00330
00331 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00332 typename T6, typename T7, typename T8, typename T9, typename T10,
00333 typename T11>
00334 class ValueArray11 {
00335 public:
00336 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00337 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
00338 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
00339
00340 template <typename T>
00341 operator ParamGenerator<T>() const {
00342 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00343 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00344 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00345 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
00346 return ValuesIn(array);
00347 }
00348
00349 private:
00350
00351 void operator=(const ValueArray11& other);
00352
00353 const T1 v1_;
00354 const T2 v2_;
00355 const T3 v3_;
00356 const T4 v4_;
00357 const T5 v5_;
00358 const T6 v6_;
00359 const T7 v7_;
00360 const T8 v8_;
00361 const T9 v9_;
00362 const T10 v10_;
00363 const T11 v11_;
00364 };
00365
00366 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00367 typename T6, typename T7, typename T8, typename T9, typename T10,
00368 typename T11, typename T12>
00369 class ValueArray12 {
00370 public:
00371 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00372 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
00373 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
00374
00375 template <typename T>
00376 operator ParamGenerator<T>() const {
00377 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00378 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00379 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00380 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00381 static_cast<T>(v12_)};
00382 return ValuesIn(array);
00383 }
00384
00385 private:
00386
00387 void operator=(const ValueArray12& other);
00388
00389 const T1 v1_;
00390 const T2 v2_;
00391 const T3 v3_;
00392 const T4 v4_;
00393 const T5 v5_;
00394 const T6 v6_;
00395 const T7 v7_;
00396 const T8 v8_;
00397 const T9 v9_;
00398 const T10 v10_;
00399 const T11 v11_;
00400 const T12 v12_;
00401 };
00402
00403 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00404 typename T6, typename T7, typename T8, typename T9, typename T10,
00405 typename T11, typename T12, typename T13>
00406 class ValueArray13 {
00407 public:
00408 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00409 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
00410 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
00411 v12_(v12), v13_(v13) {}
00412
00413 template <typename T>
00414 operator ParamGenerator<T>() const {
00415 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00416 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00417 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00418 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00419 static_cast<T>(v12_), static_cast<T>(v13_)};
00420 return ValuesIn(array);
00421 }
00422
00423 private:
00424
00425 void operator=(const ValueArray13& other);
00426
00427 const T1 v1_;
00428 const T2 v2_;
00429 const T3 v3_;
00430 const T4 v4_;
00431 const T5 v5_;
00432 const T6 v6_;
00433 const T7 v7_;
00434 const T8 v8_;
00435 const T9 v9_;
00436 const T10 v10_;
00437 const T11 v11_;
00438 const T12 v12_;
00439 const T13 v13_;
00440 };
00441
00442 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00443 typename T6, typename T7, typename T8, typename T9, typename T10,
00444 typename T11, typename T12, typename T13, typename T14>
00445 class ValueArray14 {
00446 public:
00447 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00448 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
00449 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
00450 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
00451
00452 template <typename T>
00453 operator ParamGenerator<T>() const {
00454 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00455 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00456 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00457 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00458 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
00459 return ValuesIn(array);
00460 }
00461
00462 private:
00463
00464 void operator=(const ValueArray14& other);
00465
00466 const T1 v1_;
00467 const T2 v2_;
00468 const T3 v3_;
00469 const T4 v4_;
00470 const T5 v5_;
00471 const T6 v6_;
00472 const T7 v7_;
00473 const T8 v8_;
00474 const T9 v9_;
00475 const T10 v10_;
00476 const T11 v11_;
00477 const T12 v12_;
00478 const T13 v13_;
00479 const T14 v14_;
00480 };
00481
00482 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00483 typename T6, typename T7, typename T8, typename T9, typename T10,
00484 typename T11, typename T12, typename T13, typename T14, typename T15>
00485 class ValueArray15 {
00486 public:
00487 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00488 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
00489 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
00490 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
00491
00492 template <typename T>
00493 operator ParamGenerator<T>() const {
00494 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00495 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00496 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00497 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00498 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00499 static_cast<T>(v15_)};
00500 return ValuesIn(array);
00501 }
00502
00503 private:
00504
00505 void operator=(const ValueArray15& other);
00506
00507 const T1 v1_;
00508 const T2 v2_;
00509 const T3 v3_;
00510 const T4 v4_;
00511 const T5 v5_;
00512 const T6 v6_;
00513 const T7 v7_;
00514 const T8 v8_;
00515 const T9 v9_;
00516 const T10 v10_;
00517 const T11 v11_;
00518 const T12 v12_;
00519 const T13 v13_;
00520 const T14 v14_;
00521 const T15 v15_;
00522 };
00523
00524 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00525 typename T6, typename T7, typename T8, typename T9, typename T10,
00526 typename T11, typename T12, typename T13, typename T14, typename T15,
00527 typename T16>
00528 class ValueArray16 {
00529 public:
00530 ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00531 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
00532 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
00533 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
00534 v16_(v16) {}
00535
00536 template <typename T>
00537 operator ParamGenerator<T>() const {
00538 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00539 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00540 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00541 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00542 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00543 static_cast<T>(v15_), static_cast<T>(v16_)};
00544 return ValuesIn(array);
00545 }
00546
00547 private:
00548
00549 void operator=(const ValueArray16& other);
00550
00551 const T1 v1_;
00552 const T2 v2_;
00553 const T3 v3_;
00554 const T4 v4_;
00555 const T5 v5_;
00556 const T6 v6_;
00557 const T7 v7_;
00558 const T8 v8_;
00559 const T9 v9_;
00560 const T10 v10_;
00561 const T11 v11_;
00562 const T12 v12_;
00563 const T13 v13_;
00564 const T14 v14_;
00565 const T15 v15_;
00566 const T16 v16_;
00567 };
00568
00569 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00570 typename T6, typename T7, typename T8, typename T9, typename T10,
00571 typename T11, typename T12, typename T13, typename T14, typename T15,
00572 typename T16, typename T17>
00573 class ValueArray17 {
00574 public:
00575 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00576 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
00577 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00578 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
00579 v15_(v15), v16_(v16), v17_(v17) {}
00580
00581 template <typename T>
00582 operator ParamGenerator<T>() const {
00583 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00584 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00585 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00586 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00587 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00588 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
00589 return ValuesIn(array);
00590 }
00591
00592 private:
00593
00594 void operator=(const ValueArray17& other);
00595
00596 const T1 v1_;
00597 const T2 v2_;
00598 const T3 v3_;
00599 const T4 v4_;
00600 const T5 v5_;
00601 const T6 v6_;
00602 const T7 v7_;
00603 const T8 v8_;
00604 const T9 v9_;
00605 const T10 v10_;
00606 const T11 v11_;
00607 const T12 v12_;
00608 const T13 v13_;
00609 const T14 v14_;
00610 const T15 v15_;
00611 const T16 v16_;
00612 const T17 v17_;
00613 };
00614
00615 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00616 typename T6, typename T7, typename T8, typename T9, typename T10,
00617 typename T11, typename T12, typename T13, typename T14, typename T15,
00618 typename T16, typename T17, typename T18>
00619 class ValueArray18 {
00620 public:
00621 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00622 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00623 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00624 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
00625 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
00626
00627 template <typename T>
00628 operator ParamGenerator<T>() const {
00629 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00630 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00631 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00632 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00633 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00634 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00635 static_cast<T>(v18_)};
00636 return ValuesIn(array);
00637 }
00638
00639 private:
00640
00641 void operator=(const ValueArray18& other);
00642
00643 const T1 v1_;
00644 const T2 v2_;
00645 const T3 v3_;
00646 const T4 v4_;
00647 const T5 v5_;
00648 const T6 v6_;
00649 const T7 v7_;
00650 const T8 v8_;
00651 const T9 v9_;
00652 const T10 v10_;
00653 const T11 v11_;
00654 const T12 v12_;
00655 const T13 v13_;
00656 const T14 v14_;
00657 const T15 v15_;
00658 const T16 v16_;
00659 const T17 v17_;
00660 const T18 v18_;
00661 };
00662
00663 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00664 typename T6, typename T7, typename T8, typename T9, typename T10,
00665 typename T11, typename T12, typename T13, typename T14, typename T15,
00666 typename T16, typename T17, typename T18, typename T19>
00667 class ValueArray19 {
00668 public:
00669 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00670 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00671 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
00672 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
00673 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
00674
00675 template <typename T>
00676 operator ParamGenerator<T>() const {
00677 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00678 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00679 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00680 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00681 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00682 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00683 static_cast<T>(v18_), static_cast<T>(v19_)};
00684 return ValuesIn(array);
00685 }
00686
00687 private:
00688
00689 void operator=(const ValueArray19& other);
00690
00691 const T1 v1_;
00692 const T2 v2_;
00693 const T3 v3_;
00694 const T4 v4_;
00695 const T5 v5_;
00696 const T6 v6_;
00697 const T7 v7_;
00698 const T8 v8_;
00699 const T9 v9_;
00700 const T10 v10_;
00701 const T11 v11_;
00702 const T12 v12_;
00703 const T13 v13_;
00704 const T14 v14_;
00705 const T15 v15_;
00706 const T16 v16_;
00707 const T17 v17_;
00708 const T18 v18_;
00709 const T19 v19_;
00710 };
00711
00712 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00713 typename T6, typename T7, typename T8, typename T9, typename T10,
00714 typename T11, typename T12, typename T13, typename T14, typename T15,
00715 typename T16, typename T17, typename T18, typename T19, typename T20>
00716 class ValueArray20 {
00717 public:
00718 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00719 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00720 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
00721 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
00722 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
00723 v19_(v19), v20_(v20) {}
00724
00725 template <typename T>
00726 operator ParamGenerator<T>() const {
00727 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00728 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00729 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00730 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00731 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00732 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00733 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
00734 return ValuesIn(array);
00735 }
00736
00737 private:
00738
00739 void operator=(const ValueArray20& other);
00740
00741 const T1 v1_;
00742 const T2 v2_;
00743 const T3 v3_;
00744 const T4 v4_;
00745 const T5 v5_;
00746 const T6 v6_;
00747 const T7 v7_;
00748 const T8 v8_;
00749 const T9 v9_;
00750 const T10 v10_;
00751 const T11 v11_;
00752 const T12 v12_;
00753 const T13 v13_;
00754 const T14 v14_;
00755 const T15 v15_;
00756 const T16 v16_;
00757 const T17 v17_;
00758 const T18 v18_;
00759 const T19 v19_;
00760 const T20 v20_;
00761 };
00762
00763 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00764 typename T6, typename T7, typename T8, typename T9, typename T10,
00765 typename T11, typename T12, typename T13, typename T14, typename T15,
00766 typename T16, typename T17, typename T18, typename T19, typename T20,
00767 typename T21>
00768 class ValueArray21 {
00769 public:
00770 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00771 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00772 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
00773 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
00774 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
00775 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
00776
00777 template <typename T>
00778 operator ParamGenerator<T>() const {
00779 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00780 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00781 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00782 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00783 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00784 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00785 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
00786 static_cast<T>(v21_)};
00787 return ValuesIn(array);
00788 }
00789
00790 private:
00791
00792 void operator=(const ValueArray21& other);
00793
00794 const T1 v1_;
00795 const T2 v2_;
00796 const T3 v3_;
00797 const T4 v4_;
00798 const T5 v5_;
00799 const T6 v6_;
00800 const T7 v7_;
00801 const T8 v8_;
00802 const T9 v9_;
00803 const T10 v10_;
00804 const T11 v11_;
00805 const T12 v12_;
00806 const T13 v13_;
00807 const T14 v14_;
00808 const T15 v15_;
00809 const T16 v16_;
00810 const T17 v17_;
00811 const T18 v18_;
00812 const T19 v19_;
00813 const T20 v20_;
00814 const T21 v21_;
00815 };
00816
00817 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00818 typename T6, typename T7, typename T8, typename T9, typename T10,
00819 typename T11, typename T12, typename T13, typename T14, typename T15,
00820 typename T16, typename T17, typename T18, typename T19, typename T20,
00821 typename T21, typename T22>
00822 class ValueArray22 {
00823 public:
00824 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00825 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00826 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
00827 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
00828 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
00829 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
00830
00831 template <typename T>
00832 operator ParamGenerator<T>() const {
00833 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00834 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00835 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00836 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00837 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00838 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00839 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
00840 static_cast<T>(v21_), static_cast<T>(v22_)};
00841 return ValuesIn(array);
00842 }
00843
00844 private:
00845
00846 void operator=(const ValueArray22& other);
00847
00848 const T1 v1_;
00849 const T2 v2_;
00850 const T3 v3_;
00851 const T4 v4_;
00852 const T5 v5_;
00853 const T6 v6_;
00854 const T7 v7_;
00855 const T8 v8_;
00856 const T9 v9_;
00857 const T10 v10_;
00858 const T11 v11_;
00859 const T12 v12_;
00860 const T13 v13_;
00861 const T14 v14_;
00862 const T15 v15_;
00863 const T16 v16_;
00864 const T17 v17_;
00865 const T18 v18_;
00866 const T19 v19_;
00867 const T20 v20_;
00868 const T21 v21_;
00869 const T22 v22_;
00870 };
00871
00872 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00873 typename T6, typename T7, typename T8, typename T9, typename T10,
00874 typename T11, typename T12, typename T13, typename T14, typename T15,
00875 typename T16, typename T17, typename T18, typename T19, typename T20,
00876 typename T21, typename T22, typename T23>
00877 class ValueArray23 {
00878 public:
00879 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00880 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00881 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
00882 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
00883 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
00884 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
00885 v23_(v23) {}
00886
00887 template <typename T>
00888 operator ParamGenerator<T>() const {
00889 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00890 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00891 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00892 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00893 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00894 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00895 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
00896 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
00897 return ValuesIn(array);
00898 }
00899
00900 private:
00901
00902 void operator=(const ValueArray23& other);
00903
00904 const T1 v1_;
00905 const T2 v2_;
00906 const T3 v3_;
00907 const T4 v4_;
00908 const T5 v5_;
00909 const T6 v6_;
00910 const T7 v7_;
00911 const T8 v8_;
00912 const T9 v9_;
00913 const T10 v10_;
00914 const T11 v11_;
00915 const T12 v12_;
00916 const T13 v13_;
00917 const T14 v14_;
00918 const T15 v15_;
00919 const T16 v16_;
00920 const T17 v17_;
00921 const T18 v18_;
00922 const T19 v19_;
00923 const T20 v20_;
00924 const T21 v21_;
00925 const T22 v22_;
00926 const T23 v23_;
00927 };
00928
00929 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00930 typename T6, typename T7, typename T8, typename T9, typename T10,
00931 typename T11, typename T12, typename T13, typename T14, typename T15,
00932 typename T16, typename T17, typename T18, typename T19, typename T20,
00933 typename T21, typename T22, typename T23, typename T24>
00934 class ValueArray24 {
00935 public:
00936 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00937 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00938 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
00939 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
00940 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
00941 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
00942 v22_(v22), v23_(v23), v24_(v24) {}
00943
00944 template <typename T>
00945 operator ParamGenerator<T>() const {
00946 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
00947 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
00948 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
00949 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
00950 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
00951 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
00952 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
00953 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
00954 static_cast<T>(v24_)};
00955 return ValuesIn(array);
00956 }
00957
00958 private:
00959
00960 void operator=(const ValueArray24& other);
00961
00962 const T1 v1_;
00963 const T2 v2_;
00964 const T3 v3_;
00965 const T4 v4_;
00966 const T5 v5_;
00967 const T6 v6_;
00968 const T7 v7_;
00969 const T8 v8_;
00970 const T9 v9_;
00971 const T10 v10_;
00972 const T11 v11_;
00973 const T12 v12_;
00974 const T13 v13_;
00975 const T14 v14_;
00976 const T15 v15_;
00977 const T16 v16_;
00978 const T17 v17_;
00979 const T18 v18_;
00980 const T19 v19_;
00981 const T20 v20_;
00982 const T21 v21_;
00983 const T22 v22_;
00984 const T23 v23_;
00985 const T24 v24_;
00986 };
00987
00988 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00989 typename T6, typename T7, typename T8, typename T9, typename T10,
00990 typename T11, typename T12, typename T13, typename T14, typename T15,
00991 typename T16, typename T17, typename T18, typename T19, typename T20,
00992 typename T21, typename T22, typename T23, typename T24, typename T25>
00993 class ValueArray25 {
00994 public:
00995 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
00996 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
00997 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
00998 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
00999 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
01000 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
01001 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
01002
01003 template <typename T>
01004 operator ParamGenerator<T>() const {
01005 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01006 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01007 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01008 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01009 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01010 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01011 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01012 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01013 static_cast<T>(v24_), static_cast<T>(v25_)};
01014 return ValuesIn(array);
01015 }
01016
01017 private:
01018
01019 void operator=(const ValueArray25& other);
01020
01021 const T1 v1_;
01022 const T2 v2_;
01023 const T3 v3_;
01024 const T4 v4_;
01025 const T5 v5_;
01026 const T6 v6_;
01027 const T7 v7_;
01028 const T8 v8_;
01029 const T9 v9_;
01030 const T10 v10_;
01031 const T11 v11_;
01032 const T12 v12_;
01033 const T13 v13_;
01034 const T14 v14_;
01035 const T15 v15_;
01036 const T16 v16_;
01037 const T17 v17_;
01038 const T18 v18_;
01039 const T19 v19_;
01040 const T20 v20_;
01041 const T21 v21_;
01042 const T22 v22_;
01043 const T23 v23_;
01044 const T24 v24_;
01045 const T25 v25_;
01046 };
01047
01048 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01049 typename T6, typename T7, typename T8, typename T9, typename T10,
01050 typename T11, typename T12, typename T13, typename T14, typename T15,
01051 typename T16, typename T17, typename T18, typename T19, typename T20,
01052 typename T21, typename T22, typename T23, typename T24, typename T25,
01053 typename T26>
01054 class ValueArray26 {
01055 public:
01056 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01057 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01058 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01059 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
01060 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
01061 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
01062 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
01063
01064 template <typename T>
01065 operator ParamGenerator<T>() const {
01066 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01067 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01068 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01069 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01070 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01071 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01072 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01073 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01074 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
01075 return ValuesIn(array);
01076 }
01077
01078 private:
01079
01080 void operator=(const ValueArray26& other);
01081
01082 const T1 v1_;
01083 const T2 v2_;
01084 const T3 v3_;
01085 const T4 v4_;
01086 const T5 v5_;
01087 const T6 v6_;
01088 const T7 v7_;
01089 const T8 v8_;
01090 const T9 v9_;
01091 const T10 v10_;
01092 const T11 v11_;
01093 const T12 v12_;
01094 const T13 v13_;
01095 const T14 v14_;
01096 const T15 v15_;
01097 const T16 v16_;
01098 const T17 v17_;
01099 const T18 v18_;
01100 const T19 v19_;
01101 const T20 v20_;
01102 const T21 v21_;
01103 const T22 v22_;
01104 const T23 v23_;
01105 const T24 v24_;
01106 const T25 v25_;
01107 const T26 v26_;
01108 };
01109
01110 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01111 typename T6, typename T7, typename T8, typename T9, typename T10,
01112 typename T11, typename T12, typename T13, typename T14, typename T15,
01113 typename T16, typename T17, typename T18, typename T19, typename T20,
01114 typename T21, typename T22, typename T23, typename T24, typename T25,
01115 typename T26, typename T27>
01116 class ValueArray27 {
01117 public:
01118 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01119 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01120 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01121 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
01122 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
01123 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
01124 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
01125 v26_(v26), v27_(v27) {}
01126
01127 template <typename T>
01128 operator ParamGenerator<T>() const {
01129 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01130 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01131 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01132 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01133 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01134 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01135 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01136 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01137 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01138 static_cast<T>(v27_)};
01139 return ValuesIn(array);
01140 }
01141
01142 private:
01143
01144 void operator=(const ValueArray27& other);
01145
01146 const T1 v1_;
01147 const T2 v2_;
01148 const T3 v3_;
01149 const T4 v4_;
01150 const T5 v5_;
01151 const T6 v6_;
01152 const T7 v7_;
01153 const T8 v8_;
01154 const T9 v9_;
01155 const T10 v10_;
01156 const T11 v11_;
01157 const T12 v12_;
01158 const T13 v13_;
01159 const T14 v14_;
01160 const T15 v15_;
01161 const T16 v16_;
01162 const T17 v17_;
01163 const T18 v18_;
01164 const T19 v19_;
01165 const T20 v20_;
01166 const T21 v21_;
01167 const T22 v22_;
01168 const T23 v23_;
01169 const T24 v24_;
01170 const T25 v25_;
01171 const T26 v26_;
01172 const T27 v27_;
01173 };
01174
01175 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01176 typename T6, typename T7, typename T8, typename T9, typename T10,
01177 typename T11, typename T12, typename T13, typename T14, typename T15,
01178 typename T16, typename T17, typename T18, typename T19, typename T20,
01179 typename T21, typename T22, typename T23, typename T24, typename T25,
01180 typename T26, typename T27, typename T28>
01181 class ValueArray28 {
01182 public:
01183 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01184 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01185 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01186 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
01187 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
01188 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
01189 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
01190 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
01191
01192 template <typename T>
01193 operator ParamGenerator<T>() const {
01194 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01195 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01196 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01197 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01198 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01199 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01200 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01201 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01202 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01203 static_cast<T>(v27_), static_cast<T>(v28_)};
01204 return ValuesIn(array);
01205 }
01206
01207 private:
01208
01209 void operator=(const ValueArray28& other);
01210
01211 const T1 v1_;
01212 const T2 v2_;
01213 const T3 v3_;
01214 const T4 v4_;
01215 const T5 v5_;
01216 const T6 v6_;
01217 const T7 v7_;
01218 const T8 v8_;
01219 const T9 v9_;
01220 const T10 v10_;
01221 const T11 v11_;
01222 const T12 v12_;
01223 const T13 v13_;
01224 const T14 v14_;
01225 const T15 v15_;
01226 const T16 v16_;
01227 const T17 v17_;
01228 const T18 v18_;
01229 const T19 v19_;
01230 const T20 v20_;
01231 const T21 v21_;
01232 const T22 v22_;
01233 const T23 v23_;
01234 const T24 v24_;
01235 const T25 v25_;
01236 const T26 v26_;
01237 const T27 v27_;
01238 const T28 v28_;
01239 };
01240
01241 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01242 typename T6, typename T7, typename T8, typename T9, typename T10,
01243 typename T11, typename T12, typename T13, typename T14, typename T15,
01244 typename T16, typename T17, typename T18, typename T19, typename T20,
01245 typename T21, typename T22, typename T23, typename T24, typename T25,
01246 typename T26, typename T27, typename T28, typename T29>
01247 class ValueArray29 {
01248 public:
01249 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01250 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01251 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01252 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
01253 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
01254 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
01255 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
01256 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
01257
01258 template <typename T>
01259 operator ParamGenerator<T>() const {
01260 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01261 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01262 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01263 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01264 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01265 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01266 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01267 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01268 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01269 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
01270 return ValuesIn(array);
01271 }
01272
01273 private:
01274
01275 void operator=(const ValueArray29& other);
01276
01277 const T1 v1_;
01278 const T2 v2_;
01279 const T3 v3_;
01280 const T4 v4_;
01281 const T5 v5_;
01282 const T6 v6_;
01283 const T7 v7_;
01284 const T8 v8_;
01285 const T9 v9_;
01286 const T10 v10_;
01287 const T11 v11_;
01288 const T12 v12_;
01289 const T13 v13_;
01290 const T14 v14_;
01291 const T15 v15_;
01292 const T16 v16_;
01293 const T17 v17_;
01294 const T18 v18_;
01295 const T19 v19_;
01296 const T20 v20_;
01297 const T21 v21_;
01298 const T22 v22_;
01299 const T23 v23_;
01300 const T24 v24_;
01301 const T25 v25_;
01302 const T26 v26_;
01303 const T27 v27_;
01304 const T28 v28_;
01305 const T29 v29_;
01306 };
01307
01308 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01309 typename T6, typename T7, typename T8, typename T9, typename T10,
01310 typename T11, typename T12, typename T13, typename T14, typename T15,
01311 typename T16, typename T17, typename T18, typename T19, typename T20,
01312 typename T21, typename T22, typename T23, typename T24, typename T25,
01313 typename T26, typename T27, typename T28, typename T29, typename T30>
01314 class ValueArray30 {
01315 public:
01316 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01317 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01318 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01319 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
01320 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
01321 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
01322 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
01323 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
01324 v29_(v29), v30_(v30) {}
01325
01326 template <typename T>
01327 operator ParamGenerator<T>() const {
01328 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01329 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01330 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01331 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01332 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01333 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01334 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01335 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01336 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01337 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01338 static_cast<T>(v30_)};
01339 return ValuesIn(array);
01340 }
01341
01342 private:
01343
01344 void operator=(const ValueArray30& other);
01345
01346 const T1 v1_;
01347 const T2 v2_;
01348 const T3 v3_;
01349 const T4 v4_;
01350 const T5 v5_;
01351 const T6 v6_;
01352 const T7 v7_;
01353 const T8 v8_;
01354 const T9 v9_;
01355 const T10 v10_;
01356 const T11 v11_;
01357 const T12 v12_;
01358 const T13 v13_;
01359 const T14 v14_;
01360 const T15 v15_;
01361 const T16 v16_;
01362 const T17 v17_;
01363 const T18 v18_;
01364 const T19 v19_;
01365 const T20 v20_;
01366 const T21 v21_;
01367 const T22 v22_;
01368 const T23 v23_;
01369 const T24 v24_;
01370 const T25 v25_;
01371 const T26 v26_;
01372 const T27 v27_;
01373 const T28 v28_;
01374 const T29 v29_;
01375 const T30 v30_;
01376 };
01377
01378 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01379 typename T6, typename T7, typename T8, typename T9, typename T10,
01380 typename T11, typename T12, typename T13, typename T14, typename T15,
01381 typename T16, typename T17, typename T18, typename T19, typename T20,
01382 typename T21, typename T22, typename T23, typename T24, typename T25,
01383 typename T26, typename T27, typename T28, typename T29, typename T30,
01384 typename T31>
01385 class ValueArray31 {
01386 public:
01387 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01388 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01389 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01390 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
01391 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
01392 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
01393 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
01394 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
01395 v29_(v29), v30_(v30), v31_(v31) {}
01396
01397 template <typename T>
01398 operator ParamGenerator<T>() const {
01399 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01400 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01401 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01402 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01403 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01404 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01405 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01406 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01407 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01408 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01409 static_cast<T>(v30_), static_cast<T>(v31_)};
01410 return ValuesIn(array);
01411 }
01412
01413 private:
01414
01415 void operator=(const ValueArray31& other);
01416
01417 const T1 v1_;
01418 const T2 v2_;
01419 const T3 v3_;
01420 const T4 v4_;
01421 const T5 v5_;
01422 const T6 v6_;
01423 const T7 v7_;
01424 const T8 v8_;
01425 const T9 v9_;
01426 const T10 v10_;
01427 const T11 v11_;
01428 const T12 v12_;
01429 const T13 v13_;
01430 const T14 v14_;
01431 const T15 v15_;
01432 const T16 v16_;
01433 const T17 v17_;
01434 const T18 v18_;
01435 const T19 v19_;
01436 const T20 v20_;
01437 const T21 v21_;
01438 const T22 v22_;
01439 const T23 v23_;
01440 const T24 v24_;
01441 const T25 v25_;
01442 const T26 v26_;
01443 const T27 v27_;
01444 const T28 v28_;
01445 const T29 v29_;
01446 const T30 v30_;
01447 const T31 v31_;
01448 };
01449
01450 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01451 typename T6, typename T7, typename T8, typename T9, typename T10,
01452 typename T11, typename T12, typename T13, typename T14, typename T15,
01453 typename T16, typename T17, typename T18, typename T19, typename T20,
01454 typename T21, typename T22, typename T23, typename T24, typename T25,
01455 typename T26, typename T27, typename T28, typename T29, typename T30,
01456 typename T31, typename T32>
01457 class ValueArray32 {
01458 public:
01459 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01460 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01461 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01462 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
01463 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
01464 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
01465 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
01466 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
01467 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
01468
01469 template <typename T>
01470 operator ParamGenerator<T>() const {
01471 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01472 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01473 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01474 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01475 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01476 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01477 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01478 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01479 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01480 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01481 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
01482 return ValuesIn(array);
01483 }
01484
01485 private:
01486
01487 void operator=(const ValueArray32& other);
01488
01489 const T1 v1_;
01490 const T2 v2_;
01491 const T3 v3_;
01492 const T4 v4_;
01493 const T5 v5_;
01494 const T6 v6_;
01495 const T7 v7_;
01496 const T8 v8_;
01497 const T9 v9_;
01498 const T10 v10_;
01499 const T11 v11_;
01500 const T12 v12_;
01501 const T13 v13_;
01502 const T14 v14_;
01503 const T15 v15_;
01504 const T16 v16_;
01505 const T17 v17_;
01506 const T18 v18_;
01507 const T19 v19_;
01508 const T20 v20_;
01509 const T21 v21_;
01510 const T22 v22_;
01511 const T23 v23_;
01512 const T24 v24_;
01513 const T25 v25_;
01514 const T26 v26_;
01515 const T27 v27_;
01516 const T28 v28_;
01517 const T29 v29_;
01518 const T30 v30_;
01519 const T31 v31_;
01520 const T32 v32_;
01521 };
01522
01523 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01524 typename T6, typename T7, typename T8, typename T9, typename T10,
01525 typename T11, typename T12, typename T13, typename T14, typename T15,
01526 typename T16, typename T17, typename T18, typename T19, typename T20,
01527 typename T21, typename T22, typename T23, typename T24, typename T25,
01528 typename T26, typename T27, typename T28, typename T29, typename T30,
01529 typename T31, typename T32, typename T33>
01530 class ValueArray33 {
01531 public:
01532 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01533 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01534 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01535 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
01536 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
01537 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
01538 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
01539 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
01540 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
01541 v33_(v33) {}
01542
01543 template <typename T>
01544 operator ParamGenerator<T>() const {
01545 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01546 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01547 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01548 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01549 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01550 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01551 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01552 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01553 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01554 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01555 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01556 static_cast<T>(v33_)};
01557 return ValuesIn(array);
01558 }
01559
01560 private:
01561
01562 void operator=(const ValueArray33& other);
01563
01564 const T1 v1_;
01565 const T2 v2_;
01566 const T3 v3_;
01567 const T4 v4_;
01568 const T5 v5_;
01569 const T6 v6_;
01570 const T7 v7_;
01571 const T8 v8_;
01572 const T9 v9_;
01573 const T10 v10_;
01574 const T11 v11_;
01575 const T12 v12_;
01576 const T13 v13_;
01577 const T14 v14_;
01578 const T15 v15_;
01579 const T16 v16_;
01580 const T17 v17_;
01581 const T18 v18_;
01582 const T19 v19_;
01583 const T20 v20_;
01584 const T21 v21_;
01585 const T22 v22_;
01586 const T23 v23_;
01587 const T24 v24_;
01588 const T25 v25_;
01589 const T26 v26_;
01590 const T27 v27_;
01591 const T28 v28_;
01592 const T29 v29_;
01593 const T30 v30_;
01594 const T31 v31_;
01595 const T32 v32_;
01596 const T33 v33_;
01597 };
01598
01599 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01600 typename T6, typename T7, typename T8, typename T9, typename T10,
01601 typename T11, typename T12, typename T13, typename T14, typename T15,
01602 typename T16, typename T17, typename T18, typename T19, typename T20,
01603 typename T21, typename T22, typename T23, typename T24, typename T25,
01604 typename T26, typename T27, typename T28, typename T29, typename T30,
01605 typename T31, typename T32, typename T33, typename T34>
01606 class ValueArray34 {
01607 public:
01608 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01609 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01610 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01611 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
01612 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
01613 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
01614 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
01615 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
01616 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
01617 v33_(v33), v34_(v34) {}
01618
01619 template <typename T>
01620 operator ParamGenerator<T>() const {
01621 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01622 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01623 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01624 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01625 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01626 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01627 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01628 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01629 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01630 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01631 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01632 static_cast<T>(v33_), static_cast<T>(v34_)};
01633 return ValuesIn(array);
01634 }
01635
01636 private:
01637
01638 void operator=(const ValueArray34& other);
01639
01640 const T1 v1_;
01641 const T2 v2_;
01642 const T3 v3_;
01643 const T4 v4_;
01644 const T5 v5_;
01645 const T6 v6_;
01646 const T7 v7_;
01647 const T8 v8_;
01648 const T9 v9_;
01649 const T10 v10_;
01650 const T11 v11_;
01651 const T12 v12_;
01652 const T13 v13_;
01653 const T14 v14_;
01654 const T15 v15_;
01655 const T16 v16_;
01656 const T17 v17_;
01657 const T18 v18_;
01658 const T19 v19_;
01659 const T20 v20_;
01660 const T21 v21_;
01661 const T22 v22_;
01662 const T23 v23_;
01663 const T24 v24_;
01664 const T25 v25_;
01665 const T26 v26_;
01666 const T27 v27_;
01667 const T28 v28_;
01668 const T29 v29_;
01669 const T30 v30_;
01670 const T31 v31_;
01671 const T32 v32_;
01672 const T33 v33_;
01673 const T34 v34_;
01674 };
01675
01676 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01677 typename T6, typename T7, typename T8, typename T9, typename T10,
01678 typename T11, typename T12, typename T13, typename T14, typename T15,
01679 typename T16, typename T17, typename T18, typename T19, typename T20,
01680 typename T21, typename T22, typename T23, typename T24, typename T25,
01681 typename T26, typename T27, typename T28, typename T29, typename T30,
01682 typename T31, typename T32, typename T33, typename T34, typename T35>
01683 class ValueArray35 {
01684 public:
01685 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01686 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01687 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01688 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
01689 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
01690 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
01691 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
01692 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
01693 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
01694 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
01695
01696 template <typename T>
01697 operator ParamGenerator<T>() const {
01698 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01699 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01700 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01701 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01702 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01703 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01704 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01705 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01706 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01707 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01708 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01709 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
01710 return ValuesIn(array);
01711 }
01712
01713 private:
01714
01715 void operator=(const ValueArray35& other);
01716
01717 const T1 v1_;
01718 const T2 v2_;
01719 const T3 v3_;
01720 const T4 v4_;
01721 const T5 v5_;
01722 const T6 v6_;
01723 const T7 v7_;
01724 const T8 v8_;
01725 const T9 v9_;
01726 const T10 v10_;
01727 const T11 v11_;
01728 const T12 v12_;
01729 const T13 v13_;
01730 const T14 v14_;
01731 const T15 v15_;
01732 const T16 v16_;
01733 const T17 v17_;
01734 const T18 v18_;
01735 const T19 v19_;
01736 const T20 v20_;
01737 const T21 v21_;
01738 const T22 v22_;
01739 const T23 v23_;
01740 const T24 v24_;
01741 const T25 v25_;
01742 const T26 v26_;
01743 const T27 v27_;
01744 const T28 v28_;
01745 const T29 v29_;
01746 const T30 v30_;
01747 const T31 v31_;
01748 const T32 v32_;
01749 const T33 v33_;
01750 const T34 v34_;
01751 const T35 v35_;
01752 };
01753
01754 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01755 typename T6, typename T7, typename T8, typename T9, typename T10,
01756 typename T11, typename T12, typename T13, typename T14, typename T15,
01757 typename T16, typename T17, typename T18, typename T19, typename T20,
01758 typename T21, typename T22, typename T23, typename T24, typename T25,
01759 typename T26, typename T27, typename T28, typename T29, typename T30,
01760 typename T31, typename T32, typename T33, typename T34, typename T35,
01761 typename T36>
01762 class ValueArray36 {
01763 public:
01764 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01765 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01766 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01767 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
01768 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
01769 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
01770 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
01771 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
01772 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
01773 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
01774
01775 template <typename T>
01776 operator ParamGenerator<T>() const {
01777 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01778 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01779 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01780 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01781 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01782 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01783 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01784 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01785 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01786 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01787 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01788 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
01789 static_cast<T>(v36_)};
01790 return ValuesIn(array);
01791 }
01792
01793 private:
01794
01795 void operator=(const ValueArray36& other);
01796
01797 const T1 v1_;
01798 const T2 v2_;
01799 const T3 v3_;
01800 const T4 v4_;
01801 const T5 v5_;
01802 const T6 v6_;
01803 const T7 v7_;
01804 const T8 v8_;
01805 const T9 v9_;
01806 const T10 v10_;
01807 const T11 v11_;
01808 const T12 v12_;
01809 const T13 v13_;
01810 const T14 v14_;
01811 const T15 v15_;
01812 const T16 v16_;
01813 const T17 v17_;
01814 const T18 v18_;
01815 const T19 v19_;
01816 const T20 v20_;
01817 const T21 v21_;
01818 const T22 v22_;
01819 const T23 v23_;
01820 const T24 v24_;
01821 const T25 v25_;
01822 const T26 v26_;
01823 const T27 v27_;
01824 const T28 v28_;
01825 const T29 v29_;
01826 const T30 v30_;
01827 const T31 v31_;
01828 const T32 v32_;
01829 const T33 v33_;
01830 const T34 v34_;
01831 const T35 v35_;
01832 const T36 v36_;
01833 };
01834
01835 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01836 typename T6, typename T7, typename T8, typename T9, typename T10,
01837 typename T11, typename T12, typename T13, typename T14, typename T15,
01838 typename T16, typename T17, typename T18, typename T19, typename T20,
01839 typename T21, typename T22, typename T23, typename T24, typename T25,
01840 typename T26, typename T27, typename T28, typename T29, typename T30,
01841 typename T31, typename T32, typename T33, typename T34, typename T35,
01842 typename T36, typename T37>
01843 class ValueArray37 {
01844 public:
01845 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01846 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01847 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01848 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
01849 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
01850 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
01851 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
01852 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
01853 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
01854 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
01855 v36_(v36), v37_(v37) {}
01856
01857 template <typename T>
01858 operator ParamGenerator<T>() const {
01859 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01860 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01861 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01862 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01863 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01864 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01865 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01866 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01867 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01868 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01869 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01870 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
01871 static_cast<T>(v36_), static_cast<T>(v37_)};
01872 return ValuesIn(array);
01873 }
01874
01875 private:
01876
01877 void operator=(const ValueArray37& other);
01878
01879 const T1 v1_;
01880 const T2 v2_;
01881 const T3 v3_;
01882 const T4 v4_;
01883 const T5 v5_;
01884 const T6 v6_;
01885 const T7 v7_;
01886 const T8 v8_;
01887 const T9 v9_;
01888 const T10 v10_;
01889 const T11 v11_;
01890 const T12 v12_;
01891 const T13 v13_;
01892 const T14 v14_;
01893 const T15 v15_;
01894 const T16 v16_;
01895 const T17 v17_;
01896 const T18 v18_;
01897 const T19 v19_;
01898 const T20 v20_;
01899 const T21 v21_;
01900 const T22 v22_;
01901 const T23 v23_;
01902 const T24 v24_;
01903 const T25 v25_;
01904 const T26 v26_;
01905 const T27 v27_;
01906 const T28 v28_;
01907 const T29 v29_;
01908 const T30 v30_;
01909 const T31 v31_;
01910 const T32 v32_;
01911 const T33 v33_;
01912 const T34 v34_;
01913 const T35 v35_;
01914 const T36 v36_;
01915 const T37 v37_;
01916 };
01917
01918 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01919 typename T6, typename T7, typename T8, typename T9, typename T10,
01920 typename T11, typename T12, typename T13, typename T14, typename T15,
01921 typename T16, typename T17, typename T18, typename T19, typename T20,
01922 typename T21, typename T22, typename T23, typename T24, typename T25,
01923 typename T26, typename T27, typename T28, typename T29, typename T30,
01924 typename T31, typename T32, typename T33, typename T34, typename T35,
01925 typename T36, typename T37, typename T38>
01926 class ValueArray38 {
01927 public:
01928 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
01929 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
01930 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
01931 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
01932 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
01933 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
01934 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
01935 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
01936 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
01937 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
01938 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
01939
01940 template <typename T>
01941 operator ParamGenerator<T>() const {
01942 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
01943 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
01944 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
01945 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
01946 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
01947 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
01948 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
01949 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
01950 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
01951 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
01952 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
01953 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
01954 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
01955 return ValuesIn(array);
01956 }
01957
01958 private:
01959
01960 void operator=(const ValueArray38& other);
01961
01962 const T1 v1_;
01963 const T2 v2_;
01964 const T3 v3_;
01965 const T4 v4_;
01966 const T5 v5_;
01967 const T6 v6_;
01968 const T7 v7_;
01969 const T8 v8_;
01970 const T9 v9_;
01971 const T10 v10_;
01972 const T11 v11_;
01973 const T12 v12_;
01974 const T13 v13_;
01975 const T14 v14_;
01976 const T15 v15_;
01977 const T16 v16_;
01978 const T17 v17_;
01979 const T18 v18_;
01980 const T19 v19_;
01981 const T20 v20_;
01982 const T21 v21_;
01983 const T22 v22_;
01984 const T23 v23_;
01985 const T24 v24_;
01986 const T25 v25_;
01987 const T26 v26_;
01988 const T27 v27_;
01989 const T28 v28_;
01990 const T29 v29_;
01991 const T30 v30_;
01992 const T31 v31_;
01993 const T32 v32_;
01994 const T33 v33_;
01995 const T34 v34_;
01996 const T35 v35_;
01997 const T36 v36_;
01998 const T37 v37_;
01999 const T38 v38_;
02000 };
02001
02002 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02003 typename T6, typename T7, typename T8, typename T9, typename T10,
02004 typename T11, typename T12, typename T13, typename T14, typename T15,
02005 typename T16, typename T17, typename T18, typename T19, typename T20,
02006 typename T21, typename T22, typename T23, typename T24, typename T25,
02007 typename T26, typename T27, typename T28, typename T29, typename T30,
02008 typename T31, typename T32, typename T33, typename T34, typename T35,
02009 typename T36, typename T37, typename T38, typename T39>
02010 class ValueArray39 {
02011 public:
02012 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02013 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02014 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02015 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02016 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
02017 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
02018 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
02019 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
02020 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
02021 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
02022 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
02023
02024 template <typename T>
02025 operator ParamGenerator<T>() const {
02026 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02027 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02028 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02029 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02030 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02031 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02032 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02033 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02034 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02035 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02036 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02037 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02038 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02039 static_cast<T>(v39_)};
02040 return ValuesIn(array);
02041 }
02042
02043 private:
02044
02045 void operator=(const ValueArray39& other);
02046
02047 const T1 v1_;
02048 const T2 v2_;
02049 const T3 v3_;
02050 const T4 v4_;
02051 const T5 v5_;
02052 const T6 v6_;
02053 const T7 v7_;
02054 const T8 v8_;
02055 const T9 v9_;
02056 const T10 v10_;
02057 const T11 v11_;
02058 const T12 v12_;
02059 const T13 v13_;
02060 const T14 v14_;
02061 const T15 v15_;
02062 const T16 v16_;
02063 const T17 v17_;
02064 const T18 v18_;
02065 const T19 v19_;
02066 const T20 v20_;
02067 const T21 v21_;
02068 const T22 v22_;
02069 const T23 v23_;
02070 const T24 v24_;
02071 const T25 v25_;
02072 const T26 v26_;
02073 const T27 v27_;
02074 const T28 v28_;
02075 const T29 v29_;
02076 const T30 v30_;
02077 const T31 v31_;
02078 const T32 v32_;
02079 const T33 v33_;
02080 const T34 v34_;
02081 const T35 v35_;
02082 const T36 v36_;
02083 const T37 v37_;
02084 const T38 v38_;
02085 const T39 v39_;
02086 };
02087
02088 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02089 typename T6, typename T7, typename T8, typename T9, typename T10,
02090 typename T11, typename T12, typename T13, typename T14, typename T15,
02091 typename T16, typename T17, typename T18, typename T19, typename T20,
02092 typename T21, typename T22, typename T23, typename T24, typename T25,
02093 typename T26, typename T27, typename T28, typename T29, typename T30,
02094 typename T31, typename T32, typename T33, typename T34, typename T35,
02095 typename T36, typename T37, typename T38, typename T39, typename T40>
02096 class ValueArray40 {
02097 public:
02098 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02099 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02100 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02101 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02102 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
02103 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
02104 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
02105 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
02106 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
02107 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
02108 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
02109 v40_(v40) {}
02110
02111 template <typename T>
02112 operator ParamGenerator<T>() const {
02113 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02114 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02115 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02116 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02117 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02118 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02119 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02120 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02121 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02122 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02123 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02124 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02125 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02126 static_cast<T>(v39_), static_cast<T>(v40_)};
02127 return ValuesIn(array);
02128 }
02129
02130 private:
02131
02132 void operator=(const ValueArray40& other);
02133
02134 const T1 v1_;
02135 const T2 v2_;
02136 const T3 v3_;
02137 const T4 v4_;
02138 const T5 v5_;
02139 const T6 v6_;
02140 const T7 v7_;
02141 const T8 v8_;
02142 const T9 v9_;
02143 const T10 v10_;
02144 const T11 v11_;
02145 const T12 v12_;
02146 const T13 v13_;
02147 const T14 v14_;
02148 const T15 v15_;
02149 const T16 v16_;
02150 const T17 v17_;
02151 const T18 v18_;
02152 const T19 v19_;
02153 const T20 v20_;
02154 const T21 v21_;
02155 const T22 v22_;
02156 const T23 v23_;
02157 const T24 v24_;
02158 const T25 v25_;
02159 const T26 v26_;
02160 const T27 v27_;
02161 const T28 v28_;
02162 const T29 v29_;
02163 const T30 v30_;
02164 const T31 v31_;
02165 const T32 v32_;
02166 const T33 v33_;
02167 const T34 v34_;
02168 const T35 v35_;
02169 const T36 v36_;
02170 const T37 v37_;
02171 const T38 v38_;
02172 const T39 v39_;
02173 const T40 v40_;
02174 };
02175
02176 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02177 typename T6, typename T7, typename T8, typename T9, typename T10,
02178 typename T11, typename T12, typename T13, typename T14, typename T15,
02179 typename T16, typename T17, typename T18, typename T19, typename T20,
02180 typename T21, typename T22, typename T23, typename T24, typename T25,
02181 typename T26, typename T27, typename T28, typename T29, typename T30,
02182 typename T31, typename T32, typename T33, typename T34, typename T35,
02183 typename T36, typename T37, typename T38, typename T39, typename T40,
02184 typename T41>
02185 class ValueArray41 {
02186 public:
02187 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02188 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02189 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02190 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02191 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
02192 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
02193 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
02194 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
02195 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
02196 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
02197 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
02198 v39_(v39), v40_(v40), v41_(v41) {}
02199
02200 template <typename T>
02201 operator ParamGenerator<T>() const {
02202 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02203 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02204 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02205 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02206 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02207 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02208 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02209 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02210 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02211 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02212 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02213 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02214 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02215 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
02216 return ValuesIn(array);
02217 }
02218
02219 private:
02220
02221 void operator=(const ValueArray41& other);
02222
02223 const T1 v1_;
02224 const T2 v2_;
02225 const T3 v3_;
02226 const T4 v4_;
02227 const T5 v5_;
02228 const T6 v6_;
02229 const T7 v7_;
02230 const T8 v8_;
02231 const T9 v9_;
02232 const T10 v10_;
02233 const T11 v11_;
02234 const T12 v12_;
02235 const T13 v13_;
02236 const T14 v14_;
02237 const T15 v15_;
02238 const T16 v16_;
02239 const T17 v17_;
02240 const T18 v18_;
02241 const T19 v19_;
02242 const T20 v20_;
02243 const T21 v21_;
02244 const T22 v22_;
02245 const T23 v23_;
02246 const T24 v24_;
02247 const T25 v25_;
02248 const T26 v26_;
02249 const T27 v27_;
02250 const T28 v28_;
02251 const T29 v29_;
02252 const T30 v30_;
02253 const T31 v31_;
02254 const T32 v32_;
02255 const T33 v33_;
02256 const T34 v34_;
02257 const T35 v35_;
02258 const T36 v36_;
02259 const T37 v37_;
02260 const T38 v38_;
02261 const T39 v39_;
02262 const T40 v40_;
02263 const T41 v41_;
02264 };
02265
02266 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02267 typename T6, typename T7, typename T8, typename T9, typename T10,
02268 typename T11, typename T12, typename T13, typename T14, typename T15,
02269 typename T16, typename T17, typename T18, typename T19, typename T20,
02270 typename T21, typename T22, typename T23, typename T24, typename T25,
02271 typename T26, typename T27, typename T28, typename T29, typename T30,
02272 typename T31, typename T32, typename T33, typename T34, typename T35,
02273 typename T36, typename T37, typename T38, typename T39, typename T40,
02274 typename T41, typename T42>
02275 class ValueArray42 {
02276 public:
02277 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02278 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02279 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02280 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02281 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02282 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
02283 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
02284 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
02285 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
02286 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
02287 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
02288 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
02289
02290 template <typename T>
02291 operator ParamGenerator<T>() const {
02292 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02293 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02294 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02295 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02296 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02297 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02298 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02299 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02300 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02301 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02302 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02303 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02304 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02305 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02306 static_cast<T>(v42_)};
02307 return ValuesIn(array);
02308 }
02309
02310 private:
02311
02312 void operator=(const ValueArray42& other);
02313
02314 const T1 v1_;
02315 const T2 v2_;
02316 const T3 v3_;
02317 const T4 v4_;
02318 const T5 v5_;
02319 const T6 v6_;
02320 const T7 v7_;
02321 const T8 v8_;
02322 const T9 v9_;
02323 const T10 v10_;
02324 const T11 v11_;
02325 const T12 v12_;
02326 const T13 v13_;
02327 const T14 v14_;
02328 const T15 v15_;
02329 const T16 v16_;
02330 const T17 v17_;
02331 const T18 v18_;
02332 const T19 v19_;
02333 const T20 v20_;
02334 const T21 v21_;
02335 const T22 v22_;
02336 const T23 v23_;
02337 const T24 v24_;
02338 const T25 v25_;
02339 const T26 v26_;
02340 const T27 v27_;
02341 const T28 v28_;
02342 const T29 v29_;
02343 const T30 v30_;
02344 const T31 v31_;
02345 const T32 v32_;
02346 const T33 v33_;
02347 const T34 v34_;
02348 const T35 v35_;
02349 const T36 v36_;
02350 const T37 v37_;
02351 const T38 v38_;
02352 const T39 v39_;
02353 const T40 v40_;
02354 const T41 v41_;
02355 const T42 v42_;
02356 };
02357
02358 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02359 typename T6, typename T7, typename T8, typename T9, typename T10,
02360 typename T11, typename T12, typename T13, typename T14, typename T15,
02361 typename T16, typename T17, typename T18, typename T19, typename T20,
02362 typename T21, typename T22, typename T23, typename T24, typename T25,
02363 typename T26, typename T27, typename T28, typename T29, typename T30,
02364 typename T31, typename T32, typename T33, typename T34, typename T35,
02365 typename T36, typename T37, typename T38, typename T39, typename T40,
02366 typename T41, typename T42, typename T43>
02367 class ValueArray43 {
02368 public:
02369 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02370 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02371 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02372 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02373 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02374 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
02375 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
02376 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
02377 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
02378 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
02379 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
02380 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
02381
02382 template <typename T>
02383 operator ParamGenerator<T>() const {
02384 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02385 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02386 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02387 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02388 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02389 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02390 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02391 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02392 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02393 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02394 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02395 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02396 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02397 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02398 static_cast<T>(v42_), static_cast<T>(v43_)};
02399 return ValuesIn(array);
02400 }
02401
02402 private:
02403
02404 void operator=(const ValueArray43& other);
02405
02406 const T1 v1_;
02407 const T2 v2_;
02408 const T3 v3_;
02409 const T4 v4_;
02410 const T5 v5_;
02411 const T6 v6_;
02412 const T7 v7_;
02413 const T8 v8_;
02414 const T9 v9_;
02415 const T10 v10_;
02416 const T11 v11_;
02417 const T12 v12_;
02418 const T13 v13_;
02419 const T14 v14_;
02420 const T15 v15_;
02421 const T16 v16_;
02422 const T17 v17_;
02423 const T18 v18_;
02424 const T19 v19_;
02425 const T20 v20_;
02426 const T21 v21_;
02427 const T22 v22_;
02428 const T23 v23_;
02429 const T24 v24_;
02430 const T25 v25_;
02431 const T26 v26_;
02432 const T27 v27_;
02433 const T28 v28_;
02434 const T29 v29_;
02435 const T30 v30_;
02436 const T31 v31_;
02437 const T32 v32_;
02438 const T33 v33_;
02439 const T34 v34_;
02440 const T35 v35_;
02441 const T36 v36_;
02442 const T37 v37_;
02443 const T38 v38_;
02444 const T39 v39_;
02445 const T40 v40_;
02446 const T41 v41_;
02447 const T42 v42_;
02448 const T43 v43_;
02449 };
02450
02451 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02452 typename T6, typename T7, typename T8, typename T9, typename T10,
02453 typename T11, typename T12, typename T13, typename T14, typename T15,
02454 typename T16, typename T17, typename T18, typename T19, typename T20,
02455 typename T21, typename T22, typename T23, typename T24, typename T25,
02456 typename T26, typename T27, typename T28, typename T29, typename T30,
02457 typename T31, typename T32, typename T33, typename T34, typename T35,
02458 typename T36, typename T37, typename T38, typename T39, typename T40,
02459 typename T41, typename T42, typename T43, typename T44>
02460 class ValueArray44 {
02461 public:
02462 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02463 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02464 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02465 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02466 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02467 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
02468 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
02469 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
02470 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
02471 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
02472 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
02473 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
02474 v43_(v43), v44_(v44) {}
02475
02476 template <typename T>
02477 operator ParamGenerator<T>() const {
02478 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02479 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02480 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02481 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02482 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02483 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02484 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02485 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02486 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02487 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02488 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02489 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02490 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02491 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02492 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
02493 return ValuesIn(array);
02494 }
02495
02496 private:
02497
02498 void operator=(const ValueArray44& other);
02499
02500 const T1 v1_;
02501 const T2 v2_;
02502 const T3 v3_;
02503 const T4 v4_;
02504 const T5 v5_;
02505 const T6 v6_;
02506 const T7 v7_;
02507 const T8 v8_;
02508 const T9 v9_;
02509 const T10 v10_;
02510 const T11 v11_;
02511 const T12 v12_;
02512 const T13 v13_;
02513 const T14 v14_;
02514 const T15 v15_;
02515 const T16 v16_;
02516 const T17 v17_;
02517 const T18 v18_;
02518 const T19 v19_;
02519 const T20 v20_;
02520 const T21 v21_;
02521 const T22 v22_;
02522 const T23 v23_;
02523 const T24 v24_;
02524 const T25 v25_;
02525 const T26 v26_;
02526 const T27 v27_;
02527 const T28 v28_;
02528 const T29 v29_;
02529 const T30 v30_;
02530 const T31 v31_;
02531 const T32 v32_;
02532 const T33 v33_;
02533 const T34 v34_;
02534 const T35 v35_;
02535 const T36 v36_;
02536 const T37 v37_;
02537 const T38 v38_;
02538 const T39 v39_;
02539 const T40 v40_;
02540 const T41 v41_;
02541 const T42 v42_;
02542 const T43 v43_;
02543 const T44 v44_;
02544 };
02545
02546 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02547 typename T6, typename T7, typename T8, typename T9, typename T10,
02548 typename T11, typename T12, typename T13, typename T14, typename T15,
02549 typename T16, typename T17, typename T18, typename T19, typename T20,
02550 typename T21, typename T22, typename T23, typename T24, typename T25,
02551 typename T26, typename T27, typename T28, typename T29, typename T30,
02552 typename T31, typename T32, typename T33, typename T34, typename T35,
02553 typename T36, typename T37, typename T38, typename T39, typename T40,
02554 typename T41, typename T42, typename T43, typename T44, typename T45>
02555 class ValueArray45 {
02556 public:
02557 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02558 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02559 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02560 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02561 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02562 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
02563 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
02564 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
02565 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
02566 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
02567 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
02568 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
02569 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
02570
02571 template <typename T>
02572 operator ParamGenerator<T>() const {
02573 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02574 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02575 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02576 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02577 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02578 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02579 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02580 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02581 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02582 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02583 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02584 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02585 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02586 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02587 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
02588 static_cast<T>(v45_)};
02589 return ValuesIn(array);
02590 }
02591
02592 private:
02593
02594 void operator=(const ValueArray45& other);
02595
02596 const T1 v1_;
02597 const T2 v2_;
02598 const T3 v3_;
02599 const T4 v4_;
02600 const T5 v5_;
02601 const T6 v6_;
02602 const T7 v7_;
02603 const T8 v8_;
02604 const T9 v9_;
02605 const T10 v10_;
02606 const T11 v11_;
02607 const T12 v12_;
02608 const T13 v13_;
02609 const T14 v14_;
02610 const T15 v15_;
02611 const T16 v16_;
02612 const T17 v17_;
02613 const T18 v18_;
02614 const T19 v19_;
02615 const T20 v20_;
02616 const T21 v21_;
02617 const T22 v22_;
02618 const T23 v23_;
02619 const T24 v24_;
02620 const T25 v25_;
02621 const T26 v26_;
02622 const T27 v27_;
02623 const T28 v28_;
02624 const T29 v29_;
02625 const T30 v30_;
02626 const T31 v31_;
02627 const T32 v32_;
02628 const T33 v33_;
02629 const T34 v34_;
02630 const T35 v35_;
02631 const T36 v36_;
02632 const T37 v37_;
02633 const T38 v38_;
02634 const T39 v39_;
02635 const T40 v40_;
02636 const T41 v41_;
02637 const T42 v42_;
02638 const T43 v43_;
02639 const T44 v44_;
02640 const T45 v45_;
02641 };
02642
02643 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02644 typename T6, typename T7, typename T8, typename T9, typename T10,
02645 typename T11, typename T12, typename T13, typename T14, typename T15,
02646 typename T16, typename T17, typename T18, typename T19, typename T20,
02647 typename T21, typename T22, typename T23, typename T24, typename T25,
02648 typename T26, typename T27, typename T28, typename T29, typename T30,
02649 typename T31, typename T32, typename T33, typename T34, typename T35,
02650 typename T36, typename T37, typename T38, typename T39, typename T40,
02651 typename T41, typename T42, typename T43, typename T44, typename T45,
02652 typename T46>
02653 class ValueArray46 {
02654 public:
02655 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02656 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02657 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02658 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02659 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02660 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
02661 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
02662 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
02663 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
02664 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
02665 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
02666 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
02667 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
02668
02669 template <typename T>
02670 operator ParamGenerator<T>() const {
02671 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02672 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02673 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02674 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02675 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02676 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02677 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02678 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02679 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02680 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02681 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02682 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02683 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02684 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02685 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
02686 static_cast<T>(v45_), static_cast<T>(v46_)};
02687 return ValuesIn(array);
02688 }
02689
02690 private:
02691
02692 void operator=(const ValueArray46& other);
02693
02694 const T1 v1_;
02695 const T2 v2_;
02696 const T3 v3_;
02697 const T4 v4_;
02698 const T5 v5_;
02699 const T6 v6_;
02700 const T7 v7_;
02701 const T8 v8_;
02702 const T9 v9_;
02703 const T10 v10_;
02704 const T11 v11_;
02705 const T12 v12_;
02706 const T13 v13_;
02707 const T14 v14_;
02708 const T15 v15_;
02709 const T16 v16_;
02710 const T17 v17_;
02711 const T18 v18_;
02712 const T19 v19_;
02713 const T20 v20_;
02714 const T21 v21_;
02715 const T22 v22_;
02716 const T23 v23_;
02717 const T24 v24_;
02718 const T25 v25_;
02719 const T26 v26_;
02720 const T27 v27_;
02721 const T28 v28_;
02722 const T29 v29_;
02723 const T30 v30_;
02724 const T31 v31_;
02725 const T32 v32_;
02726 const T33 v33_;
02727 const T34 v34_;
02728 const T35 v35_;
02729 const T36 v36_;
02730 const T37 v37_;
02731 const T38 v38_;
02732 const T39 v39_;
02733 const T40 v40_;
02734 const T41 v41_;
02735 const T42 v42_;
02736 const T43 v43_;
02737 const T44 v44_;
02738 const T45 v45_;
02739 const T46 v46_;
02740 };
02741
02742 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02743 typename T6, typename T7, typename T8, typename T9, typename T10,
02744 typename T11, typename T12, typename T13, typename T14, typename T15,
02745 typename T16, typename T17, typename T18, typename T19, typename T20,
02746 typename T21, typename T22, typename T23, typename T24, typename T25,
02747 typename T26, typename T27, typename T28, typename T29, typename T30,
02748 typename T31, typename T32, typename T33, typename T34, typename T35,
02749 typename T36, typename T37, typename T38, typename T39, typename T40,
02750 typename T41, typename T42, typename T43, typename T44, typename T45,
02751 typename T46, typename T47>
02752 class ValueArray47 {
02753 public:
02754 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02755 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02756 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02757 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02758 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02759 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
02760 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
02761 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
02762 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
02763 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
02764 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
02765 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
02766 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
02767 v47_(v47) {}
02768
02769 template <typename T>
02770 operator ParamGenerator<T>() const {
02771 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02772 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02773 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02774 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02775 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02776 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02777 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02778 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02779 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02780 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02781 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02782 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02783 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02784 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02785 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
02786 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
02787 return ValuesIn(array);
02788 }
02789
02790 private:
02791
02792 void operator=(const ValueArray47& other);
02793
02794 const T1 v1_;
02795 const T2 v2_;
02796 const T3 v3_;
02797 const T4 v4_;
02798 const T5 v5_;
02799 const T6 v6_;
02800 const T7 v7_;
02801 const T8 v8_;
02802 const T9 v9_;
02803 const T10 v10_;
02804 const T11 v11_;
02805 const T12 v12_;
02806 const T13 v13_;
02807 const T14 v14_;
02808 const T15 v15_;
02809 const T16 v16_;
02810 const T17 v17_;
02811 const T18 v18_;
02812 const T19 v19_;
02813 const T20 v20_;
02814 const T21 v21_;
02815 const T22 v22_;
02816 const T23 v23_;
02817 const T24 v24_;
02818 const T25 v25_;
02819 const T26 v26_;
02820 const T27 v27_;
02821 const T28 v28_;
02822 const T29 v29_;
02823 const T30 v30_;
02824 const T31 v31_;
02825 const T32 v32_;
02826 const T33 v33_;
02827 const T34 v34_;
02828 const T35 v35_;
02829 const T36 v36_;
02830 const T37 v37_;
02831 const T38 v38_;
02832 const T39 v39_;
02833 const T40 v40_;
02834 const T41 v41_;
02835 const T42 v42_;
02836 const T43 v43_;
02837 const T44 v44_;
02838 const T45 v45_;
02839 const T46 v46_;
02840 const T47 v47_;
02841 };
02842
02843 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02844 typename T6, typename T7, typename T8, typename T9, typename T10,
02845 typename T11, typename T12, typename T13, typename T14, typename T15,
02846 typename T16, typename T17, typename T18, typename T19, typename T20,
02847 typename T21, typename T22, typename T23, typename T24, typename T25,
02848 typename T26, typename T27, typename T28, typename T29, typename T30,
02849 typename T31, typename T32, typename T33, typename T34, typename T35,
02850 typename T36, typename T37, typename T38, typename T39, typename T40,
02851 typename T41, typename T42, typename T43, typename T44, typename T45,
02852 typename T46, typename T47, typename T48>
02853 class ValueArray48 {
02854 public:
02855 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02856 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02857 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02858 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02859 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02860 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
02861 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
02862 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
02863 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
02864 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
02865 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
02866 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
02867 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
02868 v46_(v46), v47_(v47), v48_(v48) {}
02869
02870 template <typename T>
02871 operator ParamGenerator<T>() const {
02872 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02873 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02874 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02875 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02876 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02877 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02878 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02879 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02880 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02881 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02882 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02883 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02884 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02885 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02886 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
02887 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
02888 static_cast<T>(v48_)};
02889 return ValuesIn(array);
02890 }
02891
02892 private:
02893
02894 void operator=(const ValueArray48& other);
02895
02896 const T1 v1_;
02897 const T2 v2_;
02898 const T3 v3_;
02899 const T4 v4_;
02900 const T5 v5_;
02901 const T6 v6_;
02902 const T7 v7_;
02903 const T8 v8_;
02904 const T9 v9_;
02905 const T10 v10_;
02906 const T11 v11_;
02907 const T12 v12_;
02908 const T13 v13_;
02909 const T14 v14_;
02910 const T15 v15_;
02911 const T16 v16_;
02912 const T17 v17_;
02913 const T18 v18_;
02914 const T19 v19_;
02915 const T20 v20_;
02916 const T21 v21_;
02917 const T22 v22_;
02918 const T23 v23_;
02919 const T24 v24_;
02920 const T25 v25_;
02921 const T26 v26_;
02922 const T27 v27_;
02923 const T28 v28_;
02924 const T29 v29_;
02925 const T30 v30_;
02926 const T31 v31_;
02927 const T32 v32_;
02928 const T33 v33_;
02929 const T34 v34_;
02930 const T35 v35_;
02931 const T36 v36_;
02932 const T37 v37_;
02933 const T38 v38_;
02934 const T39 v39_;
02935 const T40 v40_;
02936 const T41 v41_;
02937 const T42 v42_;
02938 const T43 v43_;
02939 const T44 v44_;
02940 const T45 v45_;
02941 const T46 v46_;
02942 const T47 v47_;
02943 const T48 v48_;
02944 };
02945
02946 template <typename T1, typename T2, typename T3, typename T4, typename T5,
02947 typename T6, typename T7, typename T8, typename T9, typename T10,
02948 typename T11, typename T12, typename T13, typename T14, typename T15,
02949 typename T16, typename T17, typename T18, typename T19, typename T20,
02950 typename T21, typename T22, typename T23, typename T24, typename T25,
02951 typename T26, typename T27, typename T28, typename T29, typename T30,
02952 typename T31, typename T32, typename T33, typename T34, typename T35,
02953 typename T36, typename T37, typename T38, typename T39, typename T40,
02954 typename T41, typename T42, typename T43, typename T44, typename T45,
02955 typename T46, typename T47, typename T48, typename T49>
02956 class ValueArray49 {
02957 public:
02958 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
02959 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
02960 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
02961 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
02962 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
02963 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
02964 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
02965 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
02966 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
02967 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
02968 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
02969 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
02970 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
02971 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
02972
02973 template <typename T>
02974 operator ParamGenerator<T>() const {
02975 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
02976 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
02977 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
02978 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
02979 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
02980 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
02981 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
02982 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
02983 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
02984 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
02985 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
02986 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
02987 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
02988 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
02989 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
02990 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
02991 static_cast<T>(v48_), static_cast<T>(v49_)};
02992 return ValuesIn(array);
02993 }
02994
02995 private:
02996
02997 void operator=(const ValueArray49& other);
02998
02999 const T1 v1_;
03000 const T2 v2_;
03001 const T3 v3_;
03002 const T4 v4_;
03003 const T5 v5_;
03004 const T6 v6_;
03005 const T7 v7_;
03006 const T8 v8_;
03007 const T9 v9_;
03008 const T10 v10_;
03009 const T11 v11_;
03010 const T12 v12_;
03011 const T13 v13_;
03012 const T14 v14_;
03013 const T15 v15_;
03014 const T16 v16_;
03015 const T17 v17_;
03016 const T18 v18_;
03017 const T19 v19_;
03018 const T20 v20_;
03019 const T21 v21_;
03020 const T22 v22_;
03021 const T23 v23_;
03022 const T24 v24_;
03023 const T25 v25_;
03024 const T26 v26_;
03025 const T27 v27_;
03026 const T28 v28_;
03027 const T29 v29_;
03028 const T30 v30_;
03029 const T31 v31_;
03030 const T32 v32_;
03031 const T33 v33_;
03032 const T34 v34_;
03033 const T35 v35_;
03034 const T36 v36_;
03035 const T37 v37_;
03036 const T38 v38_;
03037 const T39 v39_;
03038 const T40 v40_;
03039 const T41 v41_;
03040 const T42 v42_;
03041 const T43 v43_;
03042 const T44 v44_;
03043 const T45 v45_;
03044 const T46 v46_;
03045 const T47 v47_;
03046 const T48 v48_;
03047 const T49 v49_;
03048 };
03049
03050 template <typename T1, typename T2, typename T3, typename T4, typename T5,
03051 typename T6, typename T7, typename T8, typename T9, typename T10,
03052 typename T11, typename T12, typename T13, typename T14, typename T15,
03053 typename T16, typename T17, typename T18, typename T19, typename T20,
03054 typename T21, typename T22, typename T23, typename T24, typename T25,
03055 typename T26, typename T27, typename T28, typename T29, typename T30,
03056 typename T31, typename T32, typename T33, typename T34, typename T35,
03057 typename T36, typename T37, typename T38, typename T39, typename T40,
03058 typename T41, typename T42, typename T43, typename T44, typename T45,
03059 typename T46, typename T47, typename T48, typename T49, typename T50>
03060 class ValueArray50 {
03061 public:
03062 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
03063 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
03064 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
03065 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
03066 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
03067 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
03068 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
03069 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
03070 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
03071 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
03072 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
03073 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
03074 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
03075 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
03076
03077 template <typename T>
03078 operator ParamGenerator<T>() const {
03079 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
03080 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
03081 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
03082 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
03083 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
03084 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
03085 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
03086 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
03087 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
03088 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
03089 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
03090 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
03091 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
03092 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
03093 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
03094 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
03095 static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
03096 return ValuesIn(array);
03097 }
03098
03099 private:
03100
03101 void operator=(const ValueArray50& other);
03102
03103 const T1 v1_;
03104 const T2 v2_;
03105 const T3 v3_;
03106 const T4 v4_;
03107 const T5 v5_;
03108 const T6 v6_;
03109 const T7 v7_;
03110 const T8 v8_;
03111 const T9 v9_;
03112 const T10 v10_;
03113 const T11 v11_;
03114 const T12 v12_;
03115 const T13 v13_;
03116 const T14 v14_;
03117 const T15 v15_;
03118 const T16 v16_;
03119 const T17 v17_;
03120 const T18 v18_;
03121 const T19 v19_;
03122 const T20 v20_;
03123 const T21 v21_;
03124 const T22 v22_;
03125 const T23 v23_;
03126 const T24 v24_;
03127 const T25 v25_;
03128 const T26 v26_;
03129 const T27 v27_;
03130 const T28 v28_;
03131 const T29 v29_;
03132 const T30 v30_;
03133 const T31 v31_;
03134 const T32 v32_;
03135 const T33 v33_;
03136 const T34 v34_;
03137 const T35 v35_;
03138 const T36 v36_;
03139 const T37 v37_;
03140 const T38 v38_;
03141 const T39 v39_;
03142 const T40 v40_;
03143 const T41 v41_;
03144 const T42 v42_;
03145 const T43 v43_;
03146 const T44 v44_;
03147 const T45 v45_;
03148 const T46 v46_;
03149 const T47 v47_;
03150 const T48 v48_;
03151 const T49 v49_;
03152 const T50 v50_;
03153 };
03154
03155 # if GTEST_HAS_COMBINE
03156
03157
03158
03159
03160
03161 template <typename T1, typename T2>
03162 class CartesianProductGenerator2
03163 : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {
03164 public:
03165 typedef ::testing::tuple<T1, T2> ParamType;
03166
03167 CartesianProductGenerator2(const ParamGenerator<T1>& g1,
03168 const ParamGenerator<T2>& g2)
03169 : g1_(g1), g2_(g2) {}
03170 virtual ~CartesianProductGenerator2() {}
03171
03172 virtual ParamIteratorInterface<ParamType>* Begin() const {
03173 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
03174 }
03175 virtual ParamIteratorInterface<ParamType>* End() const {
03176 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
03177 }
03178
03179 private:
03180 class Iterator : public ParamIteratorInterface<ParamType> {
03181 public:
03182 Iterator(const ParamGeneratorInterface<ParamType>* base,
03183 const ParamGenerator<T1>& g1,
03184 const typename ParamGenerator<T1>::iterator& current1,
03185 const ParamGenerator<T2>& g2,
03186 const typename ParamGenerator<T2>::iterator& current2)
03187 : base_(base),
03188 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03189 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
03190 ComputeCurrentValue();
03191 }
03192 virtual ~Iterator() {}
03193
03194 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03195 return base_;
03196 }
03197
03198
03199 virtual void Advance() {
03200 assert(!AtEnd());
03201 ++current2_;
03202 if (current2_ == end2_) {
03203 current2_ = begin2_;
03204 ++current1_;
03205 }
03206 ComputeCurrentValue();
03207 }
03208 virtual ParamIteratorInterface<ParamType>* Clone() const {
03209 return new Iterator(*this);
03210 }
03211 virtual const ParamType* Current() const { return ¤t_value_; }
03212 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
03213
03214
03215 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
03216 << "The program attempted to compare iterators "
03217 << "from different generators." << std::endl;
03218 const Iterator* typed_other =
03219 CheckedDowncastToActualType<const Iterator>(&other);
03220
03221
03222
03223 return (AtEnd() && typed_other->AtEnd()) ||
03224 (
03225 current1_ == typed_other->current1_ &&
03226 current2_ == typed_other->current2_);
03227 }
03228
03229 private:
03230 Iterator(const Iterator& other)
03231 : base_(other.base_),
03232 begin1_(other.begin1_),
03233 end1_(other.end1_),
03234 current1_(other.current1_),
03235 begin2_(other.begin2_),
03236 end2_(other.end2_),
03237 current2_(other.current2_) {
03238 ComputeCurrentValue();
03239 }
03240
03241 void ComputeCurrentValue() {
03242 if (!AtEnd())
03243 current_value_ = ParamType(*current1_, *current2_);
03244 }
03245 bool AtEnd() const {
03246
03247
03248 return
03249 current1_ == end1_ ||
03250 current2_ == end2_;
03251 }
03252
03253
03254 void operator=(const Iterator& other);
03255
03256 const ParamGeneratorInterface<ParamType>* const base_;
03257
03258
03259 const typename ParamGenerator<T1>::iterator begin1_;
03260 const typename ParamGenerator<T1>::iterator end1_;
03261 typename ParamGenerator<T1>::iterator current1_;
03262 const typename ParamGenerator<T2>::iterator begin2_;
03263 const typename ParamGenerator<T2>::iterator end2_;
03264 typename ParamGenerator<T2>::iterator current2_;
03265 ParamType current_value_;
03266 };
03267
03268
03269 void operator=(const CartesianProductGenerator2& other);
03270
03271 const ParamGenerator<T1> g1_;
03272 const ParamGenerator<T2> g2_;
03273 };
03274
03275
03276 template <typename T1, typename T2, typename T3>
03277 class CartesianProductGenerator3
03278 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
03279 public:
03280 typedef ::testing::tuple<T1, T2, T3> ParamType;
03281
03282 CartesianProductGenerator3(const ParamGenerator<T1>& g1,
03283 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
03284 : g1_(g1), g2_(g2), g3_(g3) {}
03285 virtual ~CartesianProductGenerator3() {}
03286
03287 virtual ParamIteratorInterface<ParamType>* Begin() const {
03288 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
03289 g3_.begin());
03290 }
03291 virtual ParamIteratorInterface<ParamType>* End() const {
03292 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
03293 }
03294
03295 private:
03296 class Iterator : public ParamIteratorInterface<ParamType> {
03297 public:
03298 Iterator(const ParamGeneratorInterface<ParamType>* base,
03299 const ParamGenerator<T1>& g1,
03300 const typename ParamGenerator<T1>::iterator& current1,
03301 const ParamGenerator<T2>& g2,
03302 const typename ParamGenerator<T2>::iterator& current2,
03303 const ParamGenerator<T3>& g3,
03304 const typename ParamGenerator<T3>::iterator& current3)
03305 : base_(base),
03306 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03307 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
03308 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
03309 ComputeCurrentValue();
03310 }
03311 virtual ~Iterator() {}
03312
03313 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03314 return base_;
03315 }
03316
03317
03318 virtual void Advance() {
03319 assert(!AtEnd());
03320 ++current3_;
03321 if (current3_ == end3_) {
03322 current3_ = begin3_;
03323 ++current2_;
03324 }
03325 if (current2_ == end2_) {
03326 current2_ = begin2_;
03327 ++current1_;
03328 }
03329 ComputeCurrentValue();
03330 }
03331 virtual ParamIteratorInterface<ParamType>* Clone() const {
03332 return new Iterator(*this);
03333 }
03334 virtual const ParamType* Current() const { return ¤t_value_; }
03335 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
03336
03337
03338 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
03339 << "The program attempted to compare iterators "
03340 << "from different generators." << std::endl;
03341 const Iterator* typed_other =
03342 CheckedDowncastToActualType<const Iterator>(&other);
03343
03344
03345
03346 return (AtEnd() && typed_other->AtEnd()) ||
03347 (
03348 current1_ == typed_other->current1_ &&
03349 current2_ == typed_other->current2_ &&
03350 current3_ == typed_other->current3_);
03351 }
03352
03353 private:
03354 Iterator(const Iterator& other)
03355 : base_(other.base_),
03356 begin1_(other.begin1_),
03357 end1_(other.end1_),
03358 current1_(other.current1_),
03359 begin2_(other.begin2_),
03360 end2_(other.end2_),
03361 current2_(other.current2_),
03362 begin3_(other.begin3_),
03363 end3_(other.end3_),
03364 current3_(other.current3_) {
03365 ComputeCurrentValue();
03366 }
03367
03368 void ComputeCurrentValue() {
03369 if (!AtEnd())
03370 current_value_ = ParamType(*current1_, *current2_, *current3_);
03371 }
03372 bool AtEnd() const {
03373
03374
03375 return
03376 current1_ == end1_ ||
03377 current2_ == end2_ ||
03378 current3_ == end3_;
03379 }
03380
03381
03382 void operator=(const Iterator& other);
03383
03384 const ParamGeneratorInterface<ParamType>* const base_;
03385
03386
03387 const typename ParamGenerator<T1>::iterator begin1_;
03388 const typename ParamGenerator<T1>::iterator end1_;
03389 typename ParamGenerator<T1>::iterator current1_;
03390 const typename ParamGenerator<T2>::iterator begin2_;
03391 const typename ParamGenerator<T2>::iterator end2_;
03392 typename ParamGenerator<T2>::iterator current2_;
03393 const typename ParamGenerator<T3>::iterator begin3_;
03394 const typename ParamGenerator<T3>::iterator end3_;
03395 typename ParamGenerator<T3>::iterator current3_;
03396 ParamType current_value_;
03397 };
03398
03399
03400 void operator=(const CartesianProductGenerator3& other);
03401
03402 const ParamGenerator<T1> g1_;
03403 const ParamGenerator<T2> g2_;
03404 const ParamGenerator<T3> g3_;
03405 };
03406
03407
03408 template <typename T1, typename T2, typename T3, typename T4>
03409 class CartesianProductGenerator4
03410 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
03411 public:
03412 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
03413
03414 CartesianProductGenerator4(const ParamGenerator<T1>& g1,
03415 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
03416 const ParamGenerator<T4>& g4)
03417 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
03418 virtual ~CartesianProductGenerator4() {}
03419
03420 virtual ParamIteratorInterface<ParamType>* Begin() const {
03421 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
03422 g3_.begin(), g4_, g4_.begin());
03423 }
03424 virtual ParamIteratorInterface<ParamType>* End() const {
03425 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
03426 g4_, g4_.end());
03427 }
03428
03429 private:
03430 class Iterator : public ParamIteratorInterface<ParamType> {
03431 public:
03432 Iterator(const ParamGeneratorInterface<ParamType>* base,
03433 const ParamGenerator<T1>& g1,
03434 const typename ParamGenerator<T1>::iterator& current1,
03435 const ParamGenerator<T2>& g2,
03436 const typename ParamGenerator<T2>::iterator& current2,
03437 const ParamGenerator<T3>& g3,
03438 const typename ParamGenerator<T3>::iterator& current3,
03439 const ParamGenerator<T4>& g4,
03440 const typename ParamGenerator<T4>::iterator& current4)
03441 : base_(base),
03442 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03443 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
03444 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
03445 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
03446 ComputeCurrentValue();
03447 }
03448 virtual ~Iterator() {}
03449
03450 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03451 return base_;
03452 }
03453
03454
03455 virtual void Advance() {
03456 assert(!AtEnd());
03457 ++current4_;
03458 if (current4_ == end4_) {
03459 current4_ = begin4_;
03460 ++current3_;
03461 }
03462 if (current3_ == end3_) {
03463 current3_ = begin3_;
03464 ++current2_;
03465 }
03466 if (current2_ == end2_) {
03467 current2_ = begin2_;
03468 ++current1_;
03469 }
03470 ComputeCurrentValue();
03471 }
03472 virtual ParamIteratorInterface<ParamType>* Clone() const {
03473 return new Iterator(*this);
03474 }
03475 virtual const ParamType* Current() const { return ¤t_value_; }
03476 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
03477
03478
03479 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
03480 << "The program attempted to compare iterators "
03481 << "from different generators." << std::endl;
03482 const Iterator* typed_other =
03483 CheckedDowncastToActualType<const Iterator>(&other);
03484
03485
03486
03487 return (AtEnd() && typed_other->AtEnd()) ||
03488 (
03489 current1_ == typed_other->current1_ &&
03490 current2_ == typed_other->current2_ &&
03491 current3_ == typed_other->current3_ &&
03492 current4_ == typed_other->current4_);
03493 }
03494
03495 private:
03496 Iterator(const Iterator& other)
03497 : base_(other.base_),
03498 begin1_(other.begin1_),
03499 end1_(other.end1_),
03500 current1_(other.current1_),
03501 begin2_(other.begin2_),
03502 end2_(other.end2_),
03503 current2_(other.current2_),
03504 begin3_(other.begin3_),
03505 end3_(other.end3_),
03506 current3_(other.current3_),
03507 begin4_(other.begin4_),
03508 end4_(other.end4_),
03509 current4_(other.current4_) {
03510 ComputeCurrentValue();
03511 }
03512
03513 void ComputeCurrentValue() {
03514 if (!AtEnd())
03515 current_value_ = ParamType(*current1_, *current2_, *current3_,
03516 *current4_);
03517 }
03518 bool AtEnd() const {
03519
03520
03521 return
03522 current1_ == end1_ ||
03523 current2_ == end2_ ||
03524 current3_ == end3_ ||
03525 current4_ == end4_;
03526 }
03527
03528
03529 void operator=(const Iterator& other);
03530
03531 const ParamGeneratorInterface<ParamType>* const base_;
03532
03533
03534 const typename ParamGenerator<T1>::iterator begin1_;
03535 const typename ParamGenerator<T1>::iterator end1_;
03536 typename ParamGenerator<T1>::iterator current1_;
03537 const typename ParamGenerator<T2>::iterator begin2_;
03538 const typename ParamGenerator<T2>::iterator end2_;
03539 typename ParamGenerator<T2>::iterator current2_;
03540 const typename ParamGenerator<T3>::iterator begin3_;
03541 const typename ParamGenerator<T3>::iterator end3_;
03542 typename ParamGenerator<T3>::iterator current3_;
03543 const typename ParamGenerator<T4>::iterator begin4_;
03544 const typename ParamGenerator<T4>::iterator end4_;
03545 typename ParamGenerator<T4>::iterator current4_;
03546 ParamType current_value_;
03547 };
03548
03549
03550 void operator=(const CartesianProductGenerator4& other);
03551
03552 const ParamGenerator<T1> g1_;
03553 const ParamGenerator<T2> g2_;
03554 const ParamGenerator<T3> g3_;
03555 const ParamGenerator<T4> g4_;
03556 };
03557
03558
03559 template <typename T1, typename T2, typename T3, typename T4, typename T5>
03560 class CartesianProductGenerator5
03561 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
03562 public:
03563 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
03564
03565 CartesianProductGenerator5(const ParamGenerator<T1>& g1,
03566 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
03567 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
03568 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
03569 virtual ~CartesianProductGenerator5() {}
03570
03571 virtual ParamIteratorInterface<ParamType>* Begin() const {
03572 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
03573 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
03574 }
03575 virtual ParamIteratorInterface<ParamType>* End() const {
03576 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
03577 g4_, g4_.end(), g5_, g5_.end());
03578 }
03579
03580 private:
03581 class Iterator : public ParamIteratorInterface<ParamType> {
03582 public:
03583 Iterator(const ParamGeneratorInterface<ParamType>* base,
03584 const ParamGenerator<T1>& g1,
03585 const typename ParamGenerator<T1>::iterator& current1,
03586 const ParamGenerator<T2>& g2,
03587 const typename ParamGenerator<T2>::iterator& current2,
03588 const ParamGenerator<T3>& g3,
03589 const typename ParamGenerator<T3>::iterator& current3,
03590 const ParamGenerator<T4>& g4,
03591 const typename ParamGenerator<T4>::iterator& current4,
03592 const ParamGenerator<T5>& g5,
03593 const typename ParamGenerator<T5>::iterator& current5)
03594 : base_(base),
03595 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03596 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
03597 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
03598 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
03599 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
03600 ComputeCurrentValue();
03601 }
03602 virtual ~Iterator() {}
03603
03604 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03605 return base_;
03606 }
03607
03608
03609 virtual void Advance() {
03610 assert(!AtEnd());
03611 ++current5_;
03612 if (current5_ == end5_) {
03613 current5_ = begin5_;
03614 ++current4_;
03615 }
03616 if (current4_ == end4_) {
03617 current4_ = begin4_;
03618 ++current3_;
03619 }
03620 if (current3_ == end3_) {
03621 current3_ = begin3_;
03622 ++current2_;
03623 }
03624 if (current2_ == end2_) {
03625 current2_ = begin2_;
03626 ++current1_;
03627 }
03628 ComputeCurrentValue();
03629 }
03630 virtual ParamIteratorInterface<ParamType>* Clone() const {
03631 return new Iterator(*this);
03632 }
03633 virtual const ParamType* Current() const { return ¤t_value_; }
03634 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
03635
03636
03637 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
03638 << "The program attempted to compare iterators "
03639 << "from different generators." << std::endl;
03640 const Iterator* typed_other =
03641 CheckedDowncastToActualType<const Iterator>(&other);
03642
03643
03644
03645 return (AtEnd() && typed_other->AtEnd()) ||
03646 (
03647 current1_ == typed_other->current1_ &&
03648 current2_ == typed_other->current2_ &&
03649 current3_ == typed_other->current3_ &&
03650 current4_ == typed_other->current4_ &&
03651 current5_ == typed_other->current5_);
03652 }
03653
03654 private:
03655 Iterator(const Iterator& other)
03656 : base_(other.base_),
03657 begin1_(other.begin1_),
03658 end1_(other.end1_),
03659 current1_(other.current1_),
03660 begin2_(other.begin2_),
03661 end2_(other.end2_),
03662 current2_(other.current2_),
03663 begin3_(other.begin3_),
03664 end3_(other.end3_),
03665 current3_(other.current3_),
03666 begin4_(other.begin4_),
03667 end4_(other.end4_),
03668 current4_(other.current4_),
03669 begin5_(other.begin5_),
03670 end5_(other.end5_),
03671 current5_(other.current5_) {
03672 ComputeCurrentValue();
03673 }
03674
03675 void ComputeCurrentValue() {
03676 if (!AtEnd())
03677 current_value_ = ParamType(*current1_, *current2_, *current3_,
03678 *current4_, *current5_);
03679 }
03680 bool AtEnd() const {
03681
03682
03683 return
03684 current1_ == end1_ ||
03685 current2_ == end2_ ||
03686 current3_ == end3_ ||
03687 current4_ == end4_ ||
03688 current5_ == end5_;
03689 }
03690
03691
03692 void operator=(const Iterator& other);
03693
03694 const ParamGeneratorInterface<ParamType>* const base_;
03695
03696
03697 const typename ParamGenerator<T1>::iterator begin1_;
03698 const typename ParamGenerator<T1>::iterator end1_;
03699 typename ParamGenerator<T1>::iterator current1_;
03700 const typename ParamGenerator<T2>::iterator begin2_;
03701 const typename ParamGenerator<T2>::iterator end2_;
03702 typename ParamGenerator<T2>::iterator current2_;
03703 const typename ParamGenerator<T3>::iterator begin3_;
03704 const typename ParamGenerator<T3>::iterator end3_;
03705 typename ParamGenerator<T3>::iterator current3_;
03706 const typename ParamGenerator<T4>::iterator begin4_;
03707 const typename ParamGenerator<T4>::iterator end4_;
03708 typename ParamGenerator<T4>::iterator current4_;
03709 const typename ParamGenerator<T5>::iterator begin5_;
03710 const typename ParamGenerator<T5>::iterator end5_;
03711 typename ParamGenerator<T5>::iterator current5_;
03712 ParamType current_value_;
03713 };
03714
03715
03716 void operator=(const CartesianProductGenerator5& other);
03717
03718 const ParamGenerator<T1> g1_;
03719 const ParamGenerator<T2> g2_;
03720 const ParamGenerator<T3> g3_;
03721 const ParamGenerator<T4> g4_;
03722 const ParamGenerator<T5> g5_;
03723 };
03724
03725
03726 template <typename T1, typename T2, typename T3, typename T4, typename T5,
03727 typename T6>
03728 class CartesianProductGenerator6
03729 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
03730 T6> > {
03731 public:
03732 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
03733
03734 CartesianProductGenerator6(const ParamGenerator<T1>& g1,
03735 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
03736 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
03737 const ParamGenerator<T6>& g6)
03738 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
03739 virtual ~CartesianProductGenerator6() {}
03740
03741 virtual ParamIteratorInterface<ParamType>* Begin() const {
03742 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
03743 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
03744 }
03745 virtual ParamIteratorInterface<ParamType>* End() const {
03746 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
03747 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
03748 }
03749
03750 private:
03751 class Iterator : public ParamIteratorInterface<ParamType> {
03752 public:
03753 Iterator(const ParamGeneratorInterface<ParamType>* base,
03754 const ParamGenerator<T1>& g1,
03755 const typename ParamGenerator<T1>::iterator& current1,
03756 const ParamGenerator<T2>& g2,
03757 const typename ParamGenerator<T2>::iterator& current2,
03758 const ParamGenerator<T3>& g3,
03759 const typename ParamGenerator<T3>::iterator& current3,
03760 const ParamGenerator<T4>& g4,
03761 const typename ParamGenerator<T4>::iterator& current4,
03762 const ParamGenerator<T5>& g5,
03763 const typename ParamGenerator<T5>::iterator& current5,
03764 const ParamGenerator<T6>& g6,
03765 const typename ParamGenerator<T6>::iterator& current6)
03766 : base_(base),
03767 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03768 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
03769 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
03770 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
03771 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
03772 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
03773 ComputeCurrentValue();
03774 }
03775 virtual ~Iterator() {}
03776
03777 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03778 return base_;
03779 }
03780
03781
03782 virtual void Advance() {
03783 assert(!AtEnd());
03784 ++current6_;
03785 if (current6_ == end6_) {
03786 current6_ = begin6_;
03787 ++current5_;
03788 }
03789 if (current5_ == end5_) {
03790 current5_ = begin5_;
03791 ++current4_;
03792 }
03793 if (current4_ == end4_) {
03794 current4_ = begin4_;
03795 ++current3_;
03796 }
03797 if (current3_ == end3_) {
03798 current3_ = begin3_;
03799 ++current2_;
03800 }
03801 if (current2_ == end2_) {
03802 current2_ = begin2_;
03803 ++current1_;
03804 }
03805 ComputeCurrentValue();
03806 }
03807 virtual ParamIteratorInterface<ParamType>* Clone() const {
03808 return new Iterator(*this);
03809 }
03810 virtual const ParamType* Current() const { return ¤t_value_; }
03811 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
03812
03813
03814 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
03815 << "The program attempted to compare iterators "
03816 << "from different generators." << std::endl;
03817 const Iterator* typed_other =
03818 CheckedDowncastToActualType<const Iterator>(&other);
03819
03820
03821
03822 return (AtEnd() && typed_other->AtEnd()) ||
03823 (
03824 current1_ == typed_other->current1_ &&
03825 current2_ == typed_other->current2_ &&
03826 current3_ == typed_other->current3_ &&
03827 current4_ == typed_other->current4_ &&
03828 current5_ == typed_other->current5_ &&
03829 current6_ == typed_other->current6_);
03830 }
03831
03832 private:
03833 Iterator(const Iterator& other)
03834 : base_(other.base_),
03835 begin1_(other.begin1_),
03836 end1_(other.end1_),
03837 current1_(other.current1_),
03838 begin2_(other.begin2_),
03839 end2_(other.end2_),
03840 current2_(other.current2_),
03841 begin3_(other.begin3_),
03842 end3_(other.end3_),
03843 current3_(other.current3_),
03844 begin4_(other.begin4_),
03845 end4_(other.end4_),
03846 current4_(other.current4_),
03847 begin5_(other.begin5_),
03848 end5_(other.end5_),
03849 current5_(other.current5_),
03850 begin6_(other.begin6_),
03851 end6_(other.end6_),
03852 current6_(other.current6_) {
03853 ComputeCurrentValue();
03854 }
03855
03856 void ComputeCurrentValue() {
03857 if (!AtEnd())
03858 current_value_ = ParamType(*current1_, *current2_, *current3_,
03859 *current4_, *current5_, *current6_);
03860 }
03861 bool AtEnd() const {
03862
03863
03864 return
03865 current1_ == end1_ ||
03866 current2_ == end2_ ||
03867 current3_ == end3_ ||
03868 current4_ == end4_ ||
03869 current5_ == end5_ ||
03870 current6_ == end6_;
03871 }
03872
03873
03874 void operator=(const Iterator& other);
03875
03876 const ParamGeneratorInterface<ParamType>* const base_;
03877
03878
03879 const typename ParamGenerator<T1>::iterator begin1_;
03880 const typename ParamGenerator<T1>::iterator end1_;
03881 typename ParamGenerator<T1>::iterator current1_;
03882 const typename ParamGenerator<T2>::iterator begin2_;
03883 const typename ParamGenerator<T2>::iterator end2_;
03884 typename ParamGenerator<T2>::iterator current2_;
03885 const typename ParamGenerator<T3>::iterator begin3_;
03886 const typename ParamGenerator<T3>::iterator end3_;
03887 typename ParamGenerator<T3>::iterator current3_;
03888 const typename ParamGenerator<T4>::iterator begin4_;
03889 const typename ParamGenerator<T4>::iterator end4_;
03890 typename ParamGenerator<T4>::iterator current4_;
03891 const typename ParamGenerator<T5>::iterator begin5_;
03892 const typename ParamGenerator<T5>::iterator end5_;
03893 typename ParamGenerator<T5>::iterator current5_;
03894 const typename ParamGenerator<T6>::iterator begin6_;
03895 const typename ParamGenerator<T6>::iterator end6_;
03896 typename ParamGenerator<T6>::iterator current6_;
03897 ParamType current_value_;
03898 };
03899
03900
03901 void operator=(const CartesianProductGenerator6& other);
03902
03903 const ParamGenerator<T1> g1_;
03904 const ParamGenerator<T2> g2_;
03905 const ParamGenerator<T3> g3_;
03906 const ParamGenerator<T4> g4_;
03907 const ParamGenerator<T5> g5_;
03908 const ParamGenerator<T6> g6_;
03909 };
03910
03911
03912 template <typename T1, typename T2, typename T3, typename T4, typename T5,
03913 typename T6, typename T7>
03914 class CartesianProductGenerator7
03915 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
03916 T7> > {
03917 public:
03918 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
03919
03920 CartesianProductGenerator7(const ParamGenerator<T1>& g1,
03921 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
03922 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
03923 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
03924 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
03925 virtual ~CartesianProductGenerator7() {}
03926
03927 virtual ParamIteratorInterface<ParamType>* Begin() const {
03928 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
03929 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
03930 g7_.begin());
03931 }
03932 virtual ParamIteratorInterface<ParamType>* End() const {
03933 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
03934 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
03935 }
03936
03937 private:
03938 class Iterator : public ParamIteratorInterface<ParamType> {
03939 public:
03940 Iterator(const ParamGeneratorInterface<ParamType>* base,
03941 const ParamGenerator<T1>& g1,
03942 const typename ParamGenerator<T1>::iterator& current1,
03943 const ParamGenerator<T2>& g2,
03944 const typename ParamGenerator<T2>::iterator& current2,
03945 const ParamGenerator<T3>& g3,
03946 const typename ParamGenerator<T3>::iterator& current3,
03947 const ParamGenerator<T4>& g4,
03948 const typename ParamGenerator<T4>::iterator& current4,
03949 const ParamGenerator<T5>& g5,
03950 const typename ParamGenerator<T5>::iterator& current5,
03951 const ParamGenerator<T6>& g6,
03952 const typename ParamGenerator<T6>::iterator& current6,
03953 const ParamGenerator<T7>& g7,
03954 const typename ParamGenerator<T7>::iterator& current7)
03955 : base_(base),
03956 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
03957 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
03958 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
03959 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
03960 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
03961 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
03962 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
03963 ComputeCurrentValue();
03964 }
03965 virtual ~Iterator() {}
03966
03967 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
03968 return base_;
03969 }
03970
03971
03972 virtual void Advance() {
03973 assert(!AtEnd());
03974 ++current7_;
03975 if (current7_ == end7_) {
03976 current7_ = begin7_;
03977 ++current6_;
03978 }
03979 if (current6_ == end6_) {
03980 current6_ = begin6_;
03981 ++current5_;
03982 }
03983 if (current5_ == end5_) {
03984 current5_ = begin5_;
03985 ++current4_;
03986 }
03987 if (current4_ == end4_) {
03988 current4_ = begin4_;
03989 ++current3_;
03990 }
03991 if (current3_ == end3_) {
03992 current3_ = begin3_;
03993 ++current2_;
03994 }
03995 if (current2_ == end2_) {
03996 current2_ = begin2_;
03997 ++current1_;
03998 }
03999 ComputeCurrentValue();
04000 }
04001 virtual ParamIteratorInterface<ParamType>* Clone() const {
04002 return new Iterator(*this);
04003 }
04004 virtual const ParamType* Current() const { return ¤t_value_; }
04005 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
04006
04007
04008 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
04009 << "The program attempted to compare iterators "
04010 << "from different generators." << std::endl;
04011 const Iterator* typed_other =
04012 CheckedDowncastToActualType<const Iterator>(&other);
04013
04014
04015
04016 return (AtEnd() && typed_other->AtEnd()) ||
04017 (
04018 current1_ == typed_other->current1_ &&
04019 current2_ == typed_other->current2_ &&
04020 current3_ == typed_other->current3_ &&
04021 current4_ == typed_other->current4_ &&
04022 current5_ == typed_other->current5_ &&
04023 current6_ == typed_other->current6_ &&
04024 current7_ == typed_other->current7_);
04025 }
04026
04027 private:
04028 Iterator(const Iterator& other)
04029 : base_(other.base_),
04030 begin1_(other.begin1_),
04031 end1_(other.end1_),
04032 current1_(other.current1_),
04033 begin2_(other.begin2_),
04034 end2_(other.end2_),
04035 current2_(other.current2_),
04036 begin3_(other.begin3_),
04037 end3_(other.end3_),
04038 current3_(other.current3_),
04039 begin4_(other.begin4_),
04040 end4_(other.end4_),
04041 current4_(other.current4_),
04042 begin5_(other.begin5_),
04043 end5_(other.end5_),
04044 current5_(other.current5_),
04045 begin6_(other.begin6_),
04046 end6_(other.end6_),
04047 current6_(other.current6_),
04048 begin7_(other.begin7_),
04049 end7_(other.end7_),
04050 current7_(other.current7_) {
04051 ComputeCurrentValue();
04052 }
04053
04054 void ComputeCurrentValue() {
04055 if (!AtEnd())
04056 current_value_ = ParamType(*current1_, *current2_, *current3_,
04057 *current4_, *current5_, *current6_, *current7_);
04058 }
04059 bool AtEnd() const {
04060
04061
04062 return
04063 current1_ == end1_ ||
04064 current2_ == end2_ ||
04065 current3_ == end3_ ||
04066 current4_ == end4_ ||
04067 current5_ == end5_ ||
04068 current6_ == end6_ ||
04069 current7_ == end7_;
04070 }
04071
04072
04073 void operator=(const Iterator& other);
04074
04075 const ParamGeneratorInterface<ParamType>* const base_;
04076
04077
04078 const typename ParamGenerator<T1>::iterator begin1_;
04079 const typename ParamGenerator<T1>::iterator end1_;
04080 typename ParamGenerator<T1>::iterator current1_;
04081 const typename ParamGenerator<T2>::iterator begin2_;
04082 const typename ParamGenerator<T2>::iterator end2_;
04083 typename ParamGenerator<T2>::iterator current2_;
04084 const typename ParamGenerator<T3>::iterator begin3_;
04085 const typename ParamGenerator<T3>::iterator end3_;
04086 typename ParamGenerator<T3>::iterator current3_;
04087 const typename ParamGenerator<T4>::iterator begin4_;
04088 const typename ParamGenerator<T4>::iterator end4_;
04089 typename ParamGenerator<T4>::iterator current4_;
04090 const typename ParamGenerator<T5>::iterator begin5_;
04091 const typename ParamGenerator<T5>::iterator end5_;
04092 typename ParamGenerator<T5>::iterator current5_;
04093 const typename ParamGenerator<T6>::iterator begin6_;
04094 const typename ParamGenerator<T6>::iterator end6_;
04095 typename ParamGenerator<T6>::iterator current6_;
04096 const typename ParamGenerator<T7>::iterator begin7_;
04097 const typename ParamGenerator<T7>::iterator end7_;
04098 typename ParamGenerator<T7>::iterator current7_;
04099 ParamType current_value_;
04100 };
04101
04102
04103 void operator=(const CartesianProductGenerator7& other);
04104
04105 const ParamGenerator<T1> g1_;
04106 const ParamGenerator<T2> g2_;
04107 const ParamGenerator<T3> g3_;
04108 const ParamGenerator<T4> g4_;
04109 const ParamGenerator<T5> g5_;
04110 const ParamGenerator<T6> g6_;
04111 const ParamGenerator<T7> g7_;
04112 };
04113
04114
04115 template <typename T1, typename T2, typename T3, typename T4, typename T5,
04116 typename T6, typename T7, typename T8>
04117 class CartesianProductGenerator8
04118 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
04119 T7, T8> > {
04120 public:
04121 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
04122
04123 CartesianProductGenerator8(const ParamGenerator<T1>& g1,
04124 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
04125 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
04126 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
04127 const ParamGenerator<T8>& g8)
04128 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
04129 g8_(g8) {}
04130 virtual ~CartesianProductGenerator8() {}
04131
04132 virtual ParamIteratorInterface<ParamType>* Begin() const {
04133 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
04134 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
04135 g7_.begin(), g8_, g8_.begin());
04136 }
04137 virtual ParamIteratorInterface<ParamType>* End() const {
04138 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
04139 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
04140 g8_.end());
04141 }
04142
04143 private:
04144 class Iterator : public ParamIteratorInterface<ParamType> {
04145 public:
04146 Iterator(const ParamGeneratorInterface<ParamType>* base,
04147 const ParamGenerator<T1>& g1,
04148 const typename ParamGenerator<T1>::iterator& current1,
04149 const ParamGenerator<T2>& g2,
04150 const typename ParamGenerator<T2>::iterator& current2,
04151 const ParamGenerator<T3>& g3,
04152 const typename ParamGenerator<T3>::iterator& current3,
04153 const ParamGenerator<T4>& g4,
04154 const typename ParamGenerator<T4>::iterator& current4,
04155 const ParamGenerator<T5>& g5,
04156 const typename ParamGenerator<T5>::iterator& current5,
04157 const ParamGenerator<T6>& g6,
04158 const typename ParamGenerator<T6>::iterator& current6,
04159 const ParamGenerator<T7>& g7,
04160 const typename ParamGenerator<T7>::iterator& current7,
04161 const ParamGenerator<T8>& g8,
04162 const typename ParamGenerator<T8>::iterator& current8)
04163 : base_(base),
04164 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
04165 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
04166 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
04167 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
04168 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
04169 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
04170 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
04171 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
04172 ComputeCurrentValue();
04173 }
04174 virtual ~Iterator() {}
04175
04176 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
04177 return base_;
04178 }
04179
04180
04181 virtual void Advance() {
04182 assert(!AtEnd());
04183 ++current8_;
04184 if (current8_ == end8_) {
04185 current8_ = begin8_;
04186 ++current7_;
04187 }
04188 if (current7_ == end7_) {
04189 current7_ = begin7_;
04190 ++current6_;
04191 }
04192 if (current6_ == end6_) {
04193 current6_ = begin6_;
04194 ++current5_;
04195 }
04196 if (current5_ == end5_) {
04197 current5_ = begin5_;
04198 ++current4_;
04199 }
04200 if (current4_ == end4_) {
04201 current4_ = begin4_;
04202 ++current3_;
04203 }
04204 if (current3_ == end3_) {
04205 current3_ = begin3_;
04206 ++current2_;
04207 }
04208 if (current2_ == end2_) {
04209 current2_ = begin2_;
04210 ++current1_;
04211 }
04212 ComputeCurrentValue();
04213 }
04214 virtual ParamIteratorInterface<ParamType>* Clone() const {
04215 return new Iterator(*this);
04216 }
04217 virtual const ParamType* Current() const { return ¤t_value_; }
04218 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
04219
04220
04221 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
04222 << "The program attempted to compare iterators "
04223 << "from different generators." << std::endl;
04224 const Iterator* typed_other =
04225 CheckedDowncastToActualType<const Iterator>(&other);
04226
04227
04228
04229 return (AtEnd() && typed_other->AtEnd()) ||
04230 (
04231 current1_ == typed_other->current1_ &&
04232 current2_ == typed_other->current2_ &&
04233 current3_ == typed_other->current3_ &&
04234 current4_ == typed_other->current4_ &&
04235 current5_ == typed_other->current5_ &&
04236 current6_ == typed_other->current6_ &&
04237 current7_ == typed_other->current7_ &&
04238 current8_ == typed_other->current8_);
04239 }
04240
04241 private:
04242 Iterator(const Iterator& other)
04243 : base_(other.base_),
04244 begin1_(other.begin1_),
04245 end1_(other.end1_),
04246 current1_(other.current1_),
04247 begin2_(other.begin2_),
04248 end2_(other.end2_),
04249 current2_(other.current2_),
04250 begin3_(other.begin3_),
04251 end3_(other.end3_),
04252 current3_(other.current3_),
04253 begin4_(other.begin4_),
04254 end4_(other.end4_),
04255 current4_(other.current4_),
04256 begin5_(other.begin5_),
04257 end5_(other.end5_),
04258 current5_(other.current5_),
04259 begin6_(other.begin6_),
04260 end6_(other.end6_),
04261 current6_(other.current6_),
04262 begin7_(other.begin7_),
04263 end7_(other.end7_),
04264 current7_(other.current7_),
04265 begin8_(other.begin8_),
04266 end8_(other.end8_),
04267 current8_(other.current8_) {
04268 ComputeCurrentValue();
04269 }
04270
04271 void ComputeCurrentValue() {
04272 if (!AtEnd())
04273 current_value_ = ParamType(*current1_, *current2_, *current3_,
04274 *current4_, *current5_, *current6_, *current7_, *current8_);
04275 }
04276 bool AtEnd() const {
04277
04278
04279 return
04280 current1_ == end1_ ||
04281 current2_ == end2_ ||
04282 current3_ == end3_ ||
04283 current4_ == end4_ ||
04284 current5_ == end5_ ||
04285 current6_ == end6_ ||
04286 current7_ == end7_ ||
04287 current8_ == end8_;
04288 }
04289
04290
04291 void operator=(const Iterator& other);
04292
04293 const ParamGeneratorInterface<ParamType>* const base_;
04294
04295
04296 const typename ParamGenerator<T1>::iterator begin1_;
04297 const typename ParamGenerator<T1>::iterator end1_;
04298 typename ParamGenerator<T1>::iterator current1_;
04299 const typename ParamGenerator<T2>::iterator begin2_;
04300 const typename ParamGenerator<T2>::iterator end2_;
04301 typename ParamGenerator<T2>::iterator current2_;
04302 const typename ParamGenerator<T3>::iterator begin3_;
04303 const typename ParamGenerator<T3>::iterator end3_;
04304 typename ParamGenerator<T3>::iterator current3_;
04305 const typename ParamGenerator<T4>::iterator begin4_;
04306 const typename ParamGenerator<T4>::iterator end4_;
04307 typename ParamGenerator<T4>::iterator current4_;
04308 const typename ParamGenerator<T5>::iterator begin5_;
04309 const typename ParamGenerator<T5>::iterator end5_;
04310 typename ParamGenerator<T5>::iterator current5_;
04311 const typename ParamGenerator<T6>::iterator begin6_;
04312 const typename ParamGenerator<T6>::iterator end6_;
04313 typename ParamGenerator<T6>::iterator current6_;
04314 const typename ParamGenerator<T7>::iterator begin7_;
04315 const typename ParamGenerator<T7>::iterator end7_;
04316 typename ParamGenerator<T7>::iterator current7_;
04317 const typename ParamGenerator<T8>::iterator begin8_;
04318 const typename ParamGenerator<T8>::iterator end8_;
04319 typename ParamGenerator<T8>::iterator current8_;
04320 ParamType current_value_;
04321 };
04322
04323
04324 void operator=(const CartesianProductGenerator8& other);
04325
04326 const ParamGenerator<T1> g1_;
04327 const ParamGenerator<T2> g2_;
04328 const ParamGenerator<T3> g3_;
04329 const ParamGenerator<T4> g4_;
04330 const ParamGenerator<T5> g5_;
04331 const ParamGenerator<T6> g6_;
04332 const ParamGenerator<T7> g7_;
04333 const ParamGenerator<T8> g8_;
04334 };
04335
04336
04337 template <typename T1, typename T2, typename T3, typename T4, typename T5,
04338 typename T6, typename T7, typename T8, typename T9>
04339 class CartesianProductGenerator9
04340 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
04341 T7, T8, T9> > {
04342 public:
04343 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
04344
04345 CartesianProductGenerator9(const ParamGenerator<T1>& g1,
04346 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
04347 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
04348 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
04349 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
04350 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
04351 g9_(g9) {}
04352 virtual ~CartesianProductGenerator9() {}
04353
04354 virtual ParamIteratorInterface<ParamType>* Begin() const {
04355 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
04356 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
04357 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
04358 }
04359 virtual ParamIteratorInterface<ParamType>* End() const {
04360 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
04361 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
04362 g8_.end(), g9_, g9_.end());
04363 }
04364
04365 private:
04366 class Iterator : public ParamIteratorInterface<ParamType> {
04367 public:
04368 Iterator(const ParamGeneratorInterface<ParamType>* base,
04369 const ParamGenerator<T1>& g1,
04370 const typename ParamGenerator<T1>::iterator& current1,
04371 const ParamGenerator<T2>& g2,
04372 const typename ParamGenerator<T2>::iterator& current2,
04373 const ParamGenerator<T3>& g3,
04374 const typename ParamGenerator<T3>::iterator& current3,
04375 const ParamGenerator<T4>& g4,
04376 const typename ParamGenerator<T4>::iterator& current4,
04377 const ParamGenerator<T5>& g5,
04378 const typename ParamGenerator<T5>::iterator& current5,
04379 const ParamGenerator<T6>& g6,
04380 const typename ParamGenerator<T6>::iterator& current6,
04381 const ParamGenerator<T7>& g7,
04382 const typename ParamGenerator<T7>::iterator& current7,
04383 const ParamGenerator<T8>& g8,
04384 const typename ParamGenerator<T8>::iterator& current8,
04385 const ParamGenerator<T9>& g9,
04386 const typename ParamGenerator<T9>::iterator& current9)
04387 : base_(base),
04388 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
04389 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
04390 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
04391 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
04392 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
04393 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
04394 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
04395 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
04396 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
04397 ComputeCurrentValue();
04398 }
04399 virtual ~Iterator() {}
04400
04401 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
04402 return base_;
04403 }
04404
04405
04406 virtual void Advance() {
04407 assert(!AtEnd());
04408 ++current9_;
04409 if (current9_ == end9_) {
04410 current9_ = begin9_;
04411 ++current8_;
04412 }
04413 if (current8_ == end8_) {
04414 current8_ = begin8_;
04415 ++current7_;
04416 }
04417 if (current7_ == end7_) {
04418 current7_ = begin7_;
04419 ++current6_;
04420 }
04421 if (current6_ == end6_) {
04422 current6_ = begin6_;
04423 ++current5_;
04424 }
04425 if (current5_ == end5_) {
04426 current5_ = begin5_;
04427 ++current4_;
04428 }
04429 if (current4_ == end4_) {
04430 current4_ = begin4_;
04431 ++current3_;
04432 }
04433 if (current3_ == end3_) {
04434 current3_ = begin3_;
04435 ++current2_;
04436 }
04437 if (current2_ == end2_) {
04438 current2_ = begin2_;
04439 ++current1_;
04440 }
04441 ComputeCurrentValue();
04442 }
04443 virtual ParamIteratorInterface<ParamType>* Clone() const {
04444 return new Iterator(*this);
04445 }
04446 virtual const ParamType* Current() const { return ¤t_value_; }
04447 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
04448
04449
04450 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
04451 << "The program attempted to compare iterators "
04452 << "from different generators." << std::endl;
04453 const Iterator* typed_other =
04454 CheckedDowncastToActualType<const Iterator>(&other);
04455
04456
04457
04458 return (AtEnd() && typed_other->AtEnd()) ||
04459 (
04460 current1_ == typed_other->current1_ &&
04461 current2_ == typed_other->current2_ &&
04462 current3_ == typed_other->current3_ &&
04463 current4_ == typed_other->current4_ &&
04464 current5_ == typed_other->current5_ &&
04465 current6_ == typed_other->current6_ &&
04466 current7_ == typed_other->current7_ &&
04467 current8_ == typed_other->current8_ &&
04468 current9_ == typed_other->current9_);
04469 }
04470
04471 private:
04472 Iterator(const Iterator& other)
04473 : base_(other.base_),
04474 begin1_(other.begin1_),
04475 end1_(other.end1_),
04476 current1_(other.current1_),
04477 begin2_(other.begin2_),
04478 end2_(other.end2_),
04479 current2_(other.current2_),
04480 begin3_(other.begin3_),
04481 end3_(other.end3_),
04482 current3_(other.current3_),
04483 begin4_(other.begin4_),
04484 end4_(other.end4_),
04485 current4_(other.current4_),
04486 begin5_(other.begin5_),
04487 end5_(other.end5_),
04488 current5_(other.current5_),
04489 begin6_(other.begin6_),
04490 end6_(other.end6_),
04491 current6_(other.current6_),
04492 begin7_(other.begin7_),
04493 end7_(other.end7_),
04494 current7_(other.current7_),
04495 begin8_(other.begin8_),
04496 end8_(other.end8_),
04497 current8_(other.current8_),
04498 begin9_(other.begin9_),
04499 end9_(other.end9_),
04500 current9_(other.current9_) {
04501 ComputeCurrentValue();
04502 }
04503
04504 void ComputeCurrentValue() {
04505 if (!AtEnd())
04506 current_value_ = ParamType(*current1_, *current2_, *current3_,
04507 *current4_, *current5_, *current6_, *current7_, *current8_,
04508 *current9_);
04509 }
04510 bool AtEnd() const {
04511
04512
04513 return
04514 current1_ == end1_ ||
04515 current2_ == end2_ ||
04516 current3_ == end3_ ||
04517 current4_ == end4_ ||
04518 current5_ == end5_ ||
04519 current6_ == end6_ ||
04520 current7_ == end7_ ||
04521 current8_ == end8_ ||
04522 current9_ == end9_;
04523 }
04524
04525
04526 void operator=(const Iterator& other);
04527
04528 const ParamGeneratorInterface<ParamType>* const base_;
04529
04530
04531 const typename ParamGenerator<T1>::iterator begin1_;
04532 const typename ParamGenerator<T1>::iterator end1_;
04533 typename ParamGenerator<T1>::iterator current1_;
04534 const typename ParamGenerator<T2>::iterator begin2_;
04535 const typename ParamGenerator<T2>::iterator end2_;
04536 typename ParamGenerator<T2>::iterator current2_;
04537 const typename ParamGenerator<T3>::iterator begin3_;
04538 const typename ParamGenerator<T3>::iterator end3_;
04539 typename ParamGenerator<T3>::iterator current3_;
04540 const typename ParamGenerator<T4>::iterator begin4_;
04541 const typename ParamGenerator<T4>::iterator end4_;
04542 typename ParamGenerator<T4>::iterator current4_;
04543 const typename ParamGenerator<T5>::iterator begin5_;
04544 const typename ParamGenerator<T5>::iterator end5_;
04545 typename ParamGenerator<T5>::iterator current5_;
04546 const typename ParamGenerator<T6>::iterator begin6_;
04547 const typename ParamGenerator<T6>::iterator end6_;
04548 typename ParamGenerator<T6>::iterator current6_;
04549 const typename ParamGenerator<T7>::iterator begin7_;
04550 const typename ParamGenerator<T7>::iterator end7_;
04551 typename ParamGenerator<T7>::iterator current7_;
04552 const typename ParamGenerator<T8>::iterator begin8_;
04553 const typename ParamGenerator<T8>::iterator end8_;
04554 typename ParamGenerator<T8>::iterator current8_;
04555 const typename ParamGenerator<T9>::iterator begin9_;
04556 const typename ParamGenerator<T9>::iterator end9_;
04557 typename ParamGenerator<T9>::iterator current9_;
04558 ParamType current_value_;
04559 };
04560
04561
04562 void operator=(const CartesianProductGenerator9& other);
04563
04564 const ParamGenerator<T1> g1_;
04565 const ParamGenerator<T2> g2_;
04566 const ParamGenerator<T3> g3_;
04567 const ParamGenerator<T4> g4_;
04568 const ParamGenerator<T5> g5_;
04569 const ParamGenerator<T6> g6_;
04570 const ParamGenerator<T7> g7_;
04571 const ParamGenerator<T8> g8_;
04572 const ParamGenerator<T9> g9_;
04573 };
04574
04575
04576 template <typename T1, typename T2, typename T3, typename T4, typename T5,
04577 typename T6, typename T7, typename T8, typename T9, typename T10>
04578 class CartesianProductGenerator10
04579 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
04580 T7, T8, T9, T10> > {
04581 public:
04582 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
04583
04584 CartesianProductGenerator10(const ParamGenerator<T1>& g1,
04585 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
04586 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
04587 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
04588 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
04589 const ParamGenerator<T10>& g10)
04590 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
04591 g9_(g9), g10_(g10) {}
04592 virtual ~CartesianProductGenerator10() {}
04593
04594 virtual ParamIteratorInterface<ParamType>* Begin() const {
04595 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
04596 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
04597 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
04598 }
04599 virtual ParamIteratorInterface<ParamType>* End() const {
04600 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
04601 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
04602 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
04603 }
04604
04605 private:
04606 class Iterator : public ParamIteratorInterface<ParamType> {
04607 public:
04608 Iterator(const ParamGeneratorInterface<ParamType>* base,
04609 const ParamGenerator<T1>& g1,
04610 const typename ParamGenerator<T1>::iterator& current1,
04611 const ParamGenerator<T2>& g2,
04612 const typename ParamGenerator<T2>::iterator& current2,
04613 const ParamGenerator<T3>& g3,
04614 const typename ParamGenerator<T3>::iterator& current3,
04615 const ParamGenerator<T4>& g4,
04616 const typename ParamGenerator<T4>::iterator& current4,
04617 const ParamGenerator<T5>& g5,
04618 const typename ParamGenerator<T5>::iterator& current5,
04619 const ParamGenerator<T6>& g6,
04620 const typename ParamGenerator<T6>::iterator& current6,
04621 const ParamGenerator<T7>& g7,
04622 const typename ParamGenerator<T7>::iterator& current7,
04623 const ParamGenerator<T8>& g8,
04624 const typename ParamGenerator<T8>::iterator& current8,
04625 const ParamGenerator<T9>& g9,
04626 const typename ParamGenerator<T9>::iterator& current9,
04627 const ParamGenerator<T10>& g10,
04628 const typename ParamGenerator<T10>::iterator& current10)
04629 : base_(base),
04630 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
04631 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
04632 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
04633 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
04634 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
04635 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
04636 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
04637 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
04638 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
04639 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
04640 ComputeCurrentValue();
04641 }
04642 virtual ~Iterator() {}
04643
04644 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
04645 return base_;
04646 }
04647
04648
04649 virtual void Advance() {
04650 assert(!AtEnd());
04651 ++current10_;
04652 if (current10_ == end10_) {
04653 current10_ = begin10_;
04654 ++current9_;
04655 }
04656 if (current9_ == end9_) {
04657 current9_ = begin9_;
04658 ++current8_;
04659 }
04660 if (current8_ == end8_) {
04661 current8_ = begin8_;
04662 ++current7_;
04663 }
04664 if (current7_ == end7_) {
04665 current7_ = begin7_;
04666 ++current6_;
04667 }
04668 if (current6_ == end6_) {
04669 current6_ = begin6_;
04670 ++current5_;
04671 }
04672 if (current5_ == end5_) {
04673 current5_ = begin5_;
04674 ++current4_;
04675 }
04676 if (current4_ == end4_) {
04677 current4_ = begin4_;
04678 ++current3_;
04679 }
04680 if (current3_ == end3_) {
04681 current3_ = begin3_;
04682 ++current2_;
04683 }
04684 if (current2_ == end2_) {
04685 current2_ = begin2_;
04686 ++current1_;
04687 }
04688 ComputeCurrentValue();
04689 }
04690 virtual ParamIteratorInterface<ParamType>* Clone() const {
04691 return new Iterator(*this);
04692 }
04693 virtual const ParamType* Current() const { return ¤t_value_; }
04694 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
04695
04696
04697 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
04698 << "The program attempted to compare iterators "
04699 << "from different generators." << std::endl;
04700 const Iterator* typed_other =
04701 CheckedDowncastToActualType<const Iterator>(&other);
04702
04703
04704
04705 return (AtEnd() && typed_other->AtEnd()) ||
04706 (
04707 current1_ == typed_other->current1_ &&
04708 current2_ == typed_other->current2_ &&
04709 current3_ == typed_other->current3_ &&
04710 current4_ == typed_other->current4_ &&
04711 current5_ == typed_other->current5_ &&
04712 current6_ == typed_other->current6_ &&
04713 current7_ == typed_other->current7_ &&
04714 current8_ == typed_other->current8_ &&
04715 current9_ == typed_other->current9_ &&
04716 current10_ == typed_other->current10_);
04717 }
04718
04719 private:
04720 Iterator(const Iterator& other)
04721 : base_(other.base_),
04722 begin1_(other.begin1_),
04723 end1_(other.end1_),
04724 current1_(other.current1_),
04725 begin2_(other.begin2_),
04726 end2_(other.end2_),
04727 current2_(other.current2_),
04728 begin3_(other.begin3_),
04729 end3_(other.end3_),
04730 current3_(other.current3_),
04731 begin4_(other.begin4_),
04732 end4_(other.end4_),
04733 current4_(other.current4_),
04734 begin5_(other.begin5_),
04735 end5_(other.end5_),
04736 current5_(other.current5_),
04737 begin6_(other.begin6_),
04738 end6_(other.end6_),
04739 current6_(other.current6_),
04740 begin7_(other.begin7_),
04741 end7_(other.end7_),
04742 current7_(other.current7_),
04743 begin8_(other.begin8_),
04744 end8_(other.end8_),
04745 current8_(other.current8_),
04746 begin9_(other.begin9_),
04747 end9_(other.end9_),
04748 current9_(other.current9_),
04749 begin10_(other.begin10_),
04750 end10_(other.end10_),
04751 current10_(other.current10_) {
04752 ComputeCurrentValue();
04753 }
04754
04755 void ComputeCurrentValue() {
04756 if (!AtEnd())
04757 current_value_ = ParamType(*current1_, *current2_, *current3_,
04758 *current4_, *current5_, *current6_, *current7_, *current8_,
04759 *current9_, *current10_);
04760 }
04761 bool AtEnd() const {
04762
04763
04764 return
04765 current1_ == end1_ ||
04766 current2_ == end2_ ||
04767 current3_ == end3_ ||
04768 current4_ == end4_ ||
04769 current5_ == end5_ ||
04770 current6_ == end6_ ||
04771 current7_ == end7_ ||
04772 current8_ == end8_ ||
04773 current9_ == end9_ ||
04774 current10_ == end10_;
04775 }
04776
04777
04778 void operator=(const Iterator& other);
04779
04780 const ParamGeneratorInterface<ParamType>* const base_;
04781
04782
04783 const typename ParamGenerator<T1>::iterator begin1_;
04784 const typename ParamGenerator<T1>::iterator end1_;
04785 typename ParamGenerator<T1>::iterator current1_;
04786 const typename ParamGenerator<T2>::iterator begin2_;
04787 const typename ParamGenerator<T2>::iterator end2_;
04788 typename ParamGenerator<T2>::iterator current2_;
04789 const typename ParamGenerator<T3>::iterator begin3_;
04790 const typename ParamGenerator<T3>::iterator end3_;
04791 typename ParamGenerator<T3>::iterator current3_;
04792 const typename ParamGenerator<T4>::iterator begin4_;
04793 const typename ParamGenerator<T4>::iterator end4_;
04794 typename ParamGenerator<T4>::iterator current4_;
04795 const typename ParamGenerator<T5>::iterator begin5_;
04796 const typename ParamGenerator<T5>::iterator end5_;
04797 typename ParamGenerator<T5>::iterator current5_;
04798 const typename ParamGenerator<T6>::iterator begin6_;
04799 const typename ParamGenerator<T6>::iterator end6_;
04800 typename ParamGenerator<T6>::iterator current6_;
04801 const typename ParamGenerator<T7>::iterator begin7_;
04802 const typename ParamGenerator<T7>::iterator end7_;
04803 typename ParamGenerator<T7>::iterator current7_;
04804 const typename ParamGenerator<T8>::iterator begin8_;
04805 const typename ParamGenerator<T8>::iterator end8_;
04806 typename ParamGenerator<T8>::iterator current8_;
04807 const typename ParamGenerator<T9>::iterator begin9_;
04808 const typename ParamGenerator<T9>::iterator end9_;
04809 typename ParamGenerator<T9>::iterator current9_;
04810 const typename ParamGenerator<T10>::iterator begin10_;
04811 const typename ParamGenerator<T10>::iterator end10_;
04812 typename ParamGenerator<T10>::iterator current10_;
04813 ParamType current_value_;
04814 };
04815
04816
04817 void operator=(const CartesianProductGenerator10& other);
04818
04819 const ParamGenerator<T1> g1_;
04820 const ParamGenerator<T2> g2_;
04821 const ParamGenerator<T3> g3_;
04822 const ParamGenerator<T4> g4_;
04823 const ParamGenerator<T5> g5_;
04824 const ParamGenerator<T6> g6_;
04825 const ParamGenerator<T7> g7_;
04826 const ParamGenerator<T8> g8_;
04827 const ParamGenerator<T9> g9_;
04828 const ParamGenerator<T10> g10_;
04829 };
04830
04831
04832
04833
04834
04835
04836
04837
04838 template <class Generator1, class Generator2>
04839 class CartesianProductHolder2 {
04840 public:
04841 CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
04842 : g1_(g1), g2_(g2) {}
04843 template <typename T1, typename T2>
04844 operator ParamGenerator< ::testing::tuple<T1, T2> >() const {
04845 return ParamGenerator< ::testing::tuple<T1, T2> >(
04846 new CartesianProductGenerator2<T1, T2>(
04847 static_cast<ParamGenerator<T1> >(g1_),
04848 static_cast<ParamGenerator<T2> >(g2_)));
04849 }
04850
04851 private:
04852
04853 void operator=(const CartesianProductHolder2& other);
04854
04855 const Generator1 g1_;
04856 const Generator2 g2_;
04857 };
04858
04859 template <class Generator1, class Generator2, class Generator3>
04860 class CartesianProductHolder3 {
04861 public:
04862 CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
04863 const Generator3& g3)
04864 : g1_(g1), g2_(g2), g3_(g3) {}
04865 template <typename T1, typename T2, typename T3>
04866 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const {
04867 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
04868 new CartesianProductGenerator3<T1, T2, T3>(
04869 static_cast<ParamGenerator<T1> >(g1_),
04870 static_cast<ParamGenerator<T2> >(g2_),
04871 static_cast<ParamGenerator<T3> >(g3_)));
04872 }
04873
04874 private:
04875
04876 void operator=(const CartesianProductHolder3& other);
04877
04878 const Generator1 g1_;
04879 const Generator2 g2_;
04880 const Generator3 g3_;
04881 };
04882
04883 template <class Generator1, class Generator2, class Generator3,
04884 class Generator4>
04885 class CartesianProductHolder4 {
04886 public:
04887 CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
04888 const Generator3& g3, const Generator4& g4)
04889 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
04890 template <typename T1, typename T2, typename T3, typename T4>
04891 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const {
04892 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
04893 new CartesianProductGenerator4<T1, T2, T3, T4>(
04894 static_cast<ParamGenerator<T1> >(g1_),
04895 static_cast<ParamGenerator<T2> >(g2_),
04896 static_cast<ParamGenerator<T3> >(g3_),
04897 static_cast<ParamGenerator<T4> >(g4_)));
04898 }
04899
04900 private:
04901
04902 void operator=(const CartesianProductHolder4& other);
04903
04904 const Generator1 g1_;
04905 const Generator2 g2_;
04906 const Generator3 g3_;
04907 const Generator4 g4_;
04908 };
04909
04910 template <class Generator1, class Generator2, class Generator3,
04911 class Generator4, class Generator5>
04912 class CartesianProductHolder5 {
04913 public:
04914 CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
04915 const Generator3& g3, const Generator4& g4, const Generator5& g5)
04916 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
04917 template <typename T1, typename T2, typename T3, typename T4, typename T5>
04918 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const {
04919 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
04920 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
04921 static_cast<ParamGenerator<T1> >(g1_),
04922 static_cast<ParamGenerator<T2> >(g2_),
04923 static_cast<ParamGenerator<T3> >(g3_),
04924 static_cast<ParamGenerator<T4> >(g4_),
04925 static_cast<ParamGenerator<T5> >(g5_)));
04926 }
04927
04928 private:
04929
04930 void operator=(const CartesianProductHolder5& other);
04931
04932 const Generator1 g1_;
04933 const Generator2 g2_;
04934 const Generator3 g3_;
04935 const Generator4 g4_;
04936 const Generator5 g5_;
04937 };
04938
04939 template <class Generator1, class Generator2, class Generator3,
04940 class Generator4, class Generator5, class Generator6>
04941 class CartesianProductHolder6 {
04942 public:
04943 CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
04944 const Generator3& g3, const Generator4& g4, const Generator5& g5,
04945 const Generator6& g6)
04946 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
04947 template <typename T1, typename T2, typename T3, typename T4, typename T5,
04948 typename T6>
04949 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const {
04950 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
04951 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
04952 static_cast<ParamGenerator<T1> >(g1_),
04953 static_cast<ParamGenerator<T2> >(g2_),
04954 static_cast<ParamGenerator<T3> >(g3_),
04955 static_cast<ParamGenerator<T4> >(g4_),
04956 static_cast<ParamGenerator<T5> >(g5_),
04957 static_cast<ParamGenerator<T6> >(g6_)));
04958 }
04959
04960 private:
04961
04962 void operator=(const CartesianProductHolder6& other);
04963
04964 const Generator1 g1_;
04965 const Generator2 g2_;
04966 const Generator3 g3_;
04967 const Generator4 g4_;
04968 const Generator5 g5_;
04969 const Generator6 g6_;
04970 };
04971
04972 template <class Generator1, class Generator2, class Generator3,
04973 class Generator4, class Generator5, class Generator6, class Generator7>
04974 class CartesianProductHolder7 {
04975 public:
04976 CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
04977 const Generator3& g3, const Generator4& g4, const Generator5& g5,
04978 const Generator6& g6, const Generator7& g7)
04979 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
04980 template <typename T1, typename T2, typename T3, typename T4, typename T5,
04981 typename T6, typename T7>
04982 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,
04983 T7> >() const {
04984 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
04985 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
04986 static_cast<ParamGenerator<T1> >(g1_),
04987 static_cast<ParamGenerator<T2> >(g2_),
04988 static_cast<ParamGenerator<T3> >(g3_),
04989 static_cast<ParamGenerator<T4> >(g4_),
04990 static_cast<ParamGenerator<T5> >(g5_),
04991 static_cast<ParamGenerator<T6> >(g6_),
04992 static_cast<ParamGenerator<T7> >(g7_)));
04993 }
04994
04995 private:
04996
04997 void operator=(const CartesianProductHolder7& other);
04998
04999 const Generator1 g1_;
05000 const Generator2 g2_;
05001 const Generator3 g3_;
05002 const Generator4 g4_;
05003 const Generator5 g5_;
05004 const Generator6 g6_;
05005 const Generator7 g7_;
05006 };
05007
05008 template <class Generator1, class Generator2, class Generator3,
05009 class Generator4, class Generator5, class Generator6, class Generator7,
05010 class Generator8>
05011 class CartesianProductHolder8 {
05012 public:
05013 CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
05014 const Generator3& g3, const Generator4& g4, const Generator5& g5,
05015 const Generator6& g6, const Generator7& g7, const Generator8& g8)
05016 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
05017 g8_(g8) {}
05018 template <typename T1, typename T2, typename T3, typename T4, typename T5,
05019 typename T6, typename T7, typename T8>
05020 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,
05021 T8> >() const {
05022 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
05023 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
05024 static_cast<ParamGenerator<T1> >(g1_),
05025 static_cast<ParamGenerator<T2> >(g2_),
05026 static_cast<ParamGenerator<T3> >(g3_),
05027 static_cast<ParamGenerator<T4> >(g4_),
05028 static_cast<ParamGenerator<T5> >(g5_),
05029 static_cast<ParamGenerator<T6> >(g6_),
05030 static_cast<ParamGenerator<T7> >(g7_),
05031 static_cast<ParamGenerator<T8> >(g8_)));
05032 }
05033
05034 private:
05035
05036 void operator=(const CartesianProductHolder8& other);
05037
05038 const Generator1 g1_;
05039 const Generator2 g2_;
05040 const Generator3 g3_;
05041 const Generator4 g4_;
05042 const Generator5 g5_;
05043 const Generator6 g6_;
05044 const Generator7 g7_;
05045 const Generator8 g8_;
05046 };
05047
05048 template <class Generator1, class Generator2, class Generator3,
05049 class Generator4, class Generator5, class Generator6, class Generator7,
05050 class Generator8, class Generator9>
05051 class CartesianProductHolder9 {
05052 public:
05053 CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
05054 const Generator3& g3, const Generator4& g4, const Generator5& g5,
05055 const Generator6& g6, const Generator7& g7, const Generator8& g8,
05056 const Generator9& g9)
05057 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
05058 g9_(g9) {}
05059 template <typename T1, typename T2, typename T3, typename T4, typename T5,
05060 typename T6, typename T7, typename T8, typename T9>
05061 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
05062 T9> >() const {
05063 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
05064 T9> >(
05065 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
05066 static_cast<ParamGenerator<T1> >(g1_),
05067 static_cast<ParamGenerator<T2> >(g2_),
05068 static_cast<ParamGenerator<T3> >(g3_),
05069 static_cast<ParamGenerator<T4> >(g4_),
05070 static_cast<ParamGenerator<T5> >(g5_),
05071 static_cast<ParamGenerator<T6> >(g6_),
05072 static_cast<ParamGenerator<T7> >(g7_),
05073 static_cast<ParamGenerator<T8> >(g8_),
05074 static_cast<ParamGenerator<T9> >(g9_)));
05075 }
05076
05077 private:
05078
05079 void operator=(const CartesianProductHolder9& other);
05080
05081 const Generator1 g1_;
05082 const Generator2 g2_;
05083 const Generator3 g3_;
05084 const Generator4 g4_;
05085 const Generator5 g5_;
05086 const Generator6 g6_;
05087 const Generator7 g7_;
05088 const Generator8 g8_;
05089 const Generator9 g9_;
05090 };
05091
05092 template <class Generator1, class Generator2, class Generator3,
05093 class Generator4, class Generator5, class Generator6, class Generator7,
05094 class Generator8, class Generator9, class Generator10>
05095 class CartesianProductHolder10 {
05096 public:
05097 CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
05098 const Generator3& g3, const Generator4& g4, const Generator5& g5,
05099 const Generator6& g6, const Generator7& g7, const Generator8& g8,
05100 const Generator9& g9, const Generator10& g10)
05101 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
05102 g9_(g9), g10_(g10) {}
05103 template <typename T1, typename T2, typename T3, typename T4, typename T5,
05104 typename T6, typename T7, typename T8, typename T9, typename T10>
05105 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
05106 T10> >() const {
05107 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
05108 T10> >(
05109 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
05110 T10>(
05111 static_cast<ParamGenerator<T1> >(g1_),
05112 static_cast<ParamGenerator<T2> >(g2_),
05113 static_cast<ParamGenerator<T3> >(g3_),
05114 static_cast<ParamGenerator<T4> >(g4_),
05115 static_cast<ParamGenerator<T5> >(g5_),
05116 static_cast<ParamGenerator<T6> >(g6_),
05117 static_cast<ParamGenerator<T7> >(g7_),
05118 static_cast<ParamGenerator<T8> >(g8_),
05119 static_cast<ParamGenerator<T9> >(g9_),
05120 static_cast<ParamGenerator<T10> >(g10_)));
05121 }
05122
05123 private:
05124
05125 void operator=(const CartesianProductHolder10& other);
05126
05127 const Generator1 g1_;
05128 const Generator2 g2_;
05129 const Generator3 g3_;
05130 const Generator4 g4_;
05131 const Generator5 g5_;
05132 const Generator6 g6_;
05133 const Generator7 g7_;
05134 const Generator8 g8_;
05135 const Generator9 g9_;
05136 const Generator10 g10_;
05137 };
05138
05139 # endif // GTEST_HAS_COMBINE
05140
05141 }
05142 }
05143
05144 #endif // GTEST_HAS_PARAM_TEST
05145
05146 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_