16624187c3141f7ca403056062c440582630cd909zhanyong.wan// This file was GENERATED by command: 26624187c3141f7ca403056062c440582630cd909zhanyong.wan// pump.py gtest-param-util-generated.h.pump 36624187c3141f7ca403056062c440582630cd909zhanyong.wan// DO NOT EDIT BY HAND!!! 4f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Copyright 2008 Google Inc. 6f904a612d9444ab36c07a8e619c113432e046f49vladlosev// All Rights Reserved. 7f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 8f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Redistribution and use in source and binary forms, with or without 9f904a612d9444ab36c07a8e619c113432e046f49vladlosev// modification, are permitted provided that the following conditions are 10f904a612d9444ab36c07a8e619c113432e046f49vladlosev// met: 11f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 12f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Redistributions of source code must retain the above copyright 13f904a612d9444ab36c07a8e619c113432e046f49vladlosev// notice, this list of conditions and the following disclaimer. 14f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Redistributions in binary form must reproduce the above 15f904a612d9444ab36c07a8e619c113432e046f49vladlosev// copyright notice, this list of conditions and the following disclaimer 16f904a612d9444ab36c07a8e619c113432e046f49vladlosev// in the documentation and/or other materials provided with the 17f904a612d9444ab36c07a8e619c113432e046f49vladlosev// distribution. 18f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Neither the name of Google Inc. nor the names of its 19f904a612d9444ab36c07a8e619c113432e046f49vladlosev// contributors may be used to endorse or promote products derived from 20f904a612d9444ab36c07a8e619c113432e046f49vladlosev// this software without specific prior written permission. 21f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 22f904a612d9444ab36c07a8e619c113432e046f49vladlosev// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23f904a612d9444ab36c07a8e619c113432e046f49vladlosev// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24f904a612d9444ab36c07a8e619c113432e046f49vladlosev// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25f904a612d9444ab36c07a8e619c113432e046f49vladlosev// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26f904a612d9444ab36c07a8e619c113432e046f49vladlosev// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27f904a612d9444ab36c07a8e619c113432e046f49vladlosev// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28f904a612d9444ab36c07a8e619c113432e046f49vladlosev// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29f904a612d9444ab36c07a8e619c113432e046f49vladlosev// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30f904a612d9444ab36c07a8e619c113432e046f49vladlosev// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31f904a612d9444ab36c07a8e619c113432e046f49vladlosev// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32f904a612d9444ab36c07a8e619c113432e046f49vladlosev// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 34f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Author: vladl@google.com (Vlad Losev) 35f904a612d9444ab36c07a8e619c113432e046f49vladlosev 36f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Type and function utilities for implementing parameterized tests. 37f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! 38f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 39f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Currently Google Test supports at most 50 arguments in Values, 40f904a612d9444ab36c07a8e619c113432e046f49vladlosev// and at most 10 arguments in Combine. Please contact 41f904a612d9444ab36c07a8e619c113432e046f49vladlosev// googletestframework@googlegroups.com if you need more. 42f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Please note that the number of arguments to Combine is limited 43e735d74bc537869af877dfc90c171dc140495c11kosak@google.com// by the maximum arity of the implementation of tuple which is 44f904a612d9444ab36c07a8e619c113432e046f49vladlosev// currently set at 10. 45f904a612d9444ab36c07a8e619c113432e046f49vladlosev 46f904a612d9444ab36c07a8e619c113432e046f49vladlosev#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 47f904a612d9444ab36c07a8e619c113432e046f49vladlosev#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 48f904a612d9444ab36c07a8e619c113432e046f49vladlosev 494b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// scripts/fuse_gtest.py depends on gtest's own header being #included 504b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// *unconditionally*. Therefore these #includes cannot be moved 514b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// inside #if GTEST_HAS_PARAM_TEST. 522620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-param-util.h" 532620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-port.h" 54f904a612d9444ab36c07a8e619c113432e046f49vladlosev 554cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST 56f904a612d9444ab36c07a8e619c113432e046f49vladlosev 57f904a612d9444ab36c07a8e619c113432e046f49vladlosevnamespace testing { 58fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan 59fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan// Forward declarations of ValuesIn(), which is implemented in 60fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan// include/gtest/gtest-param-test.h. 61fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wantemplate <typename ForwardIterator> 62fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.waninternal::ParamGenerator< 636624187c3141f7ca403056062c440582630cd909zhanyong.wan typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> 646624187c3141f7ca403056062c440582630cd909zhanyong.wanValuesIn(ForwardIterator begin, ForwardIterator end); 65fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan 66fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wantemplate <typename T, size_t N> 67fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.waninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]); 68fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan 69fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wantemplate <class Container> 70fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.waninternal::ParamGenerator<typename Container::value_type> ValuesIn( 71fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan const Container& container); 72fe755181fa89a06351489bcaf9258f5a4f9f5381zhanyong.wan 73f904a612d9444ab36c07a8e619c113432e046f49vladlosevnamespace internal { 74f904a612d9444ab36c07a8e619c113432e046f49vladlosev 75f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Used in the Values() function to provide polymorphic capabilities. 76f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1> 77f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray1 { 78f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 79f904a612d9444ab36c07a8e619c113432e046f49vladlosev explicit ValueArray1(T1 v1) : v1_(v1) {} 80f904a612d9444ab36c07a8e619c113432e046f49vladlosev 81f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 82f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); } 83f904a612d9444ab36c07a8e619c113432e046f49vladlosev 84f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 85d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 86d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray1& other); 87d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 88f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 89f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 90f904a612d9444ab36c07a8e619c113432e046f49vladlosev 91f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2> 92f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray2 { 93f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 94f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} 95f904a612d9444ab36c07a8e619c113432e046f49vladlosev 96f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 97f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 98524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)}; 99f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 100f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 101f904a612d9444ab36c07a8e619c113432e046f49vladlosev 102f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 103d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 104d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray2& other); 105d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 106f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 107f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 108f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 109f904a612d9444ab36c07a8e619c113432e046f49vladlosev 110f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3> 111f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray3 { 112f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 113f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} 114f904a612d9444ab36c07a8e619c113432e046f49vladlosev 115f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 116f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 117524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 118524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_)}; 119f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 120f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 121f904a612d9444ab36c07a8e619c113432e046f49vladlosev 122f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 123d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 124d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray3& other); 125d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 126f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 127f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 128f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 129f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 130f904a612d9444ab36c07a8e619c113432e046f49vladlosev 131f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4> 132f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray4 { 133f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 134f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), 135f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4) {} 136f904a612d9444ab36c07a8e619c113432e046f49vladlosev 137f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 138f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 139524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 140524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_)}; 141f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 142f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 143f904a612d9444ab36c07a8e619c113432e046f49vladlosev 144f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 145d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 146d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray4& other); 147d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 148f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 149f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 150f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 151f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 152f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 153f904a612d9444ab36c07a8e619c113432e046f49vladlosev 154f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 155f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray5 { 156f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 157f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), 158f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5) {} 159f904a612d9444ab36c07a8e619c113432e046f49vladlosev 160f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 161f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 162524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 163524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)}; 164f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 165f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 166f904a612d9444ab36c07a8e619c113432e046f49vladlosev 167f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 168d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 169d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray5& other); 170d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 171f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 172f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 173f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 174f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 175f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 176f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 177f904a612d9444ab36c07a8e619c113432e046f49vladlosev 178f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 179f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6> 180f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray6 { 181f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 182f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), 183f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} 184f904a612d9444ab36c07a8e619c113432e046f49vladlosev 185f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 186f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 187524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 188524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 189524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_)}; 190f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 191f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 192f904a612d9444ab36c07a8e619c113432e046f49vladlosev 193f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 194d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 195d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray6& other); 196d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 197f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 198f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 199f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 200f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 201f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 202f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 203f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 204f904a612d9444ab36c07a8e619c113432e046f49vladlosev 205f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 206f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7> 207f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray7 { 208f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 209f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), 210f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} 211f904a612d9444ab36c07a8e619c113432e046f49vladlosev 212f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 213f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 214524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 215524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 216524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_)}; 217f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 218f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 219f904a612d9444ab36c07a8e619c113432e046f49vladlosev 220f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 221d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 222d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray7& other); 223d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 224f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 225f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 226f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 227f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 228f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 229f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 230f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 231f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 232f904a612d9444ab36c07a8e619c113432e046f49vladlosev 233f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 234f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8> 235f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray8 { 236f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 237f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 238f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 239f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8) {} 240f904a612d9444ab36c07a8e619c113432e046f49vladlosev 241f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 242f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 243524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 244524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 245524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)}; 246f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 247f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 248f904a612d9444ab36c07a8e619c113432e046f49vladlosev 249f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 250d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 251d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray8& other); 252d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 253f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 254f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 255f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 256f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 257f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 258f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 259f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 260f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 261f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 262f904a612d9444ab36c07a8e619c113432e046f49vladlosev 263f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 264f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9> 265f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray9 { 266f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 267f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 268f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 269f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9) {} 270f904a612d9444ab36c07a8e619c113432e046f49vladlosev 271f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 272f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 273524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 274524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 275524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 276524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_)}; 277f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 278f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 279f904a612d9444ab36c07a8e619c113432e046f49vladlosev 280f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 281d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 282d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray9& other); 283d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 284f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 285f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 286f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 287f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 288f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 289f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 290f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 291f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 292f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 293f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 294f904a612d9444ab36c07a8e619c113432e046f49vladlosev 295f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 296f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10> 297f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray10 { 298f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 299f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 300f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 301f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10) {} 302f904a612d9444ab36c07a8e619c113432e046f49vladlosev 303f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 304f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 305524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 306524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 307524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 308524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_)}; 309f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 310f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 311f904a612d9444ab36c07a8e619c113432e046f49vladlosev 312f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 313d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 314d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray10& other); 315d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 316f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 317f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 318f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 319f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 320f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 321f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 322f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 323f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 324f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 325f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 326f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 327f904a612d9444ab36c07a8e619c113432e046f49vladlosev 328f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 329f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 330f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11> 331f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray11 { 332f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 333f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 334f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 335f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} 336f904a612d9444ab36c07a8e619c113432e046f49vladlosev 337f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 338f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 339524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 340524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 341524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 342524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)}; 343f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 344f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 345f904a612d9444ab36c07a8e619c113432e046f49vladlosev 346f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 347d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 348d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray11& other); 349d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 350f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 351f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 352f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 353f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 354f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 355f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 356f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 357f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 358f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 359f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 360f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 361f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 362f904a612d9444ab36c07a8e619c113432e046f49vladlosev 363f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 364f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 365f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12> 366f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray12 { 367f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 368f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 369f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 370f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} 371f904a612d9444ab36c07a8e619c113432e046f49vladlosev 372f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 373f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 374524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 375524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 376524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 377524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 378524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_)}; 379f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 380f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 381f904a612d9444ab36c07a8e619c113432e046f49vladlosev 382f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 383d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 384d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray12& other); 385d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 386f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 387f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 388f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 389f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 390f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 391f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 392f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 393f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 394f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 395f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 396f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 397f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 398f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 399f904a612d9444ab36c07a8e619c113432e046f49vladlosev 400f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 401f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 402f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13> 403f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray13 { 404f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 405f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 406f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 407f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 408f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12_(v12), v13_(v13) {} 409f904a612d9444ab36c07a8e619c113432e046f49vladlosev 410f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 411f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 412524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 413524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 414524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 415524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 416524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_)}; 417f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 418f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 419f904a612d9444ab36c07a8e619c113432e046f49vladlosev 420f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 421d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 422d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray13& other); 423d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 424f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 425f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 426f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 427f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 428f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 429f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 430f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 431f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 432f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 433f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 434f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 435f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 436f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 437f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 438f904a612d9444ab36c07a8e619c113432e046f49vladlosev 439f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 440f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 441f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14> 442f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray14 { 443f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 444f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 445f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), 446f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 447f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} 448f904a612d9444ab36c07a8e619c113432e046f49vladlosev 449f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 450f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 451524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 452524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 453524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 454524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 455524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)}; 456f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 457f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 458f904a612d9444ab36c07a8e619c113432e046f49vladlosev 459f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 460d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 461d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray14& other); 462d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 463f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 464f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 465f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 466f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 467f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 468f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 469f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 470f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 471f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 472f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 473f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 474f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 475f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 476f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 477f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 478f904a612d9444ab36c07a8e619c113432e046f49vladlosev 479f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 480f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 481f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15> 482f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray15 { 483f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 484f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 485f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), 486f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 487f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} 488f904a612d9444ab36c07a8e619c113432e046f49vladlosev 489f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 490f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 491524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 492524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 493524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 494524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 495524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 496524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_)}; 497f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 498f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 499f904a612d9444ab36c07a8e619c113432e046f49vladlosev 500f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 501d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 502d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray15& other); 503d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 504f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 505f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 506f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 507f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 508f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 509f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 510f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 511f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 512f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 513f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 514f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 515f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 516f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 517f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 518f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 519f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 520f904a612d9444ab36c07a8e619c113432e046f49vladlosev 521f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 522f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 523f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 524f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16> 525f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray16 { 526f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 527f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 528f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), 529f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 530f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 531f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16_(v16) {} 532f904a612d9444ab36c07a8e619c113432e046f49vladlosev 533f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 534f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 535524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 536524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 537524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 538524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 539524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 540524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_)}; 541f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 542f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 543f904a612d9444ab36c07a8e619c113432e046f49vladlosev 544f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 545d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 546d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray16& other); 547d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 548f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 549f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 550f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 551f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 552f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 553f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 554f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 555f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 556f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 557f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 558f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 559f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 560f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 561f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 562f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 563f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 564f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 565f904a612d9444ab36c07a8e619c113432e046f49vladlosev 566f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 567f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 568f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 569f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17> 570f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray17 { 571f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 572f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 573f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 574f904a612d9444ab36c07a8e619c113432e046f49vladlosev T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 575f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 576f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17) {} 577f904a612d9444ab36c07a8e619c113432e046f49vladlosev 578f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 579f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 580524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 581524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 582524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 583524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 584524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 585524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)}; 586f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 587f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 588f904a612d9444ab36c07a8e619c113432e046f49vladlosev 589f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 590d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 591d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray17& other); 592d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 593f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 594f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 595f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 596f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 597f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 598f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 599f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 600f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 601f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 602f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 603f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 604f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 605f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 606f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 607f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 608f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 609f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 610f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 611f904a612d9444ab36c07a8e619c113432e046f49vladlosev 612f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 613f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 614f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 615f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18> 616f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray18 { 617f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 618f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 619f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 620f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 621f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 622f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} 623f904a612d9444ab36c07a8e619c113432e046f49vladlosev 624f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 625f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 626524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 627524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 628524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 629524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 630524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 631524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 632524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_)}; 633f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 634f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 635f904a612d9444ab36c07a8e619c113432e046f49vladlosev 636f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 637d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 638d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray18& other); 639d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 640f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 641f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 642f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 643f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 644f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 645f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 646f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 647f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 648f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 649f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 650f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 651f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 652f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 653f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 654f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 655f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 656f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 657f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 658f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 659f904a612d9444ab36c07a8e619c113432e046f49vladlosev 660f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 661f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 662f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 663f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19> 664f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray19 { 665f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 666f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 667f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 668f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 669f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 670f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} 671f904a612d9444ab36c07a8e619c113432e046f49vladlosev 672f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 673f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 674524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 675524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 676524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 677524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 678524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 679524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 680524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_)}; 681f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 682f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 683f904a612d9444ab36c07a8e619c113432e046f49vladlosev 684f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 685d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 686d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray19& other); 687d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 688f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 689f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 690f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 691f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 692f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 693f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 694f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 695f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 696f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 697f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 698f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 699f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 700f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 701f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 702f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 703f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 704f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 705f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 706f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 707f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 708f904a612d9444ab36c07a8e619c113432e046f49vladlosev 709f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 710f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 711f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 712f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20> 713f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray20 { 714f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 715f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 716f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 717f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 718f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 719f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 720f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19_(v19), v20_(v20) {} 721f904a612d9444ab36c07a8e619c113432e046f49vladlosev 722f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 723f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 724524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 725524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 726524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 727524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 728524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 729524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 730524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)}; 731f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 732f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 733f904a612d9444ab36c07a8e619c113432e046f49vladlosev 734f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 735d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 736d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray20& other); 737d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 738f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 739f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 740f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 741f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 742f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 743f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 744f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 745f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 746f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 747f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 748f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 749f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 750f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 751f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 752f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 753f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 754f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 755f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 756f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 757f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 758f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 759f904a612d9444ab36c07a8e619c113432e046f49vladlosev 760f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 761f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 762f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 763f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 764f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21> 765f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray21 { 766f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 767f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 768f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 769f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 770f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 771f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 772f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} 773f904a612d9444ab36c07a8e619c113432e046f49vladlosev 774f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 775f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 776524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 777524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 778524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 779524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 780524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 781524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 782524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 783524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_)}; 784f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 785f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 786f904a612d9444ab36c07a8e619c113432e046f49vladlosev 787f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 788d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 789d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray21& other); 790d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 791f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 792f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 793f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 794f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 795f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 796f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 797f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 798f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 799f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 800f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 801f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 802f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 803f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 804f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 805f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 806f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 807f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 808f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 809f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 810f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 811f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 812f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 813f904a612d9444ab36c07a8e619c113432e046f49vladlosev 814f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 815f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 816f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 817f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 818f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22> 819f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray22 { 820f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 821f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 822f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 823f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), 824f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 825f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 826f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} 827f904a612d9444ab36c07a8e619c113432e046f49vladlosev 828f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 829f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 830524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 831524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 832524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 833524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 834524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 835524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 836524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 837524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_)}; 838f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 839f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 840f904a612d9444ab36c07a8e619c113432e046f49vladlosev 841f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 842d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 843d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray22& other); 844d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 845f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 846f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 847f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 848f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 849f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 850f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 851f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 852f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 853f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 854f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 855f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 856f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 857f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 858f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 859f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 860f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 861f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 862f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 863f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 864f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 865f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 866f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 867f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 868f904a612d9444ab36c07a8e619c113432e046f49vladlosev 869f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 870f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 871f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 872f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 873f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23> 874f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray23 { 875f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 876f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 877f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 878f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), 879f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 880f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 881f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 882f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23) {} 883f904a612d9444ab36c07a8e619c113432e046f49vladlosev 884f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 885f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 886524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 887524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 888524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 889524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 890524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 891524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 892524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 893524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)}; 894f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 895f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 896f904a612d9444ab36c07a8e619c113432e046f49vladlosev 897f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 898d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 899d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray23& other); 900d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 901f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 902f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 903f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 904f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 905f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 906f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 907f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 908f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 909f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 910f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 911f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 912f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 913f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 914f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 915f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 916f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 917f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 918f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 919f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 920f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 921f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 922f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 923f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 924f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 925f904a612d9444ab36c07a8e619c113432e046f49vladlosev 926f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 927f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 928f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 929f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 930f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24> 931f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray24 { 932f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 933f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 934f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 935f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), 936f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 937f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 938f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 939f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22_(v22), v23_(v23), v24_(v24) {} 940f904a612d9444ab36c07a8e619c113432e046f49vladlosev 941f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 942f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 943524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 944524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 945524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 946524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 947524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 948524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 949524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 950524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 951524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_)}; 952f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 953f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 954f904a612d9444ab36c07a8e619c113432e046f49vladlosev 955f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 956d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 957d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray24& other); 958d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 959f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 960f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 961f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 962f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 963f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 964f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 965f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 966f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 967f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 968f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 969f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 970f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 971f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 972f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 973f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 974f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 975f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 976f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 977f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 978f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 979f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 980f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 981f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 982f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 983f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 984f904a612d9444ab36c07a8e619c113432e046f49vladlosev 985f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 986f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 987f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 988f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 989f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25> 990f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray25 { 991f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 992f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 993f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 994f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 995f904a612d9444ab36c07a8e619c113432e046f49vladlosev T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 996f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 997f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 998f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} 999f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1000f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1001f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1002524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1003524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1004524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1005524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1006524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1007524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1008524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1009524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1010524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_)}; 1011f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1012f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1013f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1014f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1015d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1016d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray25& other); 1017d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1018f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1019f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1020f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1021f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1022f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1023f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1024f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1025f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1026f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1027f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1028f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1029f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1030f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1031f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1032f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1033f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1034f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1035f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1036f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1037f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1038f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1039f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1040f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1041f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1042f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1043f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1044f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1045f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1046f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1047f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1048f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1049f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1050f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26> 1051f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray26 { 1052f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1053f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1054f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1055f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1056f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 1057f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 1058f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 1059f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} 1060f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1061f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1062f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1063524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1064524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1065524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1066524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1067524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1068524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1069524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1070524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1071524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)}; 1072f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1073f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1074f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1075f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1076d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1077d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray26& other); 1078d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1079f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1080f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1081f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1082f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1083f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1084f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1085f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1086f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1087f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1088f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1089f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1090f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1091f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1092f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1093f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1094f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1095f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1096f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1097f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1098f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1099f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1100f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1101f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1102f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1103f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1104f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1105f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1106f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1107f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1108f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1109f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1110f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1111f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1112f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27> 1113f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray27 { 1114f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1115f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1116f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1117f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1118f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 1119f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 1120f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 1121f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 1122f904a612d9444ab36c07a8e619c113432e046f49vladlosev v26_(v26), v27_(v27) {} 1123f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1124f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1125f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1126524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1127524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1128524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1129524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1130524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1131524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1132524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1133524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1134524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1135524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_)}; 1136f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1137f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1138f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1139f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1140d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1141d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray27& other); 1142d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1143f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1144f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1145f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1146f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1147f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1148f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1149f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1150f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1151f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1152f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1153f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1154f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1155f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1156f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1157f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1158f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1159f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1160f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1161f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1162f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1163f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1164f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1165f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1166f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1167f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1168f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1169f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1170f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1171f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1172f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1173f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1174f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1175f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1176f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1177f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28> 1178f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray28 { 1179f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1180f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1181f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1182f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1183f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 1184f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 1185f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 1186f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 1187f904a612d9444ab36c07a8e619c113432e046f49vladlosev v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} 1188f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1189f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1190f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1191524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1192524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1193524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1194524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1195524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1196524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1197524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1198524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1199524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1200524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_)}; 1201f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1202f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1203f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1204f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1205d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1206d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray28& other); 1207d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1208f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1209f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1210f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1211f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1212f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1213f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1214f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1215f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1216f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1217f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1218f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1219f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1220f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1221f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1222f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1223f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1224f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1225f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1226f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1227f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1228f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1229f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1230f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1231f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1232f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1233f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1234f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1235f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1236f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1237f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1238f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1239f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1240f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1241f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1242f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1243f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29> 1244f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray29 { 1245f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1246f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1247f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1248f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1249f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 1250f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 1251f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 1252f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 1253f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} 1254f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1255f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1256f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1257524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1258524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1259524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1260524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1261524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1262524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1263524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1264524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1265524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1266524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)}; 1267f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1268f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1269f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1270f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1271d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1272d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray29& other); 1273d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1274f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1275f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1276f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1277f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1278f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1279f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1280f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1281f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1282f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1283f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1284f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1285f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1286f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1287f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1288f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1289f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1290f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1291f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1292f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1293f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1294f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1295f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1296f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1297f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1298f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1299f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1300f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1301f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1302f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1303f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1304f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1305f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1306f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1307f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1308f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1309f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1310f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30> 1311f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray30 { 1312f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1313f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1314f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1315f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1316f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), 1317f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 1318f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 1319f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 1320f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 1321f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30) {} 1322f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1323f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1324f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1325524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1326524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1327524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1328524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1329524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1330524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1331524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1332524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1333524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1334524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1335524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_)}; 1336f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1337f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1338f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1339f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1340d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1341d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray30& other); 1342d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1343f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1344f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1345f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1346f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1347f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1348f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1349f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1350f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1351f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1352f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1353f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1354f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1355f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1356f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1357f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1358f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1359f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1360f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1361f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1362f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1363f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1364f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1365f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1366f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1367f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1368f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1369f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1370f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1371f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1372f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1373f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1374f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1375f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1376f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1377f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1378f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1379f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1380f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1381f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31> 1382f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray31 { 1383f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1384f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1385f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1386f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1387f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), 1388f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 1389f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 1390f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 1391f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 1392f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30), v31_(v31) {} 1393f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1394f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1395f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1396524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1397524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1398524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1399524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1400524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1401524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1402524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1403524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1404524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1405524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1406524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_)}; 1407f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1408f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1409f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1410f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1411d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1412d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray31& other); 1413d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1414f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1415f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1416f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1417f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1418f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1419f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1420f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1421f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1422f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1423f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1424f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1425f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1426f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1427f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1428f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1429f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1430f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1431f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1432f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1433f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1434f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1435f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1436f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1437f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1438f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1439f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1440f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1441f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1442f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1443f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1444f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1445f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1446f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1447f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1448f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1449f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1450f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1451f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1452f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1453f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32> 1454f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray32 { 1455f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1456f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1457f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1458f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1459f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), 1460f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 1461f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 1462f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 1463f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 1464f904a612d9444ab36c07a8e619c113432e046f49vladlosev v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} 1465f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1466f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1467f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1468524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1469524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1470524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1471524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1472524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1473524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1474524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1475524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1476524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1477524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1478524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)}; 1479f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1480f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1481f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1482f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1483d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1484d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray32& other); 1485d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1486f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1487f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1488f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1489f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1490f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1491f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1492f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1493f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1494f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1495f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1496f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1497f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1498f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1499f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1500f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1501f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1502f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1503f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1504f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1505f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1506f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1507f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1508f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1509f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1510f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1511f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1512f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1513f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1514f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1515f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1516f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1517f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1518f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1519f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1520f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1521f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1522f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1523f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1524f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1525f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1526f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33> 1527f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray33 { 1528f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1529f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1530f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1531f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1532f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, 1533f904a612d9444ab36c07a8e619c113432e046f49vladlosev T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 1534f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 1535f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 1536f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 1537f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 1538f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33) {} 1539f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1540f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1541f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1542524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1543524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1544524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1545524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1546524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1547524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1548524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1549524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1550524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1551524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1552524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1553524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_)}; 1554f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1555f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1556f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1557f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1558d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1559d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray33& other); 1560d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1561f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1562f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1563f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1564f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1565f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1566f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1567f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1568f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1569f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1570f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1571f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1572f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1573f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1574f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1575f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1576f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1577f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1578f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1579f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1580f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1581f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1582f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1583f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1584f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1585f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1586f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1587f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1588f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1589f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1590f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1591f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1592f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1593f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1594f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1595f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1596f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1597f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1598f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1599f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1600f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1601f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1602f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34> 1603f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray34 { 1604f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1605f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1606f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1607f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1608f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1609f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 1610f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 1611f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 1612f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 1613f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 1614f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33), v34_(v34) {} 1615f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1616f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1617f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1618524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1619524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1620524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1621524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1622524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1623524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1624524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1625524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1626524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1627524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1628524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1629524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_)}; 1630f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1631f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1632f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1633f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1634d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1635d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray34& other); 1636d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1637f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1638f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1639f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1640f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1641f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1642f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1643f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1644f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1645f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1646f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1647f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1648f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1649f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1650f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1651f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1652f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1653f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1654f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1655f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1656f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1657f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1658f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1659f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1660f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1661f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1662f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1663f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1664f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1665f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1666f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1667f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1668f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1669f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1670f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 1671f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1672f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1673f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1674f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1675f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1676f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1677f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1678f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1679f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35> 1680f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray35 { 1681f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1682f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1683f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1684f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1685f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1686f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 1687f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 1688f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 1689f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 1690f904a612d9444ab36c07a8e619c113432e046f49vladlosev v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), 1691f904a612d9444ab36c07a8e619c113432e046f49vladlosev v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} 1692f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1693f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1694f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1695524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1696524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1697524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1698524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1699524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1700524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1701524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1702524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1703524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1704524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1705524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1706524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)}; 1707f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1708f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1709f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1710f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1711d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1712d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray35& other); 1713d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1714f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1715f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1716f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1717f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1718f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1719f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1720f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1721f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1722f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1723f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1724f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1725f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1726f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1727f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1728f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1729f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1730f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1731f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1732f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1733f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1734f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1735f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1736f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1737f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1738f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1739f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1740f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1741f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1742f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1743f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1744f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1745f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1746f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1747f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 1748f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 1749f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1750f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1751f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1752f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1753f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1754f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1755f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1756f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1757f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1758f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36> 1759f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray36 { 1760f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1761f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1762f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1763f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1764f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1765f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 1766f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 1767f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 1768f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 1769f904a612d9444ab36c07a8e619c113432e046f49vladlosev v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), 1770f904a612d9444ab36c07a8e619c113432e046f49vladlosev v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} 1771f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1772f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1773f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1774524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1775524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1776524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1777524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1778524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1779524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1780524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1781524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1782524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1783524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1784524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1785524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 1786524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_)}; 1787f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1788f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1789f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1790f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1791d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1792d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray36& other); 1793d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1794f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1795f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1796f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1797f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1798f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1799f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1800f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1801f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1802f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1803f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1804f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1805f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1806f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1807f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1808f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1809f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1810f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1811f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1812f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1813f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1814f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1815f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1816f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1817f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1818f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1819f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1820f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1821f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1822f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1823f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1824f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1825f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1826f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1827f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 1828f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 1829f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 1830f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1831f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1832f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1833f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1834f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1835f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1836f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1837f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1838f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1839f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37> 1840f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray37 { 1841f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1842f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1843f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1844f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1845f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1846f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 1847f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 1848f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 1849f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 1850f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), 1851f904a612d9444ab36c07a8e619c113432e046f49vladlosev v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), 1852f904a612d9444ab36c07a8e619c113432e046f49vladlosev v36_(v36), v37_(v37) {} 1853f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1854f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1855f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1856524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1857524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1858524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1859524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1860524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1861524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1862524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1863524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1864524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1865524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1866524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1867524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 1868524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_)}; 1869f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1870f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1871f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1872f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1873d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1874d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray37& other); 1875d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1876f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1877f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1878f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1879f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1880f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1881f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1882f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1883f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1884f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1885f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1886f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1887f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1888f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1889f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1890f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1891f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1892f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1893f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1894f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1895f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1896f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1897f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1898f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1899f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1900f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1901f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1902f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1903f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1904f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1905f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1906f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1907f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1908f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1909f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 1910f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 1911f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 1912f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 1913f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1914f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1915f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1916f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1917f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1918f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1919f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1920f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1921f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1922f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38> 1923f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray38 { 1924f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 1925f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1926f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1927f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1928f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1929f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), 1930f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 1931f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 1932f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 1933f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 1934f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 1935f904a612d9444ab36c07a8e619c113432e046f49vladlosev v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} 1936f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1937f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 1938f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 1939524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 1940524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 1941524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 1942524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 1943524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 1944524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 1945524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 1946524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 1947524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 1948524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 1949524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 1950524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 1951524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)}; 1952f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 1953f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 1954f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1955f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 1956d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 1957d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray38& other); 1958d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 1959f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 1960f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 1961f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 1962f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 1963f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 1964f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 1965f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 1966f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 1967f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 1968f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 1969f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 1970f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 1971f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 1972f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 1973f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 1974f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 1975f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 1976f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 1977f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 1978f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 1979f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 1980f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 1981f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 1982f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 1983f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 1984f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 1985f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 1986f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 1987f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 1988f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 1989f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 1990f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 1991f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 1992f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 1993f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 1994f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 1995f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 1996f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 1997f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 1998f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1999f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2000f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2001f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2002f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2003f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2004f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2005f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2006f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39> 2007f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray39 { 2008f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2009f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2010f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2011f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2012f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2013f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), 2014f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 2015f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 2016f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 2017f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 2018f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 2019f904a612d9444ab36c07a8e619c113432e046f49vladlosev v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} 2020f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2021f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2022f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2023524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2024524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2025524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2026524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2027524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2028524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2029524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2030524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2031524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2032524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2033524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2034524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2035524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2036524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_)}; 2037f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2038f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2039f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2040f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2041d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2042d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray39& other); 2043d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2044f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2045f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2046f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2047f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2048f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2049f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2050f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2051f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2052f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2053f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2054f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2055f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2056f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2057f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2058f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2059f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2060f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2061f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2062f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2063f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2064f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2065f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2066f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2067f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2068f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2069f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2070f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2071f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2072f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2073f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2074f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2075f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2076f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2077f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2078f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2079f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2080f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2081f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2082f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2083f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2084f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2085f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2086f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2087f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2088f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2089f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2090f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2091f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2092f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40> 2093f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray40 { 2094f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2095f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2096f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2097f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2098f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2099f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), 2100f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 2101f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 2102f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 2103f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 2104f904a612d9444ab36c07a8e619c113432e046f49vladlosev v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), 2105f904a612d9444ab36c07a8e619c113432e046f49vladlosev v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), 2106f904a612d9444ab36c07a8e619c113432e046f49vladlosev v40_(v40) {} 2107f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2108f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2109f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2110524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2111524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2112524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2113524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2114524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2115524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2116524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2117524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2118524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2119524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2120524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2121524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2122524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2123524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_)}; 2124f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2125f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2126f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2127f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2128d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2129d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray40& other); 2130d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2131f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2132f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2133f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2134f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2135f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2136f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2137f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2138f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2139f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2140f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2141f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2142f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2143f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2144f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2145f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2146f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2147f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2148f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2149f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2150f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2151f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2152f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2153f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2154f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2155f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2156f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2157f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2158f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2159f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2160f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2161f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2162f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2163f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2164f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2165f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2166f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2167f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2168f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2169f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2170f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2171f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2172f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2173f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2174f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2175f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2176f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2177f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2178f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2179f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2180f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2181f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41> 2182f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray41 { 2183f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2184f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2185f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2186f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2187f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2188f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, 2189f904a612d9444ab36c07a8e619c113432e046f49vladlosev T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2190f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 2191f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 2192f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 2193f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 2194f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 2195f904a612d9444ab36c07a8e619c113432e046f49vladlosev v39_(v39), v40_(v40), v41_(v41) {} 2196f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2197f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2198f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2199524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2200524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2201524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2202524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2203524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2204524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2205524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2206524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2207524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2208524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2209524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2210524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2211524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2212524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)}; 2213f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2214f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2215f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2216f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2217d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2218d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray41& other); 2219d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2220f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2221f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2222f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2223f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2224f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2225f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2226f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2227f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2228f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2229f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2230f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2231f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2232f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2233f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2234f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2235f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2236f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2237f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2238f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2239f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2240f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2241f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2242f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2243f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2244f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2245f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2246f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2247f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2248f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2249f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2250f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2251f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2252f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2253f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2254f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2255f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2256f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2257f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2258f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2259f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2260f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2261f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2262f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2263f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2264f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2265f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2266f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2267f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2268f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2269f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2270f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2271f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42> 2272f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray42 { 2273f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2274f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2275f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2276f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2277f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2278f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2279f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2280f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 2281f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 2282f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 2283f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 2284f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 2285f904a612d9444ab36c07a8e619c113432e046f49vladlosev v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} 2286f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2287f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2288f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2289524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2290524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2291524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2292524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2293524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2294524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2295524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2296524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2297524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2298524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2299524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2300524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2301524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2302524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2303524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_)}; 2304f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2305f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2306f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2307f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2308d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2309d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray42& other); 2310d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2311f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2312f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2313f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2314f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2315f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2316f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2317f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2318f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2319f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2320f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2321f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2322f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2323f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2324f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2325f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2326f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2327f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2328f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2329f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2330f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2331f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2332f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2333f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2334f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2335f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2336f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2337f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2338f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2339f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2340f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2341f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2342f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2343f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2344f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2345f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2346f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2347f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2348f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2349f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2350f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2351f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2352f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2353f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2354f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2355f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2356f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2357f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2358f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2359f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2360f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2361f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2362f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2363f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43> 2364f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray43 { 2365f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2366f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2367f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2368f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2369f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2370f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2371f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 2372f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 2373f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 2374f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 2375f904a612d9444ab36c07a8e619c113432e046f49vladlosev v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), 2376f904a612d9444ab36c07a8e619c113432e046f49vladlosev v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), 2377f904a612d9444ab36c07a8e619c113432e046f49vladlosev v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} 2378f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2379f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2380f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2381524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2382524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2383524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2384524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2385524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2386524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2387524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2388524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2389524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2390524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2391524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2392524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2393524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2394524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2395524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_)}; 2396f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2397f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2398f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2399f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2400d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2401d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray43& other); 2402d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2403f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2404f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2405f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2406f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2407f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2408f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2409f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2410f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2411f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2412f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2413f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2414f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2415f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2416f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2417f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2418f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2419f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2420f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2421f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2422f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2423f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2424f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2425f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2426f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2427f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2428f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2429f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2430f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2431f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2432f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2433f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2434f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2435f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2436f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2437f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2438f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2439f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2440f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2441f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2442f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2443f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2444f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2445f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2446f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2447f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2448f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2449f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2450f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2451f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2452f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2453f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2454f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2455f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2456f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44> 2457f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray44 { 2458f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2459f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2460f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2461f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2462f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2463f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2464f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 2465f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 2466f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 2467f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 2468f904a612d9444ab36c07a8e619c113432e046f49vladlosev v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), 2469f904a612d9444ab36c07a8e619c113432e046f49vladlosev v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), 2470f904a612d9444ab36c07a8e619c113432e046f49vladlosev v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), 2471f904a612d9444ab36c07a8e619c113432e046f49vladlosev v43_(v43), v44_(v44) {} 2472f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2473f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2474f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2475524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2476524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2477524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2478524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2479524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2480524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2481524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2482524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2483524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2484524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2485524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2486524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2487524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2488524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2489524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)}; 2490f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2491f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2492f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2493f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2494d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2495d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray44& other); 2496d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2497f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2498f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2499f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2500f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2501f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2502f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2503f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2504f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2505f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2506f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2507f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2508f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2509f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2510f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2511f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2512f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2513f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2514f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2515f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2516f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2517f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2518f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2519f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2520f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2521f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2522f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2523f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2524f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2525f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2526f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2527f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2528f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2529f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2530f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2531f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2532f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2533f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2534f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2535f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2536f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2537f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2538f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2539f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2540f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 2541f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2542f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2543f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2544f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2545f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2546f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2547f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2548f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2549f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2550f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2551f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45> 2552f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray45 { 2553f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2554f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2555f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2556f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2557f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2558f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2559f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 2560f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 2561f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 2562f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 2563f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), 2564f904a612d9444ab36c07a8e619c113432e046f49vladlosev v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), 2565f904a612d9444ab36c07a8e619c113432e046f49vladlosev v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), 2566f904a612d9444ab36c07a8e619c113432e046f49vladlosev v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} 2567f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2568f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2569f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2570524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2571524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2572524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2573524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2574524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2575524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2576524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2577524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2578524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2579524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2580524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2581524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2582524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2583524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2584524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 2585524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_)}; 2586f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2587f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2588f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2589f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2590d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2591d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray45& other); 2592d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2593f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2594f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2595f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2596f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2597f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2598f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2599f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2600f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2601f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2602f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2603f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2604f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2605f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2606f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2607f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2608f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2609f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2610f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2611f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2612f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2613f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2614f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2615f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2616f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2617f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2618f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2619f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2620f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2621f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2622f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2623f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2624f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2625f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2626f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2627f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2628f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2629f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2630f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2631f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2632f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2633f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2634f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2635f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2636f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 2637f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 2638f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2639f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2640f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2641f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2642f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2643f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2644f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2645f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2646f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2647f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2648f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 2649f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46> 2650f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray46 { 2651f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2652f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2653f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2654f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2655f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2656f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2657f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), 2658f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 2659f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 2660f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 2661f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 2662f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 2663f904a612d9444ab36c07a8e619c113432e046f49vladlosev v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), 2664f904a612d9444ab36c07a8e619c113432e046f49vladlosev v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} 2665f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2666f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2667f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2668524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2669524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2670524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2671524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2672524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2673524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2674524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2675524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2676524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2677524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2678524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2679524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2680524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2681524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2682524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 2683524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_), static_cast<T>(v46_)}; 2684f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2685f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2686f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2687f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2688d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2689d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray46& other); 2690d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2691f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2692f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2693f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2694f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2695f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2696f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2697f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2698f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2699f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2700f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2701f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2702f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2703f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2704f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2705f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2706f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2707f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2708f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2709f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2710f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2711f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2712f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2713f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2714f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2715f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2716f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2717f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2718f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2719f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2720f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2721f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2722f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2723f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2724f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2725f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2726f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2727f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2728f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2729f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2730f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2731f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2732f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2733f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2734f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 2735f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 2736f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T46 v46_; 2737f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2738f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2739f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2740f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2741f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2742f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2743f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2744f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2745f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2746f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2747f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 2748f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47> 2749f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray47 { 2750f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2751f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2752f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2753f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2754f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2755f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2756f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), 2757f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 2758f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 2759f904a612d9444ab36c07a8e619c113432e046f49vladlosev v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 2760f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 2761f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 2762f904a612d9444ab36c07a8e619c113432e046f49vladlosev v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), 2763f904a612d9444ab36c07a8e619c113432e046f49vladlosev v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), 2764f904a612d9444ab36c07a8e619c113432e046f49vladlosev v47_(v47) {} 2765f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2766f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2767f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2768524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2769524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2770524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2771524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2772524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2773524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2774524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2775524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2776524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2777524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2778524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2779524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2780524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2781524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2782524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 2783524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)}; 2784f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2785f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2786f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2787f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2788d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2789d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray47& other); 2790d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2791f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2792f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2793f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2794f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2795f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2796f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2797f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2798f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2799f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2800f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2801f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2802f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2803f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2804f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2805f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2806f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2807f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2808f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2809f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2810f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2811f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2812f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2813f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2814f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2815f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2816f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2817f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2818f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2819f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2820f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2821f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2822f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2823f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2824f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2825f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2826f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2827f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2828f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2829f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2830f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2831f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2832f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2833f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2834f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 2835f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 2836f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T46 v46_; 2837f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T47 v47_; 2838f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2839f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2840f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2841f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2842f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2843f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2844f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2845f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2846f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2847f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2848f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 2849f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48> 2850f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray48 { 2851f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2852f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2853f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2854f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2855f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2856f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2857f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), 2858f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 2859f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 2860f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 2861f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 2862f904a612d9444ab36c07a8e619c113432e046f49vladlosev v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), 2863f904a612d9444ab36c07a8e619c113432e046f49vladlosev v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), 2864f904a612d9444ab36c07a8e619c113432e046f49vladlosev v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), 2865f904a612d9444ab36c07a8e619c113432e046f49vladlosev v46_(v46), v47_(v47), v48_(v48) {} 2866f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2867f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2868f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2869524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2870524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2871524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2872524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2873524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2874524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2875524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2876524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2877524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2878524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2879524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2880524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2881524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2882524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2883524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 2884524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), 2885524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v48_)}; 2886f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2887f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2888f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2889f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2890d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2891d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray48& other); 2892d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2893f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2894f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2895f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2896f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 2897f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 2898f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 2899f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 2900f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 2901f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 2902f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 2903f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 2904f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 2905f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 2906f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 2907f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 2908f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 2909f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 2910f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 2911f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 2912f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 2913f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 2914f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 2915f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 2916f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 2917f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 2918f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 2919f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 2920f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 2921f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 2922f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 2923f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 2924f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 2925f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 2926f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 2927f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 2928f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 2929f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 2930f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 2931f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 2932f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 2933f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 2934f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 2935f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 2936f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 2937f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 2938f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T46 v46_; 2939f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T47 v47_; 2940f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T48 v48_; 2941f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 2942f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2943f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2944f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 2945f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 2946f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 2947f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 2948f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 2949f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 2950f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 2951f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 2952f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48, typename T49> 2953f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray49 { 2954f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 2955f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2956f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 2957f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 2958f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 2959f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 2960f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, 2961f904a612d9444ab36c07a8e619c113432e046f49vladlosev T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2962f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 2963f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 2964f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 2965f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 2966f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 2967f904a612d9444ab36c07a8e619c113432e046f49vladlosev v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), 2968f904a612d9444ab36c07a8e619c113432e046f49vladlosev v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} 2969f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2970f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 2971f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 2972524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 2973524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 2974524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 2975524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 2976524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 2977524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 2978524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 2979524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 2980524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 2981524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 2982524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 2983524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 2984524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 2985524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 2986524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 2987524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), 2988524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v48_), static_cast<T>(v49_)}; 2989f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 2990f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 2991f904a612d9444ab36c07a8e619c113432e046f49vladlosev 2992f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 2993d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 2994d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray49& other); 2995d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 2996f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 2997f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 2998f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 2999f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 3000f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 3001f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 3002f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 3003f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 3004f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 3005f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 3006f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 3007f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 3008f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 3009f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 3010f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 3011f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 3012f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 3013f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 3014f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 3015f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 3016f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 3017f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 3018f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 3019f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 3020f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 3021f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 3022f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 3023f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 3024f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 3025f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 3026f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 3027f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 3028f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 3029f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 3030f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 3031f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 3032f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 3033f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 3034f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 3035f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 3036f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 3037f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 3038f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 3039f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 3040f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 3041f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T46 v46_; 3042f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T47 v47_; 3043f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T48 v48_; 3044f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T49 v49_; 3045f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 3046f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3047f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3048f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 3049f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 3050f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 3051f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 3052f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 3053f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 3054f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 3055f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 3056f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48, typename T49, typename T50> 3057f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass ValueArray50 { 3058f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3059f904a612d9444ab36c07a8e619c113432e046f49vladlosev ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 3060f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 3061f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 3062f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 3063f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 3064f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, 3065f904a612d9444ab36c07a8e619c113432e046f49vladlosev T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 3066f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 3067f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 3068f904a612d9444ab36c07a8e619c113432e046f49vladlosev v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 3069f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 3070f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 3071f904a612d9444ab36c07a8e619c113432e046f49vladlosev v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), 3072f904a612d9444ab36c07a8e619c113432e046f49vladlosev v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} 3073f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3074f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T> 3075f904a612d9444ab36c07a8e619c113432e046f49vladlosev operator ParamGenerator<T>() const { 3076524cc4e19491029979f7b18b9451b2a6105131edvladlosev const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), 3077524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), 3078524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), 3079524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), 3080524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), 3081524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), 3082524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), 3083524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), 3084524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), 3085524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), 3086524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), 3087524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), 3088524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), 3089524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), 3090524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), 3091524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), 3092524cc4e19491029979f7b18b9451b2a6105131edvladlosev static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)}; 3093f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array); 3094f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3095f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3096f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3097d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3098d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const ValueArray50& other); 3099d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3100f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T1 v1_; 3101f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T2 v2_; 3102f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T3 v3_; 3103f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T4 v4_; 3104f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T5 v5_; 3105f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T6 v6_; 3106f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T7 v7_; 3107f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T8 v8_; 3108f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T9 v9_; 3109f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T10 v10_; 3110f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T11 v11_; 3111f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T12 v12_; 3112f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T13 v13_; 3113f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T14 v14_; 3114f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T15 v15_; 3115f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T16 v16_; 3116f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T17 v17_; 3117f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T18 v18_; 3118f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T19 v19_; 3119f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T20 v20_; 3120f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T21 v21_; 3121f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T22 v22_; 3122f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T23 v23_; 3123f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T24 v24_; 3124f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T25 v25_; 3125f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T26 v26_; 3126f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T27 v27_; 3127f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T28 v28_; 3128f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T29 v29_; 3129f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T30 v30_; 3130f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T31 v31_; 3131f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T32 v32_; 3132f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T33 v33_; 3133f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T34 v34_; 3134f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T35 v35_; 3135f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T36 v36_; 3136f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T37 v37_; 3137f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T38 v38_; 3138f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T39 v39_; 3139f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T40 v40_; 3140f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T41 v41_; 3141f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T42 v42_; 3142f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T43 v43_; 3143f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T44 v44_; 3144f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T45 v45_; 3145f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T46 v46_; 3146f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T47 v47_; 3147f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T48 v48_; 3148f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T49 v49_; 3149f904a612d9444ab36c07a8e619c113432e046f49vladlosev const T50 v50_; 3150f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 3151f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3152733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_HAS_COMBINE 3153f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 3154f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 3155f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Generates values from the Cartesian product of values produced 3156f904a612d9444ab36c07a8e619c113432e046f49vladlosev// by the argument generators. 3157f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 3158f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2> 3159f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator2 3160e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > { 3161f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3162e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2> ParamType; 3163f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3164f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator2(const ParamGenerator<T1>& g1, 3165f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2) 3166f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2) {} 3167f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator2() {} 3168f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3169f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3170f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); 3171f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3172f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3173f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); 3174f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3175f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3176f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3177f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3178f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3179f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3180f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3181f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3182f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3183f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2) 3184f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3185f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3186f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { 3187f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3188f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3189f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3190f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3191f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3192f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3193f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3194f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3195f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3196f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3197f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3198f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3199f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3200f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3201f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3202f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3203f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3204f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3205f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3206f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 3207f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3208f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 3209f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 3210f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 3211f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 3212f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 3213f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 3214f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 3215f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 3216f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 3217f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 3218f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 3219f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 3220f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 3221f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 3222f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 3223f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_); 3224f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3225f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3226f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3227f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 3228f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 3229f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 3230f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 3231f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 3232f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 3233f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 3234f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_) { 3235f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3236f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3237f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3238f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 3239f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 3240f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_); 3241f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3242f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 3243f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 3244f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 3245f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 3246f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 3247f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_; 3248f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3249f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3250d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3251d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 3252d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3253f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 3254f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 3255f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 3256f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 3257f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 3258f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 3259f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 3260f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 3261f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 3262f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 3263d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator2::Iterator 3264d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3265d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3266d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator2& other); 3267f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3268f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 3269f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 3270d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator2 3271f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3272f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3273f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3> 3274f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator3 3275e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > { 3276f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3277e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3> ParamType; 3278f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3279f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator3(const ParamGenerator<T1>& g1, 3280f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3) 3281f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3) {} 3282f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator3() {} 3283f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3284f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3285f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 3286f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin()); 3287f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3288f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3289f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); 3290f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3291f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3292f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3293f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3294f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3295f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3296f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3297f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3298f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3299f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 3300f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 3301f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3) 3302f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3303f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3304f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 3305f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { 3306f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3307f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3308f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3309f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3310f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3311f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3312f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3313f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3314f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3315f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3316f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3317f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 3318f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 3319f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 3320f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3321f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3322f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3323f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3324f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3325f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3326f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3327f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3328f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3329f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 3330f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3331f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 3332f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 3333f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 3334f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 3335f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 3336f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 3337f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 3338f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 3339f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 3340f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 3341f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 3342f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 3343f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 3344f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 3345f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 3346f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 3347f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_); 3348f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3349f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3350f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3351f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 3352f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 3353f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 3354f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 3355f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 3356f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 3357f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 3358f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 3359f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 3360f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 3361f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_) { 3362f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3363f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3364f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3365f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 3366f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 3367f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_); 3368f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3369f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 3370f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 3371f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 3372f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 3373f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 3374f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 3375f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_; 3376f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3377f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3378d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3379d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 3380d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3381f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 3382f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 3383f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 3384f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 3385f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 3386f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 3387f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 3388f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 3389f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 3390f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 3391f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 3392f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 3393f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 3394d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator3::Iterator 3395d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3396d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3397d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator3& other); 3398f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3399f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 3400f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 3401f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 3402d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator3 3403f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3404f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3405f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4> 3406f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator4 3407e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > { 3408f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3409e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4> ParamType; 3410f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3411f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator4(const ParamGenerator<T1>& g1, 3412f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 3413f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4) 3414f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} 3415f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator4() {} 3416f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3417f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3418f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 3419f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin()); 3420f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3421f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3422f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 3423f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end()); 3424f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3425f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3426f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3427f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3428f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3429f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3430f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3431f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3432f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3433f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 3434f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 3435f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 3436f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 3437f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4) 3438f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3439f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3440f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 3441f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 3442f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { 3443f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3444f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3445f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3446f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3447f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3448f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3449f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3450f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3451f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3452f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3453f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3454f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 3455f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 3456f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 3457f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 3458f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3459f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 3460f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 3461f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3462f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3463f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3464f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3465f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3466f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3467f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3468f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3469f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3470f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 3471f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3472f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 3473f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 3474f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 3475f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 3476f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 3477f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 3478f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 3479f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 3480f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 3481f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 3482f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 3483f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 3484f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 3485f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 3486f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 3487f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 3488f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 3489f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_); 3490f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3491f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3492f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3493f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 3494f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 3495f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 3496f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 3497f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 3498f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 3499f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 3500f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 3501f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 3502f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 3503f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 3504f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 3505f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 3506f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_) { 3507f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3508f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3509f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3510f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 3511f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 3512f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 3513f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_); 3514f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3515f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 3516f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 3517f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 3518f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 3519f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 3520f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 3521f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 3522f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_; 3523f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3524f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3525d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3526d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 3527d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3528f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 3529f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 3530f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 3531f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 3532f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 3533f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 3534f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 3535f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 3536f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 3537f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 3538f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 3539f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 3540f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 3541f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 3542f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 3543f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 3544d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator4::Iterator 3545d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3546d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3547d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator4& other); 3548f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3549f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 3550f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 3551f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 3552f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 3553d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator4 3554f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3555f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3556f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 3557f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator5 3558e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > { 3559f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3560e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType; 3561f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3562f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator5(const ParamGenerator<T1>& g1, 3563f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 3564f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5) 3565f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} 3566f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator5() {} 3567f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3568f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3569f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 3570f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); 3571f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3572f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3573f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 3574f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end()); 3575f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3576f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3577f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3578f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3579f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3580f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3581f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3582f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3583f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3584f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 3585f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 3586f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 3587f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 3588f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 3589f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 3590f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5) 3591f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3592f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3593f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 3594f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 3595f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 3596f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { 3597f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3598f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3599f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3600f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3601f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3602f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3603f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3604f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3605f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3606f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3607f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3608f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 3609f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 3610f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 3611f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 3612f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3613f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 3614f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 3615f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 3616f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3617f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 3618f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 3619f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3620f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3621f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3622f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3623f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3624f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3625f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3626f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3627f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3628f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 3629f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3630f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 3631f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 3632f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 3633f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 3634f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 3635f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 3636f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 3637f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 3638f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 3639f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 3640f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 3641f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 3642f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 3643f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 3644f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 3645f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 3646f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 3647f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 3648f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_); 3649f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3650f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3651f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3652f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 3653f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 3654f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 3655f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 3656f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 3657f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 3658f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 3659f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 3660f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 3661f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 3662f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 3663f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 3664f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 3665f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 3666f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 3667f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 3668f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_) { 3669f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3670f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3671f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3672f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 3673f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 3674f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 3675f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_); 3676f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3677f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 3678f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 3679f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 3680f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 3681f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 3682f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 3683f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 3684f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 3685f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_; 3686f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3687f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3688d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3689d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 3690d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3691f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 3692f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 3693f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 3694f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 3695f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 3696f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 3697f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 3698f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 3699f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 3700f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 3701f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 3702f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 3703f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 3704f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 3705f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 3706f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 3707f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 3708f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 3709f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 3710d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator5::Iterator 3711d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3712d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3713d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator5& other); 3714f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3715f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 3716f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 3717f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 3718f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 3719f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 3720d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator5 3721f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3722f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3723f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3724f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6> 3725f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator6 3726e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, 3727f904a612d9444ab36c07a8e619c113432e046f49vladlosev T6> > { 3728f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3729e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType; 3730f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3731f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator6(const ParamGenerator<T1>& g1, 3732f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 3733f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 3734f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6) 3735f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} 3736f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator6() {} 3737f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3738f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3739f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 3740f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); 3741f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3742f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3743f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 3744f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); 3745f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3746f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3747f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3748f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3749f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3750f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3751f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3752f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3753f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3754f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 3755f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 3756f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 3757f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 3758f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 3759f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 3760f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5, 3761f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, 3762f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator& current6) 3763f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3764f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3765f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 3766f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 3767f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 3768f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 3769f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { 3770f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3771f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3772f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3773f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3774f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3775f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3776f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3777f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3778f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3779f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3780f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3781f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current6_; 3782f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current6_ == end6_) { 3783f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ = begin6_; 3784f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 3785f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3786f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 3787f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 3788f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 3789f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3790f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 3791f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 3792f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 3793f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3794f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 3795f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 3796f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3797f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3798f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3799f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3800f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3801f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3802f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3803f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3804f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3805f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 3806f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3807f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 3808f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 3809f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 3810f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 3811f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 3812f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 3813f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 3814f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 3815f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 3816f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 3817f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 3818f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 3819f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 3820f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 3821f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 3822f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 3823f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 3824f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 3825f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_ && 3826f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == typed_other->current6_); 3827f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3828f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3829f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3830f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 3831f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 3832f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 3833f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 3834f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 3835f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 3836f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 3837f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 3838f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 3839f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 3840f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 3841f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 3842f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 3843f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 3844f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 3845f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 3846f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_), 3847f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(other.begin6_), 3848f904a612d9444ab36c07a8e619c113432e046f49vladlosev end6_(other.end6_), 3849f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_(other.current6_) { 3850f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3851f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3852f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3853f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 3854f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 3855f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 3856f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_, *current6_); 3857f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3858f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 3859f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 3860f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 3861f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 3862f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 3863f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 3864f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 3865f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 3866f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_ || 3867f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == end6_; 3868f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3869f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3870d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3871d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 3872d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3873f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 3874f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 3875f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 3876f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 3877f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 3878f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 3879f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 3880f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 3881f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 3882f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 3883f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 3884f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 3885f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 3886f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 3887f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 3888f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 3889f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 3890f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 3891f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator begin6_; 3892f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator end6_; 3893f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T6>::iterator current6_; 3894f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 3895d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator6::Iterator 3896d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 3897d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 3898d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator6& other); 3899f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3900f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 3901f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 3902f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 3903f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 3904f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 3905f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6> g6_; 3906d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator6 3907f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3908f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3909f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3910f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7> 3911f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator7 3912e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, 3913f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7> > { 3914f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3915e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType; 3916f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3917f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator7(const ParamGenerator<T1>& g1, 3918f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 3919f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 3920f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7) 3921f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} 3922f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator7() {} 3923f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3924f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 3925f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 3926f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 3927f904a612d9444ab36c07a8e619c113432e046f49vladlosev g7_.begin()); 3928f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3929f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 3930f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 3931f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); 3932f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3933f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3934f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 3935f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 3936f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 3937f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 3938f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 3939f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 3940f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 3941f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 3942f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 3943f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 3944f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 3945f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 3946f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 3947f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5, 3948f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, 3949f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator& current6, 3950f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7>& g7, 3951f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator& current7) 3952f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 3953f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 3954f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 3955f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 3956f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 3957f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 3958f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 3959f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { 3960f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3961f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3962f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 3963f904a612d9444ab36c07a8e619c113432e046f49vladlosev 3964f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 3965f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 3966f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3967f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 3968f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 3969f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 3970f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 3971f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current7_; 3972f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current7_ == end7_) { 3973f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ = begin7_; 3974f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current6_; 3975f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3976f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current6_ == end6_) { 3977f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ = begin6_; 3978f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 3979f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3980f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 3981f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 3982f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 3983f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3984f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 3985f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 3986f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 3987f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3988f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 3989f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 3990f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 3991f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3992f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 3993f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 3994f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 3995f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3996f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 3997f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 3998f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 3999f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 4000f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4001f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 4002f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 4003f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 4004f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 4005f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 4006f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 4007f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 4008f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 4009f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 4010f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 4011f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 4012f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 4013f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 4014f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 4015f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 4016f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 4017f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 4018f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 4019f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_ && 4020f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == typed_other->current6_ && 4021f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == typed_other->current7_); 4022f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4023f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4024f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4025f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 4026f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 4027f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 4028f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 4029f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 4030f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 4031f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 4032f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 4033f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 4034f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 4035f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 4036f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 4037f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 4038f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 4039f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 4040f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 4041f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_), 4042f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(other.begin6_), 4043f904a612d9444ab36c07a8e619c113432e046f49vladlosev end6_(other.end6_), 4044f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_(other.current6_), 4045f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(other.begin7_), 4046f904a612d9444ab36c07a8e619c113432e046f49vladlosev end7_(other.end7_), 4047f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_(other.current7_) { 4048f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4049f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4050f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4051f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 4052f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 4053f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 4054f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_, *current6_, *current7_); 4055f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4056f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 4057f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 4058f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 4059f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 4060f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 4061f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 4062f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 4063f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 4064f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_ || 4065f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == end6_ || 4066f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == end7_; 4067f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4068f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4069d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4070d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 4071d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4072f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 4073f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 4074f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 4075f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 4076f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 4077f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 4078f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 4079f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 4080f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 4081f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 4082f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 4083f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 4084f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 4085f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 4086f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 4087f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 4088f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 4089f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 4090f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator begin6_; 4091f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator end6_; 4092f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T6>::iterator current6_; 4093f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator begin7_; 4094f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator end7_; 4095f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T7>::iterator current7_; 4096f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 4097d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator7::Iterator 4098d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4099d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4100d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator7& other); 4101f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4102f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 4103f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 4104f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 4105f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 4106f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 4107f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6> g6_; 4108f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7> g7_; 4109d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator7 4110f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4111f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4112f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4113f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8> 4114f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator8 4115e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, 4116f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7, T8> > { 4117f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4118e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType; 4119f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4120f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator8(const ParamGenerator<T1>& g1, 4121f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 4122f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 4123f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 4124f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8) 4125f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), 4126f904a612d9444ab36c07a8e619c113432e046f49vladlosev g8_(g8) {} 4127f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator8() {} 4128f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4129f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 4130f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 4131f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 4132f904a612d9444ab36c07a8e619c113432e046f49vladlosev g7_.begin(), g8_, g8_.begin()); 4133f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4134f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 4135f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 4136f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 4137f904a612d9444ab36c07a8e619c113432e046f49vladlosev g8_.end()); 4138f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4139f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4140f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4141f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 4142f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4143f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 4144f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 4145f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 4146f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 4147f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 4148f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 4149f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 4150f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 4151f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 4152f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 4153f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5, 4154f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, 4155f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator& current6, 4156f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7>& g7, 4157f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator& current7, 4158f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8, 4159f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator& current8) 4160f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 4161f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 4162f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 4163f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 4164f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 4165f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 4166f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 4167f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 4168f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { 4169f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4170f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4171f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 4172f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4173f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 4174f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 4175f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4176f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 4177f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 4178f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 4179f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 4180f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current8_; 4181f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current8_ == end8_) { 4182f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ = begin8_; 4183f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current7_; 4184f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4185f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current7_ == end7_) { 4186f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ = begin7_; 4187f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current6_; 4188f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4189f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current6_ == end6_) { 4190f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ = begin6_; 4191f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 4192f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4193f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 4194f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 4195f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 4196f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4197f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 4198f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 4199f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 4200f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4201f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 4202f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 4203f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 4204f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4205f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 4206f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 4207f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 4208f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4209f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4210f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4211f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 4212f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 4213f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4214f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 4215f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 4216f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 4217f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 4218f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 4219f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 4220f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 4221f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 4222f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 4223f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 4224f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 4225f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 4226f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 4227f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 4228f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 4229f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 4230f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 4231f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 4232f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_ && 4233f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == typed_other->current6_ && 4234f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == typed_other->current7_ && 4235f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == typed_other->current8_); 4236f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4237f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4238f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4239f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 4240f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 4241f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 4242f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 4243f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 4244f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 4245f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 4246f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 4247f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 4248f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 4249f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 4250f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 4251f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 4252f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 4253f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 4254f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 4255f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_), 4256f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(other.begin6_), 4257f904a612d9444ab36c07a8e619c113432e046f49vladlosev end6_(other.end6_), 4258f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_(other.current6_), 4259f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(other.begin7_), 4260f904a612d9444ab36c07a8e619c113432e046f49vladlosev end7_(other.end7_), 4261f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_(other.current7_), 4262f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(other.begin8_), 4263f904a612d9444ab36c07a8e619c113432e046f49vladlosev end8_(other.end8_), 4264f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_(other.current8_) { 4265f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4266f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4267f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4268f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 4269f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 4270f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 4271f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_, *current6_, *current7_, *current8_); 4272f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4273f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 4274f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 4275f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 4276f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 4277f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 4278f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 4279f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 4280f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 4281f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_ || 4282f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == end6_ || 4283f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == end7_ || 4284f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == end8_; 4285f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4286f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4287d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4288d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 4289d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4290f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 4291f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 4292f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 4293f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 4294f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 4295f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 4296f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 4297f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 4298f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 4299f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 4300f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 4301f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 4302f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 4303f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 4304f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 4305f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 4306f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 4307f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 4308f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator begin6_; 4309f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator end6_; 4310f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T6>::iterator current6_; 4311f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator begin7_; 4312f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator end7_; 4313f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T7>::iterator current7_; 4314f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator begin8_; 4315f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator end8_; 4316f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T8>::iterator current8_; 4317f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 4318d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator8::Iterator 4319d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4320d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4321d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator8& other); 4322f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4323f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 4324f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 4325f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 4326f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 4327f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 4328f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6> g6_; 4329f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7> g7_; 4330f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8> g8_; 4331d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator8 4332f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4333f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4334f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4335f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9> 4336f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator9 4337e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, 4338f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7, T8, T9> > { 4339f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4340e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType; 4341f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4342f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator9(const ParamGenerator<T1>& g1, 4343f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 4344f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 4345f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 4346f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9) 4347f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 4348f904a612d9444ab36c07a8e619c113432e046f49vladlosev g9_(g9) {} 4349f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator9() {} 4350f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4351f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 4352f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 4353f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 4354f904a612d9444ab36c07a8e619c113432e046f49vladlosev g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); 4355f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4356f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 4357f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 4358f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 4359f904a612d9444ab36c07a8e619c113432e046f49vladlosev g8_.end(), g9_, g9_.end()); 4360f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4361f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4362f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4363f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 4364f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4365f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 4366f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 4367f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 4368f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 4369f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 4370f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 4371f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 4372f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 4373f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 4374f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 4375f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5, 4376f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, 4377f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator& current6, 4378f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7>& g7, 4379f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator& current7, 4380f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8, 4381f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator& current8, 4382f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T9>& g9, 4383f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator& current9) 4384f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 4385f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 4386f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 4387f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 4388f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 4389f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 4390f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 4391f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 4392f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(g8.begin()), end8_(g8.end()), current8_(current8), 4393f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { 4394f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4395f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4396f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 4397f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4398f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 4399f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 4400f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4401f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 4402f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 4403f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 4404f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 4405f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current9_; 4406f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current9_ == end9_) { 4407f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ = begin9_; 4408f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current8_; 4409f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4410f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current8_ == end8_) { 4411f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ = begin8_; 4412f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current7_; 4413f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4414f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current7_ == end7_) { 4415f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ = begin7_; 4416f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current6_; 4417f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4418f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current6_ == end6_) { 4419f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ = begin6_; 4420f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 4421f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4422f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 4423f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 4424f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 4425f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4426f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 4427f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 4428f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 4429f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4430f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 4431f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 4432f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 4433f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4434f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 4435f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 4436f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 4437f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4438f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4439f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4440f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 4441f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 4442f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4443f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 4444f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 4445f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 4446f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 4447f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 4448f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 4449f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 4450f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 4451f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 4452f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 4453f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 4454f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 4455f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 4456f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 4457f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 4458f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 4459f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 4460f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 4461f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_ && 4462f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == typed_other->current6_ && 4463f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == typed_other->current7_ && 4464f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == typed_other->current8_ && 4465f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ == typed_other->current9_); 4466f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4467f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4468f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4469f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 4470f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 4471f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 4472f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 4473f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 4474f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 4475f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 4476f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 4477f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 4478f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 4479f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 4480f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 4481f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 4482f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 4483f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 4484f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 4485f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_), 4486f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(other.begin6_), 4487f904a612d9444ab36c07a8e619c113432e046f49vladlosev end6_(other.end6_), 4488f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_(other.current6_), 4489f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(other.begin7_), 4490f904a612d9444ab36c07a8e619c113432e046f49vladlosev end7_(other.end7_), 4491f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_(other.current7_), 4492f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(other.begin8_), 4493f904a612d9444ab36c07a8e619c113432e046f49vladlosev end8_(other.end8_), 4494f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_(other.current8_), 4495f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin9_(other.begin9_), 4496f904a612d9444ab36c07a8e619c113432e046f49vladlosev end9_(other.end9_), 4497f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_(other.current9_) { 4498f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4499f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4500f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4501f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 4502f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 4503f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 4504f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_, *current6_, *current7_, *current8_, 4505f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current9_); 4506f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4507f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 4508f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 4509f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 4510f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 4511f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 4512f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 4513f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 4514f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 4515f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_ || 4516f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == end6_ || 4517f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == end7_ || 4518f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == end8_ || 4519f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ == end9_; 4520f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4521f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4522d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4523d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 4524d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4525f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 4526f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 4527f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 4528f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 4529f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 4530f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 4531f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 4532f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 4533f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 4534f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 4535f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 4536f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 4537f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 4538f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 4539f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 4540f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 4541f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 4542f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 4543f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator begin6_; 4544f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator end6_; 4545f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T6>::iterator current6_; 4546f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator begin7_; 4547f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator end7_; 4548f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T7>::iterator current7_; 4549f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator begin8_; 4550f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator end8_; 4551f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T8>::iterator current8_; 4552f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator begin9_; 4553f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator end9_; 4554f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T9>::iterator current9_; 4555f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 4556d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator9::Iterator 4557d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4558d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4559d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator9& other); 4560f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4561f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 4562f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 4563f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 4564f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 4565f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 4566f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6> g6_; 4567f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7> g7_; 4568f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8> g8_; 4569f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T9> g9_; 4570d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator9 4571f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4572f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4573f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4574f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10> 4575f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductGenerator10 4576e735d74bc537869af877dfc90c171dc140495c11kosak@google.com : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, 4577f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7, T8, T9, T10> > { 4578f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4579e735d74bc537869af877dfc90c171dc140495c11kosak@google.com typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType; 4580f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4581f904a612d9444ab36c07a8e619c113432e046f49vladlosev CartesianProductGenerator10(const ParamGenerator<T1>& g1, 4582f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 4583f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 4584f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 4585f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9, 4586f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T10>& g10) 4587f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 4588f904a612d9444ab36c07a8e619c113432e046f49vladlosev g9_(g9), g10_(g10) {} 4589f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~CartesianProductGenerator10() {} 4590f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4591f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Begin() const { 4592f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 4593f904a612d9444ab36c07a8e619c113432e046f49vladlosev g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 4594f904a612d9444ab36c07a8e619c113432e046f49vladlosev g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); 4595f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4596f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* End() const { 4597f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 4598f904a612d9444ab36c07a8e619c113432e046f49vladlosev g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 4599f904a612d9444ab36c07a8e619c113432e046f49vladlosev g8_.end(), g9_, g9_.end(), g10_, g10_.end()); 4600f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4601f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4602f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4603f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Iterator : public ParamIteratorInterface<ParamType> { 4604f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4605f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const ParamGeneratorInterface<ParamType>* base, 4606f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1>& g1, 4607f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator& current1, 4608f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2>& g2, 4609f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator& current2, 4610f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3>& g3, 4611f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator& current3, 4612f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4>& g4, 4613f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator& current4, 4614f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5>& g5, 4615f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator& current5, 4616f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6>& g6, 4617f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator& current6, 4618f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7>& g7, 4619f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator& current7, 4620f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8>& g8, 4621f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator& current8, 4622f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T9>& g9, 4623f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator& current9, 4624f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T10>& g10, 4625f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T10>::iterator& current10) 4626f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(base), 4627f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 4628f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 4629f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 4630f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 4631f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 4632f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 4633f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 4634f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(g8.begin()), end8_(g8.end()), current8_(current8), 4635f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin9_(g9.begin()), end9_(g9.end()), current9_(current9), 4636f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { 4637f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4638f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4639f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ~Iterator() {} 4640f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4641f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 4642f904a612d9444ab36c07a8e619c113432e046f49vladlosev return base_; 4643f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4644f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Advance should not be called on beyond-of-range iterators 4645f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so no component iterators must be beyond end of range, either. 4646f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void Advance() { 4647f904a612d9444ab36c07a8e619c113432e046f49vladlosev assert(!AtEnd()); 4648f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current10_; 4649f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current10_ == end10_) { 4650f904a612d9444ab36c07a8e619c113432e046f49vladlosev current10_ = begin10_; 4651f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current9_; 4652f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4653f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current9_ == end9_) { 4654f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ = begin9_; 4655f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current8_; 4656f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4657f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current8_ == end8_) { 4658f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ = begin8_; 4659f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current7_; 4660f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4661f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current7_ == end7_) { 4662f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ = begin7_; 4663f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current6_; 4664f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4665f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current6_ == end6_) { 4666f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ = begin6_; 4667f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current5_; 4668f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4669f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current5_ == end5_) { 4670f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ = begin5_; 4671f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current4_; 4672f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4673f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current4_ == end4_) { 4674f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ = begin4_; 4675f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current3_; 4676f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4677f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current3_ == end3_) { 4678f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ = begin3_; 4679f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current2_; 4680f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4681f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (current2_ == end2_) { 4682f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ = begin2_; 4683f904a612d9444ab36c07a8e619c113432e046f49vladlosev ++current1_; 4684f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4685f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4686f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4687f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual ParamIteratorInterface<ParamType>* Clone() const { 4688f904a612d9444ab36c07a8e619c113432e046f49vladlosev return new Iterator(*this); 4689f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4690f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual const ParamType* Current() const { return ¤t_value_; } 4691f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 4692f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Having the same base generator guarantees that the other 4693f904a612d9444ab36c07a8e619c113432e046f49vladlosev // iterator is of the same type and we can downcast. 4694f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 4695f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "The program attempted to compare iterators " 4696f904a612d9444ab36c07a8e619c113432e046f49vladlosev << "from different generators." << std::endl; 4697f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Iterator* typed_other = 4698f904a612d9444ab36c07a8e619c113432e046f49vladlosev CheckedDowncastToActualType<const Iterator>(&other); 4699f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterators equal if they both point beyond their 4700f904a612d9444ab36c07a8e619c113432e046f49vladlosev // respective ranges. That can happen in a variety of fashions, 4701f904a612d9444ab36c07a8e619c113432e046f49vladlosev // so we have to consult AtEnd(). 4702f904a612d9444ab36c07a8e619c113432e046f49vladlosev return (AtEnd() && typed_other->AtEnd()) || 4703f904a612d9444ab36c07a8e619c113432e046f49vladlosev ( 4704f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == typed_other->current1_ && 4705f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == typed_other->current2_ && 4706f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == typed_other->current3_ && 4707f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == typed_other->current4_ && 4708f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == typed_other->current5_ && 4709f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == typed_other->current6_ && 4710f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == typed_other->current7_ && 4711f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == typed_other->current8_ && 4712f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ == typed_other->current9_ && 4713f904a612d9444ab36c07a8e619c113432e046f49vladlosev current10_ == typed_other->current10_); 4714f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4715f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4716f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4717f904a612d9444ab36c07a8e619c113432e046f49vladlosev Iterator(const Iterator& other) 4718f904a612d9444ab36c07a8e619c113432e046f49vladlosev : base_(other.base_), 4719f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin1_(other.begin1_), 4720f904a612d9444ab36c07a8e619c113432e046f49vladlosev end1_(other.end1_), 4721f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_(other.current1_), 4722f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin2_(other.begin2_), 4723f904a612d9444ab36c07a8e619c113432e046f49vladlosev end2_(other.end2_), 4724f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_(other.current2_), 4725f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin3_(other.begin3_), 4726f904a612d9444ab36c07a8e619c113432e046f49vladlosev end3_(other.end3_), 4727f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_(other.current3_), 4728f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin4_(other.begin4_), 4729f904a612d9444ab36c07a8e619c113432e046f49vladlosev end4_(other.end4_), 4730f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_(other.current4_), 4731f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin5_(other.begin5_), 4732f904a612d9444ab36c07a8e619c113432e046f49vladlosev end5_(other.end5_), 4733f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_(other.current5_), 4734f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin6_(other.begin6_), 4735f904a612d9444ab36c07a8e619c113432e046f49vladlosev end6_(other.end6_), 4736f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_(other.current6_), 4737f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin7_(other.begin7_), 4738f904a612d9444ab36c07a8e619c113432e046f49vladlosev end7_(other.end7_), 4739f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_(other.current7_), 4740f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin8_(other.begin8_), 4741f904a612d9444ab36c07a8e619c113432e046f49vladlosev end8_(other.end8_), 4742f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_(other.current8_), 4743f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin9_(other.begin9_), 4744f904a612d9444ab36c07a8e619c113432e046f49vladlosev end9_(other.end9_), 4745f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_(other.current9_), 4746f904a612d9444ab36c07a8e619c113432e046f49vladlosev begin10_(other.begin10_), 4747f904a612d9444ab36c07a8e619c113432e046f49vladlosev end10_(other.end10_), 4748f904a612d9444ab36c07a8e619c113432e046f49vladlosev current10_(other.current10_) { 4749f904a612d9444ab36c07a8e619c113432e046f49vladlosev ComputeCurrentValue(); 4750f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4751f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4752f904a612d9444ab36c07a8e619c113432e046f49vladlosev void ComputeCurrentValue() { 4753f904a612d9444ab36c07a8e619c113432e046f49vladlosev if (!AtEnd()) 4754f904a612d9444ab36c07a8e619c113432e046f49vladlosev current_value_ = ParamType(*current1_, *current2_, *current3_, 4755f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current4_, *current5_, *current6_, *current7_, *current8_, 4756f904a612d9444ab36c07a8e619c113432e046f49vladlosev *current9_, *current10_); 4757f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4758f904a612d9444ab36c07a8e619c113432e046f49vladlosev bool AtEnd() const { 4759f904a612d9444ab36c07a8e619c113432e046f49vladlosev // We must report iterator past the end of the range when either of the 4760f904a612d9444ab36c07a8e619c113432e046f49vladlosev // component iterators has reached the end of its range. 4761f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 4762f904a612d9444ab36c07a8e619c113432e046f49vladlosev current1_ == end1_ || 4763f904a612d9444ab36c07a8e619c113432e046f49vladlosev current2_ == end2_ || 4764f904a612d9444ab36c07a8e619c113432e046f49vladlosev current3_ == end3_ || 4765f904a612d9444ab36c07a8e619c113432e046f49vladlosev current4_ == end4_ || 4766f904a612d9444ab36c07a8e619c113432e046f49vladlosev current5_ == end5_ || 4767f904a612d9444ab36c07a8e619c113432e046f49vladlosev current6_ == end6_ || 4768f904a612d9444ab36c07a8e619c113432e046f49vladlosev current7_ == end7_ || 4769f904a612d9444ab36c07a8e619c113432e046f49vladlosev current8_ == end8_ || 4770f904a612d9444ab36c07a8e619c113432e046f49vladlosev current9_ == end9_ || 4771f904a612d9444ab36c07a8e619c113432e046f49vladlosev current10_ == end10_; 4772f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4773f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4774d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4775d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const Iterator& other); 4776d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4777f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGeneratorInterface<ParamType>* const base_; 4778f904a612d9444ab36c07a8e619c113432e046f49vladlosev // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 4779f904a612d9444ab36c07a8e619c113432e046f49vladlosev // current[i]_ is the actual traversing iterator. 4780f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator begin1_; 4781f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T1>::iterator end1_; 4782f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T1>::iterator current1_; 4783f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator begin2_; 4784f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T2>::iterator end2_; 4785f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T2>::iterator current2_; 4786f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator begin3_; 4787f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T3>::iterator end3_; 4788f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T3>::iterator current3_; 4789f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator begin4_; 4790f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T4>::iterator end4_; 4791f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T4>::iterator current4_; 4792f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator begin5_; 4793f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T5>::iterator end5_; 4794f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T5>::iterator current5_; 4795f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator begin6_; 4796f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T6>::iterator end6_; 4797f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T6>::iterator current6_; 4798f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator begin7_; 4799f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T7>::iterator end7_; 4800f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T7>::iterator current7_; 4801f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator begin8_; 4802f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T8>::iterator end8_; 4803f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T8>::iterator current8_; 4804f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator begin9_; 4805f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T9>::iterator end9_; 4806f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T9>::iterator current9_; 4807f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T10>::iterator begin10_; 4808f904a612d9444ab36c07a8e619c113432e046f49vladlosev const typename ParamGenerator<T10>::iterator end10_; 4809f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename ParamGenerator<T10>::iterator current10_; 4810f904a612d9444ab36c07a8e619c113432e046f49vladlosev ParamType current_value_; 4811d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan }; // class CartesianProductGenerator10::Iterator 4812d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4813d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4814d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductGenerator10& other); 4815f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4816f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T1> g1_; 4817f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T2> g2_; 4818f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T3> g3_; 4819f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T4> g4_; 4820f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T5> g5_; 4821f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T6> g6_; 4822f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T7> g7_; 4823f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T8> g8_; 4824f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T9> g9_; 4825f904a612d9444ab36c07a8e619c113432e046f49vladlosev const ParamGenerator<T10> g10_; 4826d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductGenerator10 4827f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4828f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4829f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 4830f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 4831f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Helper classes providing Combine() with polymorphic features. They allow 4832f904a612d9444ab36c07a8e619c113432e046f49vladlosev// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is 4833f904a612d9444ab36c07a8e619c113432e046f49vladlosev// convertible to U. 4834f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 4835f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2> 4836f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder2 { 4837f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4838f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder2(const Generator1& g1, const Generator2& g2) 4839f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2) {} 4840f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2> 4841e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2> >() const { 4842e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2> >( 4843f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator2<T1, T2>( 4844f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4845f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_))); 4846f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4847f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4848f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4849d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4850d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder2& other); 4851d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4852f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4853f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4854d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder2 4855f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4856f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3> 4857f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder3 { 4858f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4859f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder3(const Generator1& g1, const Generator2& g2, 4860f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3) 4861f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3) {} 4862f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3> 4863e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const { 4864e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3> >( 4865f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator3<T1, T2, T3>( 4866f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4867f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 4868f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_))); 4869f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4870f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4871f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4872d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4873d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder3& other); 4874d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4875f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4876f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4877f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 4878d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder3 4879f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4880f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 4881f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4> 4882f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder4 { 4883f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4884f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder4(const Generator1& g1, const Generator2& g2, 4885f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4) 4886f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} 4887f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4> 4888e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const { 4889e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >( 4890f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator4<T1, T2, T3, T4>( 4891f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4892f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 4893f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 4894f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_))); 4895f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4896f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4897f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4898d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4899d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder4& other); 4900d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4901f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4902f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4903f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 4904f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 4905d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder4 4906f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4907f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 4908f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5> 4909f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder5 { 4910f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4911f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder5(const Generator1& g1, const Generator2& g2, 4912f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5) 4913f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} 4914f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5> 4915e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const { 4916e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >( 4917f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator5<T1, T2, T3, T4, T5>( 4918f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4919f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 4920f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 4921f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 4922f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_))); 4923f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4924f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4925f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4926d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4927d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder5& other); 4928d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4929f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4930f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4931f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 4932f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 4933f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 4934d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder5 4935f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4936f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 4937f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5, class Generator6> 4938f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder6 { 4939f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4940f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder6(const Generator1& g1, const Generator2& g2, 4941f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5, 4942f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6& g6) 4943f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} 4944f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5, 4945f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6> 4946e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const { 4947e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >( 4948f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>( 4949f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4950f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 4951f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 4952f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 4953f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_), 4954f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T6> >(g6_))); 4955f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4956f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4957f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4958d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4959d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder6& other); 4960d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4961f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4962f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4963f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 4964f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 4965f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 4966f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6 g6_; 4967d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder6 4968f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4969f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 4970f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5, class Generator6, class Generator7> 4971f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder7 { 4972f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 4973f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder7(const Generator1& g1, const Generator2& g2, 4974f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5, 4975f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6& g6, const Generator7& g7) 4976f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} 4977f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5, 4978f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7> 4979e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, 4980f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7> >() const { 4981e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >( 4982f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>( 4983f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 4984f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 4985f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 4986f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 4987f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_), 4988f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T6> >(g6_), 4989f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T7> >(g7_))); 4990f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 4991f904a612d9444ab36c07a8e619c113432e046f49vladlosev 4992f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 4993d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 4994d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder7& other); 4995d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 4996f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 4997f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 4998f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 4999f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 5000f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 5001f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6 g6_; 5002f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7 g7_; 5003d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder7 5004f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5005f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 5006f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5, class Generator6, class Generator7, 5007f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator8> 5008f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder8 { 5009f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 5010f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder8(const Generator1& g1, const Generator2& g2, 5011f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5, 5012f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6& g6, const Generator7& g7, const Generator8& g8) 5013f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), 5014f904a612d9444ab36c07a8e619c113432e046f49vladlosev g8_(g8) {} 5015f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5, 5016f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8> 5017e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, 5018f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8> >() const { 5019e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >( 5020f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>( 5021f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 5022f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 5023f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 5024f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 5025f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_), 5026f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T6> >(g6_), 5027f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T7> >(g7_), 5028f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T8> >(g8_))); 5029f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 5030f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5031f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 5032d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 5033d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder8& other); 5034d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 5035f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 5036f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 5037f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 5038f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 5039f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 5040f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6 g6_; 5041f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7 g7_; 5042f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator8 g8_; 5043d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder8 5044f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5045f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 5046f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5, class Generator6, class Generator7, 5047f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator8, class Generator9> 5048f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder9 { 5049f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 5050f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder9(const Generator1& g1, const Generator2& g2, 5051f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5, 5052f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6& g6, const Generator7& g7, const Generator8& g8, 5053f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator9& g9) 5054f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 5055f904a612d9444ab36c07a8e619c113432e046f49vladlosev g9_(g9) {} 5056f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5, 5057f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9> 5058e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 5059f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9> >() const { 5060e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 5061f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9> >( 5062f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>( 5063f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 5064f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 5065f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 5066f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 5067f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_), 5068f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T6> >(g6_), 5069f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T7> >(g7_), 5070f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T8> >(g8_), 5071f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T9> >(g9_))); 5072f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 5073f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5074f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 5075d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 5076d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder9& other); 5077d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 5078f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 5079f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 5080f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 5081f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 5082f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 5083f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6 g6_; 5084f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7 g7_; 5085f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator8 g8_; 5086f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator9 g9_; 5087d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder9 5088f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5089f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Generator1, class Generator2, class Generator3, 5090f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator4, class Generator5, class Generator6, class Generator7, 5091f904a612d9444ab36c07a8e619c113432e046f49vladlosev class Generator8, class Generator9, class Generator10> 5092f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass CartesianProductHolder10 { 5093f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: 5094f904a612d9444ab36c07a8e619c113432e046f49vladlosevCartesianProductHolder10(const Generator1& g1, const Generator2& g2, 5095f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3& g3, const Generator4& g4, const Generator5& g5, 5096f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6& g6, const Generator7& g7, const Generator8& g8, 5097f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator9& g9, const Generator10& g10) 5098f904a612d9444ab36c07a8e619c113432e046f49vladlosev : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 5099f904a612d9444ab36c07a8e619c113432e046f49vladlosev g9_(g9), g10_(g10) {} 5100f904a612d9444ab36c07a8e619c113432e046f49vladlosev template <typename T1, typename T2, typename T3, typename T4, typename T5, 5101f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10> 5102e735d74bc537869af877dfc90c171dc140495c11kosak@google.com operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, 5103e735d74bc537869af877dfc90c171dc140495c11kosak@google.com T10> >() const { 5104e735d74bc537869af877dfc90c171dc140495c11kosak@google.com return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, 5105e735d74bc537869af877dfc90c171dc140495c11kosak@google.com T10> >( 5106f904a612d9444ab36c07a8e619c113432e046f49vladlosev new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9, 5107f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10>( 5108f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T1> >(g1_), 5109f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T2> >(g2_), 5110f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T3> >(g3_), 5111f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T4> >(g4_), 5112f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T5> >(g5_), 5113f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T6> >(g6_), 5114f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T7> >(g7_), 5115f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T8> >(g8_), 5116f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T9> >(g9_), 5117f904a612d9444ab36c07a8e619c113432e046f49vladlosev static_cast<ParamGenerator<T10> >(g10_))); 5118f904a612d9444ab36c07a8e619c113432e046f49vladlosev } 5119f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5120f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: 5121d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan // No implementation - assignment is unsupported. 5122d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan void operator=(const CartesianProductHolder10& other); 5123d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan 5124f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1 g1_; 5125f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator2 g2_; 5126f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator3 g3_; 5127f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4 g4_; 5128f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator5 g5_; 5129f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator6 g6_; 5130f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7 g7_; 5131f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator8 g8_; 5132f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator9 g9_; 5133f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator10 g10_; 5134d586f9f13c5b5ba31bc00c305f3bf2a97d5874f8zhanyong.wan}; // class CartesianProductHolder10 5135f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5136733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_HAS_COMBINE 5137f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5138f904a612d9444ab36c07a8e619c113432e046f49vladlosev} // namespace internal 5139f904a612d9444ab36c07a8e619c113432e046f49vladlosev} // namespace testing 5140f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5141f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif // GTEST_HAS_PARAM_TEST 5142f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5143f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 5144