mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 02:32:08 +00:00
4573 lines
156 KiB
C
4573 lines
156 KiB
C
|
// This file was GENERATED by a script. DO NOT EDIT BY HAND!!!
|
||
|
|
||
|
// Copyright 2008 Google Inc.
|
||
|
// All Rights Reserved.
|
||
|
//
|
||
|
// Redistribution and use in source and binary forms, with or without
|
||
|
// modification, are permitted provided that the following conditions are
|
||
|
// met:
|
||
|
//
|
||
|
// * Redistributions of source code must retain the above copyright
|
||
|
// notice, this list of conditions and the following disclaimer.
|
||
|
// * Redistributions in binary form must reproduce the above
|
||
|
// copyright notice, this list of conditions and the following disclaimer
|
||
|
// in the documentation and/or other materials provided with the
|
||
|
// distribution.
|
||
|
// * Neither the name of Google Inc. nor the names of its
|
||
|
// contributors may be used to endorse or promote products derived from
|
||
|
// this software without specific prior written permission.
|
||
|
//
|
||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
//
|
||
|
// Author: vladl@google.com (Vlad Losev)
|
||
|
|
||
|
// Type and function utilities for implementing parameterized tests.
|
||
|
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
|
||
|
//
|
||
|
// Currently Google Test supports at most 50 arguments in Values,
|
||
|
// and at most 10 arguments in Combine. Please contact
|
||
|
// googletestframework@googlegroups.com if you need more.
|
||
|
// Please note that the number of arguments to Combine is limited
|
||
|
// by the maximum arity of the implementation of tr1::tuple which is
|
||
|
// currently set at 10.
|
||
|
|
||
|
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
|
||
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
|
||
|
|
||
|
#include <gtest/internal/gtest-port.h>
|
||
|
|
||
|
#ifdef GTEST_HAS_PARAM_TEST
|
||
|
|
||
|
#include <gtest/internal/gtest-param-util.h>
|
||
|
|
||
|
namespace testing {
|
||
|
namespace internal {
|
||
|
|
||
|
// Used in the Values() function to provide polymorphic capabilities.
|
||
|
template <typename T1>
|
||
|
class ValueArray1 {
|
||
|
public:
|
||
|
explicit ValueArray1(T1 v1) : v1_(v1) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2>
|
||
|
class ValueArray2 {
|
||
|
public:
|
||
|
ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3>
|
||
|
class ValueArray3 {
|
||
|
public:
|
||
|
ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4>
|
||
|
class ValueArray4 {
|
||
|
public:
|
||
|
ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
||
|
class ValueArray5 {
|
||
|
public:
|
||
|
ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6>
|
||
|
class ValueArray6 {
|
||
|
public:
|
||
|
ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7>
|
||
|
class ValueArray7 {
|
||
|
public:
|
||
|
ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8>
|
||
|
class ValueArray8 {
|
||
|
public:
|
||
|
ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
|
||
|
T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9>
|
||
|
class ValueArray9 {
|
||
|
public:
|
||
|
ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
|
||
|
T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10>
|
||
|
class ValueArray10 {
|
||
|
public:
|
||
|
ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11>
|
||
|
class ValueArray11 {
|
||
|
public:
|
||
|
ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
|
||
|
v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12>
|
||
|
class ValueArray12 {
|
||
|
public:
|
||
|
ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
|
||
|
v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13>
|
||
|
class ValueArray13 {
|
||
|
public:
|
||
|
ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
|
||
|
v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
|
||
|
v12_(v12), v13_(v13) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14>
|
||
|
class ValueArray14 {
|
||
|
public:
|
||
|
ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15>
|
||
|
class ValueArray15 {
|
||
|
public:
|
||
|
ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16>
|
||
|
class ValueArray16 {
|
||
|
public:
|
||
|
ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
|
||
|
v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
|
||
|
v16_(v16) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17>
|
||
|
class ValueArray17 {
|
||
|
public:
|
||
|
ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
|
||
|
T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18>
|
||
|
class ValueArray18 {
|
||
|
public:
|
||
|
ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19>
|
||
|
class ValueArray19 {
|
||
|
public:
|
||
|
ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
|
||
|
v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
|
||
|
v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20>
|
||
|
class ValueArray20 {
|
||
|
public:
|
||
|
ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
|
||
|
v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
|
||
|
v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
|
||
|
v19_(v19), v20_(v20) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21>
|
||
|
class ValueArray21 {
|
||
|
public:
|
||
|
ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
|
||
|
v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
|
||
|
v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
|
||
|
v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22>
|
||
|
class ValueArray22 {
|
||
|
public:
|
||
|
ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23>
|
||
|
class ValueArray23 {
|
||
|
public:
|
||
|
ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
|
||
|
v23_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24>
|
||
|
class ValueArray24 {
|
||
|
public:
|
||
|
ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
|
||
|
v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
|
||
|
v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
|
||
|
v22_(v22), v23_(v23), v24_(v24) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25>
|
||
|
class ValueArray25 {
|
||
|
public:
|
||
|
ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
|
||
|
T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26>
|
||
|
class ValueArray26 {
|
||
|
public:
|
||
|
ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27>
|
||
|
class ValueArray27 {
|
||
|
public:
|
||
|
ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
|
||
|
v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
|
||
|
v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
|
||
|
v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
|
||
|
v26_(v26), v27_(v27) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28>
|
||
|
class ValueArray28 {
|
||
|
public:
|
||
|
ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
|
||
|
v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
|
||
|
v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
|
||
|
v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
|
||
|
v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29>
|
||
|
class ValueArray29 {
|
||
|
public:
|
||
|
ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
|
||
|
v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
|
||
|
v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
|
||
|
v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
|
||
|
v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30>
|
||
|
class ValueArray30 {
|
||
|
public:
|
||
|
ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31>
|
||
|
class ValueArray31 {
|
||
|
public:
|
||
|
ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30), v31_(v31) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32>
|
||
|
class ValueArray32 {
|
||
|
public:
|
||
|
ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
|
||
|
v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
|
||
|
v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
|
||
|
v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
|
||
|
v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33>
|
||
|
class ValueArray33 {
|
||
|
public:
|
||
|
ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
|
||
|
T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34>
|
||
|
class ValueArray34 {
|
||
|
public:
|
||
|
ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33), v34_(v34) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35>
|
||
|
class ValueArray35 {
|
||
|
public:
|
||
|
ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
|
||
|
v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
|
||
|
v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
|
||
|
v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
|
||
|
v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
|
||
|
v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
|
||
|
v35_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36>
|
||
|
class ValueArray36 {
|
||
|
public:
|
||
|
ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
|
||
|
v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
|
||
|
v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
|
||
|
v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
|
||
|
v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
|
||
|
v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37>
|
||
|
class ValueArray37 {
|
||
|
public:
|
||
|
ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
|
||
|
v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
|
||
|
v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
|
||
|
v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
|
||
|
v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
|
||
|
v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
|
||
|
v36_(v36), v37_(v37) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38>
|
||
|
class ValueArray38 {
|
||
|
public:
|
||
|
ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
|
||
|
v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39>
|
||
|
class ValueArray39 {
|
||
|
public:
|
||
|
ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
|
||
|
v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40>
|
||
|
class ValueArray40 {
|
||
|
public:
|
||
|
ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
|
||
|
v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
|
||
|
v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
|
||
|
v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
|
||
|
v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
|
||
|
v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
|
||
|
v40_(v40) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41>
|
||
|
class ValueArray41 {
|
||
|
public:
|
||
|
ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
|
||
|
T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
|
||
|
v39_(v39), v40_(v40), v41_(v41) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42>
|
||
|
class ValueArray42 {
|
||
|
public:
|
||
|
ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
|
||
|
v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43>
|
||
|
class ValueArray43 {
|
||
|
public:
|
||
|
ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
|
||
|
v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
|
||
|
v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
|
||
|
v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
|
||
|
v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
|
||
|
v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
|
||
|
v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44>
|
||
|
class ValueArray44 {
|
||
|
public:
|
||
|
ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
|
||
|
v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
|
||
|
v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
|
||
|
v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
|
||
|
v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
|
||
|
v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
|
||
|
v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
|
||
|
v43_(v43), v44_(v44) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45>
|
||
|
class ValueArray45 {
|
||
|
public:
|
||
|
ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
|
||
|
v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
|
||
|
v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
|
||
|
v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
|
||
|
v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
|
||
|
v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
|
||
|
v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
|
||
|
v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45,
|
||
|
typename T46>
|
||
|
class ValueArray46 {
|
||
|
public:
|
||
|
ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
|
||
|
v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
|
||
|
v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
|
||
|
v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
const T46 v46_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45,
|
||
|
typename T46, typename T47>
|
||
|
class ValueArray47 {
|
||
|
public:
|
||
|
ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
|
||
|
v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
|
||
|
v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
|
||
|
v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
|
||
|
v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
|
||
|
v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
|
||
|
v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
|
||
|
v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
|
||
|
v47_(v47) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
|
||
|
v47_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
const T46 v46_;
|
||
|
const T47 v47_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45,
|
||
|
typename T46, typename T47, typename T48>
|
||
|
class ValueArray48 {
|
||
|
public:
|
||
|
ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
|
||
|
v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
|
||
|
v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
|
||
|
v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
|
||
|
v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
|
||
|
v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
|
||
|
v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
|
||
|
v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
|
||
|
v46_(v46), v47_(v47), v48_(v48) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
||
|
v48_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
const T46 v46_;
|
||
|
const T47 v47_;
|
||
|
const T48 v48_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45,
|
||
|
typename T46, typename T47, typename T48, typename T49>
|
||
|
class ValueArray49 {
|
||
|
public:
|
||
|
ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
|
||
|
T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
|
||
|
v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
|
||
|
v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
||
|
v48_, v49_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
const T46 v46_;
|
||
|
const T47 v47_;
|
||
|
const T48 v48_;
|
||
|
const T49 v49_;
|
||
|
};
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10,
|
||
|
typename T11, typename T12, typename T13, typename T14, typename T15,
|
||
|
typename T16, typename T17, typename T18, typename T19, typename T20,
|
||
|
typename T21, typename T22, typename T23, typename T24, typename T25,
|
||
|
typename T26, typename T27, typename T28, typename T29, typename T30,
|
||
|
typename T31, typename T32, typename T33, typename T34, typename T35,
|
||
|
typename T36, typename T37, typename T38, typename T39, typename T40,
|
||
|
typename T41, typename T42, typename T43, typename T44, typename T45,
|
||
|
typename T46, typename T47, typename T48, typename T49, typename T50>
|
||
|
class ValueArray50 {
|
||
|
public:
|
||
|
ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
|
||
|
T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
|
||
|
T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
|
||
|
T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
|
||
|
T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
|
||
|
T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
|
||
|
T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
|
||
|
v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
|
||
|
v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
|
||
|
v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
|
||
|
v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
|
||
|
v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
|
||
|
v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
|
||
|
v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
|
||
|
|
||
|
template <typename T>
|
||
|
operator ParamGenerator<T>() const {
|
||
|
const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
|
||
|
v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
|
||
|
v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
|
||
|
v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
|
||
|
v48_, v49_, v50_};
|
||
|
return ValuesIn(array);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const T1 v1_;
|
||
|
const T2 v2_;
|
||
|
const T3 v3_;
|
||
|
const T4 v4_;
|
||
|
const T5 v5_;
|
||
|
const T6 v6_;
|
||
|
const T7 v7_;
|
||
|
const T8 v8_;
|
||
|
const T9 v9_;
|
||
|
const T10 v10_;
|
||
|
const T11 v11_;
|
||
|
const T12 v12_;
|
||
|
const T13 v13_;
|
||
|
const T14 v14_;
|
||
|
const T15 v15_;
|
||
|
const T16 v16_;
|
||
|
const T17 v17_;
|
||
|
const T18 v18_;
|
||
|
const T19 v19_;
|
||
|
const T20 v20_;
|
||
|
const T21 v21_;
|
||
|
const T22 v22_;
|
||
|
const T23 v23_;
|
||
|
const T24 v24_;
|
||
|
const T25 v25_;
|
||
|
const T26 v26_;
|
||
|
const T27 v27_;
|
||
|
const T28 v28_;
|
||
|
const T29 v29_;
|
||
|
const T30 v30_;
|
||
|
const T31 v31_;
|
||
|
const T32 v32_;
|
||
|
const T33 v33_;
|
||
|
const T34 v34_;
|
||
|
const T35 v35_;
|
||
|
const T36 v36_;
|
||
|
const T37 v37_;
|
||
|
const T38 v38_;
|
||
|
const T39 v39_;
|
||
|
const T40 v40_;
|
||
|
const T41 v41_;
|
||
|
const T42 v42_;
|
||
|
const T43 v43_;
|
||
|
const T44 v44_;
|
||
|
const T45 v45_;
|
||
|
const T46 v46_;
|
||
|
const T47 v47_;
|
||
|
const T48 v48_;
|
||
|
const T49 v49_;
|
||
|
const T50 v50_;
|
||
|
};
|
||
|
|
||
|
#ifdef GTEST_HAS_COMBINE
|
||
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||
|
//
|
||
|
// Generates values from the Cartesian product of values produced
|
||
|
// by the argument generators.
|
||
|
//
|
||
|
template <typename T1, typename T2>
|
||
|
class CartesianProductGenerator2
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2> ParamType;
|
||
|
|
||
|
CartesianProductGenerator2(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2)
|
||
|
: g1_(g1), g2_(g2) {}
|
||
|
virtual ~CartesianProductGenerator2() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current2_;
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3>
|
||
|
class CartesianProductGenerator3
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
|
||
|
|
||
|
CartesianProductGenerator3(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
|
||
|
: g1_(g1), g2_(g2), g3_(g3) {}
|
||
|
virtual ~CartesianProductGenerator3() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current3_;
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4>
|
||
|
class CartesianProductGenerator4
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
|
||
|
|
||
|
CartesianProductGenerator4(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
|
||
|
virtual ~CartesianProductGenerator4() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current4_;
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
||
|
class CartesianProductGenerator5
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
|
||
|
|
||
|
CartesianProductGenerator5(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
|
||
|
virtual ~CartesianProductGenerator5() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current5_;
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6>
|
||
|
class CartesianProductGenerator6
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
|
||
|
T6> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
|
||
|
|
||
|
CartesianProductGenerator6(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
|
||
|
const ParamGenerator<T6>& g6)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
|
||
|
virtual ~CartesianProductGenerator6() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5,
|
||
|
const ParamGenerator<T6>& g6,
|
||
|
const typename ParamGenerator<T6>::iterator& current6)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
|
||
|
begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current6_;
|
||
|
if (current6_ == end6_) {
|
||
|
current6_ = begin6_;
|
||
|
++current5_;
|
||
|
}
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_ &&
|
||
|
current6_ == typed_other->current6_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_),
|
||
|
begin6_(other.begin6_),
|
||
|
end6_(other.end6_),
|
||
|
current6_(other.current6_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_, *current6_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_ ||
|
||
|
current6_ == end6_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
const typename ParamGenerator<T6>::iterator begin6_;
|
||
|
const typename ParamGenerator<T6>::iterator end6_;
|
||
|
typename ParamGenerator<T6>::iterator current6_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
const ParamGenerator<T6> g6_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7>
|
||
|
class CartesianProductGenerator7
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
|
||
|
T7> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
|
||
|
|
||
|
CartesianProductGenerator7(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
|
||
|
const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
|
||
|
virtual ~CartesianProductGenerator7() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
|
||
|
g7_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5,
|
||
|
const ParamGenerator<T6>& g6,
|
||
|
const typename ParamGenerator<T6>::iterator& current6,
|
||
|
const ParamGenerator<T7>& g7,
|
||
|
const typename ParamGenerator<T7>::iterator& current7)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
|
||
|
begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
|
||
|
begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current7_;
|
||
|
if (current7_ == end7_) {
|
||
|
current7_ = begin7_;
|
||
|
++current6_;
|
||
|
}
|
||
|
if (current6_ == end6_) {
|
||
|
current6_ = begin6_;
|
||
|
++current5_;
|
||
|
}
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_ &&
|
||
|
current6_ == typed_other->current6_ &&
|
||
|
current7_ == typed_other->current7_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_),
|
||
|
begin6_(other.begin6_),
|
||
|
end6_(other.end6_),
|
||
|
current6_(other.current6_),
|
||
|
begin7_(other.begin7_),
|
||
|
end7_(other.end7_),
|
||
|
current7_(other.current7_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_, *current6_, *current7_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_ ||
|
||
|
current6_ == end6_ ||
|
||
|
current7_ == end7_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
const typename ParamGenerator<T6>::iterator begin6_;
|
||
|
const typename ParamGenerator<T6>::iterator end6_;
|
||
|
typename ParamGenerator<T6>::iterator current6_;
|
||
|
const typename ParamGenerator<T7>::iterator begin7_;
|
||
|
const typename ParamGenerator<T7>::iterator end7_;
|
||
|
typename ParamGenerator<T7>::iterator current7_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
const ParamGenerator<T6> g6_;
|
||
|
const ParamGenerator<T7> g7_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8>
|
||
|
class CartesianProductGenerator8
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
|
||
|
T7, T8> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
|
||
|
|
||
|
CartesianProductGenerator8(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
|
||
|
const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
|
||
|
const ParamGenerator<T8>& g8)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
|
||
|
g8_(g8) {}
|
||
|
virtual ~CartesianProductGenerator8() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
|
||
|
g7_.begin(), g8_, g8_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
|
||
|
g8_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5,
|
||
|
const ParamGenerator<T6>& g6,
|
||
|
const typename ParamGenerator<T6>::iterator& current6,
|
||
|
const ParamGenerator<T7>& g7,
|
||
|
const typename ParamGenerator<T7>::iterator& current7,
|
||
|
const ParamGenerator<T8>& g8,
|
||
|
const typename ParamGenerator<T8>::iterator& current8)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
|
||
|
begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
|
||
|
begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
|
||
|
begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current8_;
|
||
|
if (current8_ == end8_) {
|
||
|
current8_ = begin8_;
|
||
|
++current7_;
|
||
|
}
|
||
|
if (current7_ == end7_) {
|
||
|
current7_ = begin7_;
|
||
|
++current6_;
|
||
|
}
|
||
|
if (current6_ == end6_) {
|
||
|
current6_ = begin6_;
|
||
|
++current5_;
|
||
|
}
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_ &&
|
||
|
current6_ == typed_other->current6_ &&
|
||
|
current7_ == typed_other->current7_ &&
|
||
|
current8_ == typed_other->current8_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_),
|
||
|
begin6_(other.begin6_),
|
||
|
end6_(other.end6_),
|
||
|
current6_(other.current6_),
|
||
|
begin7_(other.begin7_),
|
||
|
end7_(other.end7_),
|
||
|
current7_(other.current7_),
|
||
|
begin8_(other.begin8_),
|
||
|
end8_(other.end8_),
|
||
|
current8_(other.current8_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_, *current6_, *current7_, *current8_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_ ||
|
||
|
current6_ == end6_ ||
|
||
|
current7_ == end7_ ||
|
||
|
current8_ == end8_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
const typename ParamGenerator<T6>::iterator begin6_;
|
||
|
const typename ParamGenerator<T6>::iterator end6_;
|
||
|
typename ParamGenerator<T6>::iterator current6_;
|
||
|
const typename ParamGenerator<T7>::iterator begin7_;
|
||
|
const typename ParamGenerator<T7>::iterator end7_;
|
||
|
typename ParamGenerator<T7>::iterator current7_;
|
||
|
const typename ParamGenerator<T8>::iterator begin8_;
|
||
|
const typename ParamGenerator<T8>::iterator end8_;
|
||
|
typename ParamGenerator<T8>::iterator current8_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
const ParamGenerator<T6> g6_;
|
||
|
const ParamGenerator<T7> g7_;
|
||
|
const ParamGenerator<T8> g8_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9>
|
||
|
class CartesianProductGenerator9
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
|
||
|
T7, T8, T9> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
|
||
|
|
||
|
CartesianProductGenerator9(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
|
||
|
const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
|
||
|
const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
|
||
|
g9_(g9) {}
|
||
|
virtual ~CartesianProductGenerator9() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
|
||
|
g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
|
||
|
g8_.end(), g9_, g9_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5,
|
||
|
const ParamGenerator<T6>& g6,
|
||
|
const typename ParamGenerator<T6>::iterator& current6,
|
||
|
const ParamGenerator<T7>& g7,
|
||
|
const typename ParamGenerator<T7>::iterator& current7,
|
||
|
const ParamGenerator<T8>& g8,
|
||
|
const typename ParamGenerator<T8>::iterator& current8,
|
||
|
const ParamGenerator<T9>& g9,
|
||
|
const typename ParamGenerator<T9>::iterator& current9)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
|
||
|
begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
|
||
|
begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
|
||
|
begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
|
||
|
begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current9_;
|
||
|
if (current9_ == end9_) {
|
||
|
current9_ = begin9_;
|
||
|
++current8_;
|
||
|
}
|
||
|
if (current8_ == end8_) {
|
||
|
current8_ = begin8_;
|
||
|
++current7_;
|
||
|
}
|
||
|
if (current7_ == end7_) {
|
||
|
current7_ = begin7_;
|
||
|
++current6_;
|
||
|
}
|
||
|
if (current6_ == end6_) {
|
||
|
current6_ = begin6_;
|
||
|
++current5_;
|
||
|
}
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_ &&
|
||
|
current6_ == typed_other->current6_ &&
|
||
|
current7_ == typed_other->current7_ &&
|
||
|
current8_ == typed_other->current8_ &&
|
||
|
current9_ == typed_other->current9_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_),
|
||
|
begin6_(other.begin6_),
|
||
|
end6_(other.end6_),
|
||
|
current6_(other.current6_),
|
||
|
begin7_(other.begin7_),
|
||
|
end7_(other.end7_),
|
||
|
current7_(other.current7_),
|
||
|
begin8_(other.begin8_),
|
||
|
end8_(other.end8_),
|
||
|
current8_(other.current8_),
|
||
|
begin9_(other.begin9_),
|
||
|
end9_(other.end9_),
|
||
|
current9_(other.current9_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_, *current6_, *current7_, *current8_,
|
||
|
*current9_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_ ||
|
||
|
current6_ == end6_ ||
|
||
|
current7_ == end7_ ||
|
||
|
current8_ == end8_ ||
|
||
|
current9_ == end9_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
const typename ParamGenerator<T6>::iterator begin6_;
|
||
|
const typename ParamGenerator<T6>::iterator end6_;
|
||
|
typename ParamGenerator<T6>::iterator current6_;
|
||
|
const typename ParamGenerator<T7>::iterator begin7_;
|
||
|
const typename ParamGenerator<T7>::iterator end7_;
|
||
|
typename ParamGenerator<T7>::iterator current7_;
|
||
|
const typename ParamGenerator<T8>::iterator begin8_;
|
||
|
const typename ParamGenerator<T8>::iterator end8_;
|
||
|
typename ParamGenerator<T8>::iterator current8_;
|
||
|
const typename ParamGenerator<T9>::iterator begin9_;
|
||
|
const typename ParamGenerator<T9>::iterator end9_;
|
||
|
typename ParamGenerator<T9>::iterator current9_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
const ParamGenerator<T6> g6_;
|
||
|
const ParamGenerator<T7> g7_;
|
||
|
const ParamGenerator<T8> g8_;
|
||
|
const ParamGenerator<T9> g9_;
|
||
|
};
|
||
|
|
||
|
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10>
|
||
|
class CartesianProductGenerator10
|
||
|
: public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
|
||
|
T7, T8, T9, T10> > {
|
||
|
public:
|
||
|
typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
|
||
|
|
||
|
CartesianProductGenerator10(const ParamGenerator<T1>& g1,
|
||
|
const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
|
||
|
const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
|
||
|
const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
|
||
|
const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
|
||
|
const ParamGenerator<T10>& g10)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
|
||
|
g9_(g9), g10_(g10) {}
|
||
|
virtual ~CartesianProductGenerator10() {}
|
||
|
|
||
|
virtual ParamIteratorInterface<ParamType>* Begin() const {
|
||
|
return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
|
||
|
g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
|
||
|
g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* End() const {
|
||
|
return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
|
||
|
g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
|
||
|
g8_.end(), g9_, g9_.end(), g10_, g10_.end());
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
class Iterator : public ParamIteratorInterface<ParamType> {
|
||
|
public:
|
||
|
Iterator(const ParamGeneratorInterface<ParamType>* base,
|
||
|
const ParamGenerator<T1>& g1,
|
||
|
const typename ParamGenerator<T1>::iterator& current1,
|
||
|
const ParamGenerator<T2>& g2,
|
||
|
const typename ParamGenerator<T2>::iterator& current2,
|
||
|
const ParamGenerator<T3>& g3,
|
||
|
const typename ParamGenerator<T3>::iterator& current3,
|
||
|
const ParamGenerator<T4>& g4,
|
||
|
const typename ParamGenerator<T4>::iterator& current4,
|
||
|
const ParamGenerator<T5>& g5,
|
||
|
const typename ParamGenerator<T5>::iterator& current5,
|
||
|
const ParamGenerator<T6>& g6,
|
||
|
const typename ParamGenerator<T6>::iterator& current6,
|
||
|
const ParamGenerator<T7>& g7,
|
||
|
const typename ParamGenerator<T7>::iterator& current7,
|
||
|
const ParamGenerator<T8>& g8,
|
||
|
const typename ParamGenerator<T8>::iterator& current8,
|
||
|
const ParamGenerator<T9>& g9,
|
||
|
const typename ParamGenerator<T9>::iterator& current9,
|
||
|
const ParamGenerator<T10>& g10,
|
||
|
const typename ParamGenerator<T10>::iterator& current10)
|
||
|
: base_(base),
|
||
|
begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
|
||
|
begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
|
||
|
begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
|
||
|
begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
|
||
|
begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
|
||
|
begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
|
||
|
begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
|
||
|
begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
|
||
|
begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
|
||
|
begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ~Iterator() {}
|
||
|
|
||
|
virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
|
||
|
return base_;
|
||
|
}
|
||
|
// Advance should not be called on beyond-of-range iterators
|
||
|
// so no component iterators must be beyond end of range, either.
|
||
|
virtual void Advance() {
|
||
|
assert(!AtEnd());
|
||
|
++current10_;
|
||
|
if (current10_ == end10_) {
|
||
|
current10_ = begin10_;
|
||
|
++current9_;
|
||
|
}
|
||
|
if (current9_ == end9_) {
|
||
|
current9_ = begin9_;
|
||
|
++current8_;
|
||
|
}
|
||
|
if (current8_ == end8_) {
|
||
|
current8_ = begin8_;
|
||
|
++current7_;
|
||
|
}
|
||
|
if (current7_ == end7_) {
|
||
|
current7_ = begin7_;
|
||
|
++current6_;
|
||
|
}
|
||
|
if (current6_ == end6_) {
|
||
|
current6_ = begin6_;
|
||
|
++current5_;
|
||
|
}
|
||
|
if (current5_ == end5_) {
|
||
|
current5_ = begin5_;
|
||
|
++current4_;
|
||
|
}
|
||
|
if (current4_ == end4_) {
|
||
|
current4_ = begin4_;
|
||
|
++current3_;
|
||
|
}
|
||
|
if (current3_ == end3_) {
|
||
|
current3_ = begin3_;
|
||
|
++current2_;
|
||
|
}
|
||
|
if (current2_ == end2_) {
|
||
|
current2_ = begin2_;
|
||
|
++current1_;
|
||
|
}
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
virtual ParamIteratorInterface<ParamType>* Clone() const {
|
||
|
return new Iterator(*this);
|
||
|
}
|
||
|
virtual const ParamType* Current() const { return ¤t_value_; }
|
||
|
virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
|
||
|
// Having the same base generator guarantees that the other
|
||
|
// iterator is of the same type and we can downcast.
|
||
|
GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
|
||
|
<< "The program attempted to compare iterators "
|
||
|
<< "from different generators." << std::endl;
|
||
|
const Iterator* typed_other =
|
||
|
CheckedDowncastToActualType<const Iterator>(&other);
|
||
|
// We must report iterators equal if they both point beyond their
|
||
|
// respective ranges. That can happen in a variety of fashions,
|
||
|
// so we have to consult AtEnd().
|
||
|
return (AtEnd() && typed_other->AtEnd()) ||
|
||
|
(
|
||
|
current1_ == typed_other->current1_ &&
|
||
|
current2_ == typed_other->current2_ &&
|
||
|
current3_ == typed_other->current3_ &&
|
||
|
current4_ == typed_other->current4_ &&
|
||
|
current5_ == typed_other->current5_ &&
|
||
|
current6_ == typed_other->current6_ &&
|
||
|
current7_ == typed_other->current7_ &&
|
||
|
current8_ == typed_other->current8_ &&
|
||
|
current9_ == typed_other->current9_ &&
|
||
|
current10_ == typed_other->current10_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Iterator(const Iterator& other)
|
||
|
: base_(other.base_),
|
||
|
begin1_(other.begin1_),
|
||
|
end1_(other.end1_),
|
||
|
current1_(other.current1_),
|
||
|
begin2_(other.begin2_),
|
||
|
end2_(other.end2_),
|
||
|
current2_(other.current2_),
|
||
|
begin3_(other.begin3_),
|
||
|
end3_(other.end3_),
|
||
|
current3_(other.current3_),
|
||
|
begin4_(other.begin4_),
|
||
|
end4_(other.end4_),
|
||
|
current4_(other.current4_),
|
||
|
begin5_(other.begin5_),
|
||
|
end5_(other.end5_),
|
||
|
current5_(other.current5_),
|
||
|
begin6_(other.begin6_),
|
||
|
end6_(other.end6_),
|
||
|
current6_(other.current6_),
|
||
|
begin7_(other.begin7_),
|
||
|
end7_(other.end7_),
|
||
|
current7_(other.current7_),
|
||
|
begin8_(other.begin8_),
|
||
|
end8_(other.end8_),
|
||
|
current8_(other.current8_),
|
||
|
begin9_(other.begin9_),
|
||
|
end9_(other.end9_),
|
||
|
current9_(other.current9_),
|
||
|
begin10_(other.begin10_),
|
||
|
end10_(other.end10_),
|
||
|
current10_(other.current10_) {
|
||
|
ComputeCurrentValue();
|
||
|
}
|
||
|
|
||
|
void ComputeCurrentValue() {
|
||
|
if (!AtEnd())
|
||
|
current_value_ = ParamType(*current1_, *current2_, *current3_,
|
||
|
*current4_, *current5_, *current6_, *current7_, *current8_,
|
||
|
*current9_, *current10_);
|
||
|
}
|
||
|
bool AtEnd() const {
|
||
|
// We must report iterator past the end of the range when either of the
|
||
|
// component iterators has reached the end of its range.
|
||
|
return
|
||
|
current1_ == end1_ ||
|
||
|
current2_ == end2_ ||
|
||
|
current3_ == end3_ ||
|
||
|
current4_ == end4_ ||
|
||
|
current5_ == end5_ ||
|
||
|
current6_ == end6_ ||
|
||
|
current7_ == end7_ ||
|
||
|
current8_ == end8_ ||
|
||
|
current9_ == end9_ ||
|
||
|
current10_ == end10_;
|
||
|
}
|
||
|
|
||
|
const ParamGeneratorInterface<ParamType>* const base_;
|
||
|
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
|
||
|
// current[i]_ is the actual traversing iterator.
|
||
|
const typename ParamGenerator<T1>::iterator begin1_;
|
||
|
const typename ParamGenerator<T1>::iterator end1_;
|
||
|
typename ParamGenerator<T1>::iterator current1_;
|
||
|
const typename ParamGenerator<T2>::iterator begin2_;
|
||
|
const typename ParamGenerator<T2>::iterator end2_;
|
||
|
typename ParamGenerator<T2>::iterator current2_;
|
||
|
const typename ParamGenerator<T3>::iterator begin3_;
|
||
|
const typename ParamGenerator<T3>::iterator end3_;
|
||
|
typename ParamGenerator<T3>::iterator current3_;
|
||
|
const typename ParamGenerator<T4>::iterator begin4_;
|
||
|
const typename ParamGenerator<T4>::iterator end4_;
|
||
|
typename ParamGenerator<T4>::iterator current4_;
|
||
|
const typename ParamGenerator<T5>::iterator begin5_;
|
||
|
const typename ParamGenerator<T5>::iterator end5_;
|
||
|
typename ParamGenerator<T5>::iterator current5_;
|
||
|
const typename ParamGenerator<T6>::iterator begin6_;
|
||
|
const typename ParamGenerator<T6>::iterator end6_;
|
||
|
typename ParamGenerator<T6>::iterator current6_;
|
||
|
const typename ParamGenerator<T7>::iterator begin7_;
|
||
|
const typename ParamGenerator<T7>::iterator end7_;
|
||
|
typename ParamGenerator<T7>::iterator current7_;
|
||
|
const typename ParamGenerator<T8>::iterator begin8_;
|
||
|
const typename ParamGenerator<T8>::iterator end8_;
|
||
|
typename ParamGenerator<T8>::iterator current8_;
|
||
|
const typename ParamGenerator<T9>::iterator begin9_;
|
||
|
const typename ParamGenerator<T9>::iterator end9_;
|
||
|
typename ParamGenerator<T9>::iterator current9_;
|
||
|
const typename ParamGenerator<T10>::iterator begin10_;
|
||
|
const typename ParamGenerator<T10>::iterator end10_;
|
||
|
typename ParamGenerator<T10>::iterator current10_;
|
||
|
ParamType current_value_;
|
||
|
};
|
||
|
|
||
|
const ParamGenerator<T1> g1_;
|
||
|
const ParamGenerator<T2> g2_;
|
||
|
const ParamGenerator<T3> g3_;
|
||
|
const ParamGenerator<T4> g4_;
|
||
|
const ParamGenerator<T5> g5_;
|
||
|
const ParamGenerator<T6> g6_;
|
||
|
const ParamGenerator<T7> g7_;
|
||
|
const ParamGenerator<T8> g8_;
|
||
|
const ParamGenerator<T9> g9_;
|
||
|
const ParamGenerator<T10> g10_;
|
||
|
};
|
||
|
|
||
|
|
||
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||
|
//
|
||
|
// Helper classes providing Combine() with polymorphic features. They allow
|
||
|
// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
|
||
|
// convertible to U.
|
||
|
//
|
||
|
template <class Generator1, class Generator2>
|
||
|
class CartesianProductHolder2 {
|
||
|
public:
|
||
|
CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
|
||
|
: g1_(g1), g2_(g2) {}
|
||
|
template <typename T1, typename T2>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
|
||
|
new CartesianProductGenerator2<T1, T2>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3>
|
||
|
class CartesianProductHolder3 {
|
||
|
public:
|
||
|
CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3)
|
||
|
: g1_(g1), g2_(g2), g3_(g3) {}
|
||
|
template <typename T1, typename T2, typename T3>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
|
||
|
new CartesianProductGenerator3<T1, T2, T3>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4>
|
||
|
class CartesianProductHolder4 {
|
||
|
public:
|
||
|
CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
|
||
|
new CartesianProductGenerator4<T1, T2, T3, T4>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5>
|
||
|
class CartesianProductHolder5 {
|
||
|
public:
|
||
|
CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
|
||
|
new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5, class Generator6>
|
||
|
class CartesianProductHolder6 {
|
||
|
public:
|
||
|
CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5,
|
||
|
const Generator6& g6)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
|
||
|
new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_),
|
||
|
static_cast<ParamGenerator<T6> >(g6_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
const Generator6 g6_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5, class Generator6, class Generator7>
|
||
|
class CartesianProductHolder7 {
|
||
|
public:
|
||
|
CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5,
|
||
|
const Generator6& g6, const Generator7& g7)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
|
||
|
T7> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
|
||
|
new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_),
|
||
|
static_cast<ParamGenerator<T6> >(g6_),
|
||
|
static_cast<ParamGenerator<T7> >(g7_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
const Generator6 g6_;
|
||
|
const Generator7 g7_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5, class Generator6, class Generator7,
|
||
|
class Generator8>
|
||
|
class CartesianProductHolder8 {
|
||
|
public:
|
||
|
CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5,
|
||
|
const Generator6& g6, const Generator7& g7, const Generator8& g8)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
|
||
|
g8_(g8) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,
|
||
|
T8> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
|
||
|
new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_),
|
||
|
static_cast<ParamGenerator<T6> >(g6_),
|
||
|
static_cast<ParamGenerator<T7> >(g7_),
|
||
|
static_cast<ParamGenerator<T8> >(g8_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
const Generator6 g6_;
|
||
|
const Generator7 g7_;
|
||
|
const Generator8 g8_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5, class Generator6, class Generator7,
|
||
|
class Generator8, class Generator9>
|
||
|
class CartesianProductHolder9 {
|
||
|
public:
|
||
|
CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5,
|
||
|
const Generator6& g6, const Generator7& g7, const Generator8& g8,
|
||
|
const Generator9& g9)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
|
||
|
g9_(g9) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
|
||
|
T9> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
|
||
|
T9> >(
|
||
|
new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_),
|
||
|
static_cast<ParamGenerator<T6> >(g6_),
|
||
|
static_cast<ParamGenerator<T7> >(g7_),
|
||
|
static_cast<ParamGenerator<T8> >(g8_),
|
||
|
static_cast<ParamGenerator<T9> >(g9_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
const Generator6 g6_;
|
||
|
const Generator7 g7_;
|
||
|
const Generator8 g8_;
|
||
|
const Generator9 g9_;
|
||
|
};
|
||
|
|
||
|
template <class Generator1, class Generator2, class Generator3,
|
||
|
class Generator4, class Generator5, class Generator6, class Generator7,
|
||
|
class Generator8, class Generator9, class Generator10>
|
||
|
class CartesianProductHolder10 {
|
||
|
public:
|
||
|
CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
|
||
|
const Generator3& g3, const Generator4& g4, const Generator5& g5,
|
||
|
const Generator6& g6, const Generator7& g7, const Generator8& g8,
|
||
|
const Generator9& g9, const Generator10& g10)
|
||
|
: g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
|
||
|
g9_(g9), g10_(g10) {}
|
||
|
template <typename T1, typename T2, typename T3, typename T4, typename T5,
|
||
|
typename T6, typename T7, typename T8, typename T9, typename T10>
|
||
|
operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
|
||
|
T9, T10> >() const {
|
||
|
return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
|
||
|
T9, T10> >(
|
||
|
new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
|
||
|
T10>(
|
||
|
static_cast<ParamGenerator<T1> >(g1_),
|
||
|
static_cast<ParamGenerator<T2> >(g2_),
|
||
|
static_cast<ParamGenerator<T3> >(g3_),
|
||
|
static_cast<ParamGenerator<T4> >(g4_),
|
||
|
static_cast<ParamGenerator<T5> >(g5_),
|
||
|
static_cast<ParamGenerator<T6> >(g6_),
|
||
|
static_cast<ParamGenerator<T7> >(g7_),
|
||
|
static_cast<ParamGenerator<T8> >(g8_),
|
||
|
static_cast<ParamGenerator<T9> >(g9_),
|
||
|
static_cast<ParamGenerator<T10> >(g10_)));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const Generator1 g1_;
|
||
|
const Generator2 g2_;
|
||
|
const Generator3 g3_;
|
||
|
const Generator4 g4_;
|
||
|
const Generator5 g5_;
|
||
|
const Generator6 g6_;
|
||
|
const Generator7 g7_;
|
||
|
const Generator8 g8_;
|
||
|
const Generator9 g9_;
|
||
|
const Generator10 g10_;
|
||
|
};
|
||
|
|
||
|
#endif // GTEST_HAS_COMBINE
|
||
|
|
||
|
} // namespace internal
|
||
|
} // namespace testing
|
||
|
|
||
|
#endif // GTEST_HAS_PARAM_TEST
|
||
|
|
||
|
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
|