You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4822 lines
165 KiB
4822 lines
165 KiB
// This file was GENERATED by command: |
|
// pump.py gtest-param-util-generated.h.pump |
|
// 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_ |
|
|
|
// scripts/fuse_gtest.py depends on gtest's own header being #included |
|
// *unconditionally*. Therefore these #includes cannot be moved |
|
// inside #if GTEST_HAS_PARAM_TEST. |
|
#include "gtest/internal/gtest-param-util.h" |
|
#include "gtest/internal/gtest-port.h" |
|
|
|
#if GTEST_HAS_PARAM_TEST |
|
|
|
namespace testing { |
|
|
|
// Forward declarations of ValuesIn(), which is implemented in |
|
// include/gtest/gtest-param-test.h. |
|
template <typename ForwardIterator> |
|
internal::ParamGenerator< |
|
typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> |
|
ValuesIn(ForwardIterator begin, ForwardIterator end); |
|
|
|
template <typename T, size_t N> |
|
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]); |
|
|
|
template <class Container> |
|
internal::ParamGenerator<typename Container::value_type> ValuesIn( |
|
const Container& container); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray1& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray2& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray3& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray4& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray5& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray6& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray7& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray8& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray9& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray10& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray11& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray12& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray13& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray14& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray15& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray16& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray17& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray18& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray19& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray20& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray21& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray22& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray23& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray24& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray25& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray26& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray27& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray28& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray29& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray30& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray31& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray32& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray33& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray34& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray35& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray36& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray37& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray38& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray39& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray40& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray41& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray42& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray43& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray44& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray45& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray46& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray47& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray48& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray49& other); |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const ValueArray50& other); |
|
|
|
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_; |
|
}; |
|
|
|
# if 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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator2::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator2& other); |
|
|
|
const ParamGenerator<T1> g1_; |
|
const ParamGenerator<T2> g2_; |
|
}; // class CartesianProductGenerator2 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator3::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator3& other); |
|
|
|
const ParamGenerator<T1> g1_; |
|
const ParamGenerator<T2> g2_; |
|
const ParamGenerator<T3> g3_; |
|
}; // class CartesianProductGenerator3 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator4::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator4& other); |
|
|
|
const ParamGenerator<T1> g1_; |
|
const ParamGenerator<T2> g2_; |
|
const ParamGenerator<T3> g3_; |
|
const ParamGenerator<T4> g4_; |
|
}; // class CartesianProductGenerator4 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator5::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator5& other); |
|
|
|
const ParamGenerator<T1> g1_; |
|
const ParamGenerator<T2> g2_; |
|
const ParamGenerator<T3> g3_; |
|
const ParamGenerator<T4> g4_; |
|
const ParamGenerator<T5> g5_; |
|
}; // class CartesianProductGenerator5 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator6::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator6& other); |
|
|
|
const ParamGenerator<T1> g1_; |
|
const ParamGenerator<T2> g2_; |
|
const ParamGenerator<T3> g3_; |
|
const ParamGenerator<T4> g4_; |
|
const ParamGenerator<T5> g5_; |
|
const ParamGenerator<T6> g6_; |
|
}; // class CartesianProductGenerator6 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator7::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator7& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator7 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator8::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator8& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator8 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator9::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator9& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator9 |
|
|
|
|
|
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_; |
|
} |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const Iterator& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator10::Iterator |
|
|
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductGenerator10& other); |
|
|
|
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_; |
|
}; // class CartesianProductGenerator10 |
|
|
|
|
|
// 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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder2& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
}; // class CartesianProductHolder2 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder3& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
}; // class CartesianProductHolder3 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder4& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
const Generator4 g4_; |
|
}; // class CartesianProductHolder4 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder5& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
const Generator4 g4_; |
|
const Generator5 g5_; |
|
}; // class CartesianProductHolder5 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder6& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
const Generator4 g4_; |
|
const Generator5 g5_; |
|
const Generator6 g6_; |
|
}; // class CartesianProductHolder6 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder7& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
const Generator4 g4_; |
|
const Generator5 g5_; |
|
const Generator6 g6_; |
|
const Generator7 g7_; |
|
}; // class CartesianProductHolder7 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder8& other); |
|
|
|
const Generator1 g1_; |
|
const Generator2 g2_; |
|
const Generator3 g3_; |
|
const Generator4 g4_; |
|
const Generator5 g5_; |
|
const Generator6 g6_; |
|
const Generator7 g7_; |
|
const Generator8 g8_; |
|
}; // class CartesianProductHolder8 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder9& other); |
|
|
|
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_; |
|
}; // class CartesianProductHolder9 |
|
|
|
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: |
|
// No implementation - assignment is unsupported. |
|
void operator=(const CartesianProductHolder10& other); |
|
|
|
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_; |
|
}; // class CartesianProductHolder10 |
|
|
|
# endif // GTEST_HAS_COMBINE |
|
|
|
} // namespace internal |
|
} // namespace testing |
|
|
|
#endif // GTEST_HAS_PARAM_TEST |
|
|
|
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
|
|
|