| // 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_ |