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