1b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// This file was GENERATED by command: 2b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// pump.py gtest-param-util-generated.h.pump 3b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// DO NOT EDIT BY HAND!!! 47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2008 Google Inc. 67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All Rights Reserved. 77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without 97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are 107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met: 117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions of source code must retain the above copyright 137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer. 147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions in binary form must reproduce the above 157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer 167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the 177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution. 187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Neither the name of Google Inc. nor the names of its 197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from 207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission. 217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Author: vladl@google.com (Vlad Losev) 357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Type and function utilities for implementing parameterized tests. 377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! 387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Currently Google Test supports at most 50 arguments in Values, 407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// and at most 10 arguments in Combine. Please contact 417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// googletestframework@googlegroups.com if you need more. 427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Please note that the number of arguments to Combine is limited 437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// by the maximum arity of the implementation of tr1::tuple which is 447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// currently set at 10. 457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// scripts/fuse_gtest.py depends on gtest's own header being #included 5057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// *unconditionally*. Therefore these #includes cannot be moved 5157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// inside #if GTEST_HAS_PARAM_TEST. 52b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-param-util.h" 53b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-port.h" 547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 55e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_PARAM_TEST 567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing { 5857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 5957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Forward declarations of ValuesIn(), which is implemented in 6057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// include/gtest/gtest-param-test.h. 6157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramertemplate <typename ForwardIterator> 6257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerinternal::ParamGenerator< 63b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> 64b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay FoadValuesIn(ForwardIterator begin, ForwardIterator end); 6557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 6657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramertemplate <typename T, size_t N> 6757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerinternal::ParamGenerator<T> ValuesIn(const T (&array)[N]); 6857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 6957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramertemplate <class Container> 7057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerinternal::ParamGenerator<typename Container::value_type> ValuesIn( 7157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const Container& container); 7257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Used in the Values() function to provide polymorphic capabilities. 767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1> 777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray1 { 787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman explicit ValueArray1(T1 v1) : v1_(v1) {} 807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); } 837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 85190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 86190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray1& other); 87190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray2 { 937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} 957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_}; 997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 1007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 103190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 104190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray2& other); 105190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 1077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 1087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 1097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3> 1117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray3 { 1127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 1137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} 1147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 1167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 1177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_}; 1187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 1197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 122190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 123190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray3& other); 124190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 1267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 1277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 1287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 1297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4> 1317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray4 { 1327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 1337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), 1347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4) {} 1357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 1377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 1387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_}; 1397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 1407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 143190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 144190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray4& other); 145190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 1477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 1487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 1507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 1517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 1537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray5 { 1547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 1557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), 1567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5) {} 1577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 1597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 1607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_}; 1617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 1627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 165190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 166190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray5& other); 167190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6> 1777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray6 { 1787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 1797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), 1807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} 1817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 1837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 1847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_}; 1857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 1867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 189190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 190190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray6& other); 191190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 1937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 1947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 1957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 1967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 1977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 1987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 1997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7> 2027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray7 { 2037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 2047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), 2057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} 2067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 2087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 2097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_}; 2107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 2117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 2127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 214190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 215190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray7& other); 216190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 2177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 2187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 2197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 2207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 2217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 2227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 2237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 2247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 2257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8> 2287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray8 { 2297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 2307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 2317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8) {} 2337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 2357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 2367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_}; 2377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 2387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 2397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 241190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 242190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray8& other); 243190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 2447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 2457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 2467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 2477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 2487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 2497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 2507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 2517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 2527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 2537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9> 2567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray9 { 2577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 2587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 2597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9) {} 2617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 2637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 2647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_}; 2657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 2667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 2677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 269190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 270190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray9& other); 271190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 2727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 2737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 2747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 2757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 2767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 2777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 2787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 2797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 2807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 2817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 2827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 2847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10> 2857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray10 { 2867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 2877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 2887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 2897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10) {} 2907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 2927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 2937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_}; 2947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 2957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 2967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 298190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 299190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray10& other); 300190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 3027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 3037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 3047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 3057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 3067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 3077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 3087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 3097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 3107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 3117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 3127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 3157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11> 3167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray11 { 3177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 3187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 3197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 3207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} 3217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 3237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 3247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_}; 3257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 3267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 3277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 329190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 330190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray11& other); 331190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 3337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 3347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 3357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 3367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 3377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 3387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 3397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 3407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 3417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 3427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 3437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 3447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 3477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12> 3487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray12 { 3497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 3507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 3517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 3527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} 3537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 3557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 3567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 3577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_}; 3587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 3597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 3607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 362190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 363190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray12& other); 364190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 3667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 3677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 3687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 3697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 3707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 3717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 3727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 3737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 3747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 3757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 3767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 3777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 3787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 3807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 3817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13> 3827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray13 { 3837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 3847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 3857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 3867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 3877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_(v12), v13_(v13) {} 3887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 3907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 3917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 3927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_}; 3937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 3947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 3957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 397190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 398190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray13& other); 399190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 4007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 4017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 4027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 4037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 4047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 4057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 4067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 4077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 4087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 4097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 4107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 4117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 4127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 4137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 4147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 4177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14> 4187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray14 { 4197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 4207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 4217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), 4227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 4237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} 4247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 4267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 4277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 4287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_}; 4297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 4307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 4317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 433190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 434190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray14& other); 435190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 4367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 4377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 4387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 4397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 4407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 4417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 4427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 4437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 4447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 4457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 4467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 4477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 4487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 4497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 4507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 4517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 4547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15> 4557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray15 { 4567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 4577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 4587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), 4597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 4607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} 4617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 4637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 4647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 4657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_}; 4667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 4677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 4687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 470190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 471190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray15& other); 472190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 4737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 4747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 4757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 4767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 4777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 4787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 4797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 4807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 4817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 4827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 4837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 4847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 4857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 4867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 4877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 4887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 4897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 4917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 4927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 4937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16> 4947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray16 { 4957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 4967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 4977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), 4987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 4997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 5007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v16_(v16) {} 5017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 5037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 5047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 5057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_}; 5067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 5077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 5087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 510190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 511190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray16& other); 512190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 5137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 5147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 5157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 5167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 5177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 5187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 5197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 5207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 5217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 5227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 5237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 5247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 5257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 5267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 5277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 5287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 5297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 5307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 5327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 5337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 5347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17> 5357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray17 { 5367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 5377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 5387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 5397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 5407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 5417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17) {} 5427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 5447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 5457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 5467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_}; 5477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 5487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 5497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray17& other); 553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 5547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 5557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 5567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 5577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 5587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 5597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 5607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 5617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 5627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 5637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 5647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 5657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 5667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 5677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 5687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 5697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 5707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 5717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 5727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 5747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 5757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 5767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18> 5777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray18 { 5787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 5797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 5807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 5817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 5827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 5837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} 5847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 5867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 5877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 5887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_}; 5897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 5907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 5917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 593190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 594190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray18& other); 595190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 5967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 5977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 5987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 5997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 6007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 6017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 6027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 6037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 6047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 6057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 6067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 6077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 6087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 6097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 6107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 6117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 6127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 6137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 6147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 6157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 6177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 6187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 6197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19> 6207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray19 { 6217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 6227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 6237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 6247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 6257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 6267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} 6277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 6297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 6307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 6317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_}; 6327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 6337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 6347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 636190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 637190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray19& other); 638190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 6397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 6407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 6417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 6427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 6437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 6447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 6457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 6467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 6477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 6487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 6497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 6507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 6517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 6527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 6537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 6547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 6557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 6567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 6577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 6587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 6597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 6617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 6627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 6637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20> 6647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray20 { 6657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 6667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 6677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 6687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 6697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 6707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 6717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v19_(v19), v20_(v20) {} 6727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 6747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 6757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 6767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_}; 6777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 6787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 6797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 681190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 682190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray20& other); 683190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 6847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 6857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 6867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 6877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 6887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 6897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 6907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 6917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 6927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 6937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 6947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 6957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 6967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 6977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 6987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 6997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 7007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 7017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 7027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 7037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 7047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 7057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 7077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 7087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 7097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 7107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21> 7117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray21 { 7127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 7137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 7147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 7157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 7167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 7177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 7187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} 7197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 7217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 7227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 7237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_}; 7247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 7257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 7267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 728190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 729190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray21& other); 730190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 7317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 7327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 7337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 7347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 7357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 7367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 7377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 7387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 7397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 7407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 7417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 7427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 7437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 7447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 7457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 7467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 7477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 7487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 7497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 7507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 7517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 7527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 7537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 7557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 7567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 7577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 7587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22> 7597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray22 { 7607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 7617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 7627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 7637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), 7647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 7657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 7667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} 7677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 7697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 7707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 7717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_}; 7727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 7737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 7747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray22& other); 778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 7797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 7807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 7817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 7827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 7837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 7847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 7857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 7867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 7877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 7887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 7897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 7907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 7917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 7927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 7937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 7947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 7957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 7967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 7977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 7987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 7997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 8007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 8017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 8027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 8047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 8057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 8067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 8077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23> 8087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray23 { 8097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 8107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 8117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 8127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), 8137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 8147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 8157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 8167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23) {} 8177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 8197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 8207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 8217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, 8227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_}; 8237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 8247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 8257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 827190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 828190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray23& other); 829190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 8307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 8317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 8327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 8337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 8347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 8357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 8367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 8377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 8387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 8397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 8407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 8417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 8427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 8437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 8447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 8457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 8467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 8477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 8487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 8497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 8507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 8517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 8527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 8537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 8547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 8567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 8577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 8587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 8597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24> 8607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray24 { 8617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 8627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 8637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 8647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), 8657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 8667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 8677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 8687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v22_(v22), v23_(v23), v24_(v24) {} 8697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 8717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 8727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 8737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 8747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_}; 8757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 8767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 8777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 879190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 880190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray24& other); 881190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 8827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 8837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 8847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 8857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 8867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 8877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 8887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 8897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 8907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 8917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 8927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 8937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 8947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 8957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 8967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 8977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 8987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 8997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 9007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 9017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 9027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 9037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 9047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 9057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 9067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 9077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 9097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 9107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 9117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 9127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25> 9137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray25 { 9147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 9157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 9167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 9177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 9187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 9197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 9207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 9217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} 9227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 9247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 9257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 9267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 9277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_}; 9287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 9297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 9307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 932190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 933190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray25& other); 934190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 9357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 9367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 9377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 9387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 9397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 9407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 9417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 9427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 9437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 9447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 9457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 9467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 9477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 9487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 9497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 9507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 9517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 9527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 9537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 9547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 9557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 9567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 9577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 9587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 9597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 9607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 9617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 9637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 9647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 9657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 9667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 9677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26> 9687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray26 { 9697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 9707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 9717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 9727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 9737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 9747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 9757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 9767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} 9777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 9797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 9807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 9817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 9827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_}; 9837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 9847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 9857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 987190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 988190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray26& other); 989190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 9907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 9917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 9927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 9937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 9947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 9957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 9967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 9977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 9987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 9997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 10007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 10017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 10027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 10037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 10047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 10057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 10067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 10077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 10087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 10097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 10107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 10117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 10127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 10137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 10147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 10157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 10167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 10177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 10197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 10207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 10217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 10227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 10237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27> 10247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray27 { 10257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 10267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 10277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 10287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 10297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 10307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 10317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 10327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 10337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v26_(v26), v27_(v27) {} 10347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 10367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 10377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 10387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 10397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_}; 10407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 10417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 10427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1044190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1045190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray27& other); 1046190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 10477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 10487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 10497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 10507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 10517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 10527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 10537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 10547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 10557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 10567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 10577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 10587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 10597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 10607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 10617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 10627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 10637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 10647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 10657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 10667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 10677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 10687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 10697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 10707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 10717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 10727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 10737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 10747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 10757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 10777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 10787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 10797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 10807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 10817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28> 10827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray28 { 10837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 10847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 10857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 10867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 10877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 10887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 10897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 10907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 10917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} 10927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 10947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 10957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 10967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 10977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_}; 10987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 10997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 11007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1102190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1103190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray28& other); 1104190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 11057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 11067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 11077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 11087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 11097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 11107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 11117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 11127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 11137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 11147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 11157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 11167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 11177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 11187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 11197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 11207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 11217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 11227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 11237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 11247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 11257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 11267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 11277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 11287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 11297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 11307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 11317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 11327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 11337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 11347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 11367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 11377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 11387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 11397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 11407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29> 11417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray29 { 11427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 11437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 11447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 11457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 11467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 11477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 11487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 11497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 11507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} 11517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 11537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 11547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 11557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 11567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_}; 11577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 11587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 11597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1161190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1162190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray29& other); 1163190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 11647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 11657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 11667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 11677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 11687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 11697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 11707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 11717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 11727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 11737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 11747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 11757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 11767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 11777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 11787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 11797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 11807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 11817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 11827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 11837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 11847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 11857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 11867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 11877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 11887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 11897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 11907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 11917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 11927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 11937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 11947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 11967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 11977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 11987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 11997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 12007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30> 12017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray30 { 12027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 12037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 12047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 12057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 12067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), 12077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 12087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 12097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 12107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 12117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30) {} 12127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 12147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 12157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 12167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 12177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_}; 12187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 12197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 12207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1222190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1223190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray30& other); 1224190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 12257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 12267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 12277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 12287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 12297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 12307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 12317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 12327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 12337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 12347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 12357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 12367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 12377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 12387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 12397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 12407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 12417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 12427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 12437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 12447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 12457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 12467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 12477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 12487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 12497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 12507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 12517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 12527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 12537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 12547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 12557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 12567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 12587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 12597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 12607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 12617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 12627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 12637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31> 12647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray31 { 12657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 12667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 12677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 12687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 12697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), 12707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 12717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 12727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 12737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 12747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30), v31_(v31) {} 12757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 12777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 12787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 12797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 12807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_}; 12817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 12827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 12837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1285190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1286190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray31& other); 1287190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 12887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 12897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 12907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 12917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 12927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 12937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 12947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 12957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 12967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 12977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 12987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 12997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 13007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 13017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 13027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 13037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 13047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 13057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 13067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 13077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 13087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 13097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 13107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 13117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 13127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 13137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 13147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 13157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 13167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 13177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 13187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 13197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 13207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 13227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 13237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 13247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 13257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 13267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 13277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32> 13287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray32 { 13297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 13307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 13317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 13327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 13337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), 13347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 13357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 13367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 13377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 13387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} 13397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 13417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 13427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 13437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 13447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_}; 13457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 13467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1349190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1350190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray32& other); 1351190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 13527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 13537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 13547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 13557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 13567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 13577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 13587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 13597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 13607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 13617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 13627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 13637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 13647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 13657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 13667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 13677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 13687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 13697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 13707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 13717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 13727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 13737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 13747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 13757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 13767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 13777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 13787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 13797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 13807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 13817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 13827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 13837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 13847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 13857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 13877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 13887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 13897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 13907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 13917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 13927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33> 13937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray33 { 13947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 13957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 13967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 13977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 13987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, 13997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 14007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 14017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 14027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 14037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 14047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33) {} 14057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 14077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 14087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 14097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 14107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_}; 14117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 14127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 14137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1415190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1416190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray33& other); 1417190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 14187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 14197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 14207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 14217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 14227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 14237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 14247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 14257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 14267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 14277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 14287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 14297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 14307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 14317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 14327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 14337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 14347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 14357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 14367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 14377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 14387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 14397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 14407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 14417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 14427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 14437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 14447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 14457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 14467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 14477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 14487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 14497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 14507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 14517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 14527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 14547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 14557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 14567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 14577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 14587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 14597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34> 14607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray34 { 14617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 14627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 14637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 14647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 14657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 14667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 14677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 14687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 14697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 14707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 14717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33), v34_(v34) {} 14727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 14747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 14757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 14767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 14777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_}; 14787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 14797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 14807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1482190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1483190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray34& other); 1484190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 14857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 14867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 14877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 14887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 14897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 14907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 14917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 14927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 14937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 14947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 14957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 14967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 14977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 14987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 14997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 15007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 15017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 15027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 15037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 15047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 15057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 15067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 15077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 15087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 15097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 15107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 15117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 15127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 15137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 15147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 15157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 15167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 15177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 15187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 15197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 15207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 15227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 15237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 15247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 15257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 15267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 15277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35> 15287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray35 { 15297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 15307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 15317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 15327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 15337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 15347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 15357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 15367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 15377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 15387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), 15397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} 15407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 15427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 15437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 15447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 15457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, 15467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v35_}; 15477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 15487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 15497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray35& other); 1553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 15547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 15557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 15567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 15577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 15587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 15597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 15607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 15617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 15627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 15637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 15647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 15657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 15667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 15677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 15687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 15697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 15707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 15717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 15727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 15737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 15747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 15757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 15767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 15777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 15787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 15797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 15807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 15817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 15827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 15837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 15847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 15857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 15867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 15877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 15887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 15897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 15907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 15927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 15937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 15947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 15957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 15967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 15977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 15987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36> 15997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray36 { 16007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 16017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 16027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 16037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 16047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 16057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 16067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 16077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 16087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 16097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), 16107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} 16117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 16137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 16147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 16157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 16167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 16177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_}; 16187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 16197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 16207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1622190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1623190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray36& other); 1624190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 16257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 16267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 16277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 16287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 16297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 16307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 16317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 16327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 16337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 16347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 16357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 16367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 16377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 16387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 16397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 16407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 16417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 16427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 16437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 16447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 16457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 16467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 16477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 16487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 16497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 16507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 16517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 16527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 16537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 16547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 16557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 16567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 16577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 16587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 16597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 16607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 16617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 16627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 16647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 16657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 16667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 16677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 16687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 16697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 16707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37> 16717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray37 { 16727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 16737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 16747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 16757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 16767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 16777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 16787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 16797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 16807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 16817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), 16827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), 16837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_(v36), v37_(v37) {} 16847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 16867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 16877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 16887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 16897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 16907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_}; 16917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 16927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 16937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1695190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1696190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray37& other); 1697190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 16987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 16997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 17007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 17017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 17027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 17037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 17047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 17057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 17067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 17077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 17087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 17097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 17107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 17117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 17127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 17137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 17147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 17157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 17167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 17177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 17187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 17197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 17207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 17217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 17227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 17237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 17247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 17257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 17267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 17277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 17287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 17297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 17307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 17317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 17327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 17337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 17347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 17357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 17367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 17387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 17397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 17407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 17417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 17427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 17437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 17447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38> 17457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray38 { 17467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 17477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 17487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 17497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 17507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 17517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), 17527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 17537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 17547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 17557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 17567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 17577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} 17587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 17607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 17617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 17627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 17637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 17647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_}; 17657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 17667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 17677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1769190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1770190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray38& other); 1771190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 17727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 17737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 17747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 17757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 17767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 17777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 17787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 17797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 17807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 17817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 17827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 17837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 17847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 17857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 17867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 17877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 17887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 17897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 17907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 17917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 17927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 17937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 17947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 17957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 17967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 17977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 17987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 17997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 18007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 18017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 18027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 18037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 18047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 18057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 18067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 18077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 18087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 18097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 18107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 18117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 18137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 18147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 18157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 18167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 18177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 18187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 18197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39> 18207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray39 { 18217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 18227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 18237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 18247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 18257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 18267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), 18277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 18287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 18297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 18307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 18317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 18327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} 18337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 18357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 18367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 18377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 18387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 18397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_}; 18407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 18417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 18427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1844190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1845190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray39& other); 1846190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 18477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 18487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 18497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 18507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 18517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 18527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 18537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 18547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 18557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 18567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 18577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 18587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 18597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 18607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 18617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 18627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 18637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 18647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 18657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 18667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 18677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 18687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 18697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 18707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 18717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 18727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 18737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 18747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 18757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 18767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 18777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 18787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 18797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 18807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 18817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 18827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 18837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 18847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 18857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 18867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 18877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 18897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 18907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 18917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 18927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 18937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 18947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 18957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40> 18967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray40 { 18977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 18987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 18997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 19007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 19017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 19027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), 19037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 19047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 19057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 19067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 19077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), 19087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), 19097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v40_(v40) {} 19107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 19127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 19137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 19147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 19157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 19167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_}; 19177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 19187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 19197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1921190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 1922190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray40& other); 1923190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 19247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 19257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 19267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 19277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 19287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 19297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 19307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 19317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 19327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 19337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 19347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 19357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 19367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 19377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 19387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 19397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 19407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 19417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 19427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 19437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 19447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 19457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 19467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 19477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 19487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 19497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 19507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 19517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 19527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 19537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 19547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 19557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 19567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 19577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 19587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 19597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 19607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 19617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 19627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 19637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 19647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 19657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 19677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 19687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 19697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 19707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 19717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 19727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 19737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 19747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41> 19757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray41 { 19767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 19777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 19787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 19797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 19807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 19817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, 19827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 19837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 19847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 19857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 19867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 19877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 19887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v39_(v39), v40_(v40), v41_(v41) {} 19897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 19917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 19927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 19937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 19947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 19957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_}; 19967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 19977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 19987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2000190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2001190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray41& other); 2002190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 20037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 20047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 20057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 20067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 20077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 20087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 20097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 20107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 20117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 20127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 20137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 20147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 20157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 20167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 20177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 20187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 20197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 20207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 20217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 20227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 20237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 20247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 20257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 20267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 20277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 20287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 20297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 20307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 20317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 20327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 20337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 20347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 20357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 20367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 20377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 20387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 20397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 20407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 20417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 20427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 20437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 20447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 20457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 20477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 20487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 20497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 20507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 20517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 20527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 20537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 20547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42> 20557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray42 { 20567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 20577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 20587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 20597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 20607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 20617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 20627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 20637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 20647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 20657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 20667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 20677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 20687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} 20697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 20717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 20727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 20737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 20747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 20757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_}; 20767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 20777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 20787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2080190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2081190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray42& other); 2082190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 20837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 20847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 20857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 20867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 20877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 20887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 20897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 20907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 20917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 20927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 20937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 20947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 20957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 20967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 20977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 20987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 20997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 21007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 21017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 21027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 21037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 21047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 21057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 21067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 21077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 21087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 21097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 21107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 21117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 21127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 21137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 21147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 21157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 21167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 21177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 21187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 21197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 21207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 21217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 21227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 21237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 21247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 21257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 21267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 21287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 21297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 21307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 21317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 21327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 21337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 21347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 21357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43> 21367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray43 { 21377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 21387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 21397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 21407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 21417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 21427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 21437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), 21447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), 21457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), 21467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), 21477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), 21487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), 21497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} 21507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 21527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 21537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 21547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 21557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 21567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_}; 21577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 21587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 21597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2161190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2162190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray43& other); 2163190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 21647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 21657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 21667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 21677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 21687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 21697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 21707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 21717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 21727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 21737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 21747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 21757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 21767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 21777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 21787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 21797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 21807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 21817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 21827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 21837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 21847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 21857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 21867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 21877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 21887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 21897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 21907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 21917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 21927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 21937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 21947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 21957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 21967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 21977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 21987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 21997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 22007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 22017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 22027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 22037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 22047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 22057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 22067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 22077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 22087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 22097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 22107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 22117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 22127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 22137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 22147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 22157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 22167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 22177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44> 22187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray44 { 22197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 22207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 22217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 22227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 22237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 22247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 22257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), 22267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), 22277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), 22287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), 22297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), 22307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), 22317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), 22327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v43_(v43), v44_(v44) {} 22337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 22347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 22357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 22367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 22377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 22387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 22397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_}; 22407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 22417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 22427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 22437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2244190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2245190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray44& other); 2246190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 22477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 22487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 22497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 22507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 22517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 22527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 22537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 22547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 22557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 22567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 22577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 22587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 22597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 22607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 22617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 22627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 22637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 22647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 22657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 22667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 22677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 22687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 22697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 22707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 22717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 22727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 22737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 22747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 22757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 22767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 22777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 22787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 22797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 22807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 22817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 22827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 22837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 22847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 22857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 22867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 22877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 22887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 22897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 22907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 22917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 22927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 22937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 22947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 22957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 22967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 22977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 22987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 22997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 23007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 23017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45> 23027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray45 { 23037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 23047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 23057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 23067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 23077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 23087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 23097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), 23107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), 23117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), 23127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), 23137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), 23147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), 23157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), 23167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} 23177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 23187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 23197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 23207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 23217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 23227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 23237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_}; 23247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 23257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 23267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 23277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2328190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2329190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray45& other); 2330190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 23317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 23327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 23337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 23347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 23357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 23367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 23377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 23387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 23397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 23407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 23417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 23427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 23437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 23447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 23457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 23467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 23477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 23487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 23497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 23507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 23517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 23527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 23537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 23547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 23557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 23567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 23577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 23587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 23597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 23607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 23617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 23627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 23637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 23647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 23657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 23667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 23677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 23687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 23697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 23707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 23717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 23727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 23737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 23747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 23757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 23767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 23777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 23787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 23797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 23807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 23817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 23827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 23837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 23847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 23857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 23867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45, 23877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T46> 23887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray46 { 23897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 23907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 23917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 23927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 23937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 23947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 23957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), 23967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 23977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 23987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 23997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 24007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 24017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), 24027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} 24037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 24047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 24057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 24067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 24077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 24087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 24097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_}; 24107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 24117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 24127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 24137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2414190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2415190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray46& other); 2416190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 24177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 24187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 24197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 24207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 24217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 24227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 24237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 24247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 24257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 24267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 24277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 24287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 24297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 24307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 24317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 24327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 24337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 24347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 24357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 24367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 24377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 24387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 24397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 24407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 24417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 24427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 24437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 24447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 24457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 24467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 24477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 24487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 24497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 24507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 24517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 24527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 24537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 24547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 24557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 24567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 24577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 24587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 24597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 24607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 24617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 24627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T46 v46_; 24637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 24647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 24657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 24667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 24677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 24687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 24697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 24707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 24717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 24727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 24737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45, 24747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T46, typename T47> 24757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray47 { 24767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 24777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 24787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 24797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 24807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 24817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 24827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), 24837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), 24847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), 24857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), 24867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), 24877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), 24887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), 24897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), 24907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v47_(v47) {} 24917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 24927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 24937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 24947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 24957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 24967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 24977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, 24987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v47_}; 24997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 25007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 25017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 25027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2503190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2504190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray47& other); 2505190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 25067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 25077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 25087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 25097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 25107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 25117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 25127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 25137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 25147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 25157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 25167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 25177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 25187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 25197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 25207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 25217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 25227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 25237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 25247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 25257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 25267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 25277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 25287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 25297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 25307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 25317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 25327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 25337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 25347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 25357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 25367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 25377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 25387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 25397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 25407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 25417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 25427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 25437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 25447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 25457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 25467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 25477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 25487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 25497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 25507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 25517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T46 v46_; 25527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T47 v47_; 25537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 25547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 25557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 25567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 25577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 25587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 25597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 25607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 25617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 25627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 25637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45, 25647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T46, typename T47, typename T48> 25657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray48 { 25667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 25677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 25687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 25697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 25707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 25717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 25727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), 25737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), 25747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), 25757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), 25767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), 25777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), 25787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), 25797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), 25807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v46_(v46), v47_(v47), v48_(v48) {} 25817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 25827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 25837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 25847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 25857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 25867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 25877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, 25887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v48_}; 25897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 25907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 25917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 25927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2593190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2594190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray48& other); 2595190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 25967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 25977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 25987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 25997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 26007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 26017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 26027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 26037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 26047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 26057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 26067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 26077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 26087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 26097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 26107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 26117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 26127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 26137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 26147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 26157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 26167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 26177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 26187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 26197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 26207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 26217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 26227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 26237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 26247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 26257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 26267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 26277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 26287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 26297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 26307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 26317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 26327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 26337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 26347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 26357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 26367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 26377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 26387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 26397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 26407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 26417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T46 v46_; 26427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T47 v47_; 26437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T48 v48_; 26447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 26457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 26467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 26477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 26487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 26497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 26507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 26517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 26527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 26537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 26547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45, 26557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T46, typename T47, typename T48, typename T49> 26567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray49 { 26577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 26587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 26597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 26607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 26617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 26627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 26637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, 26647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 26657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 26667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 26677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 26687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 26697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 26707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), 26717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} 26727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 26737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 26747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 26757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 26767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 26777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 26787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, 26797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v48_, v49_}; 26807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 26817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 26827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 26837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2684190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2685190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray49& other); 2686190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 26877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 26887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 26897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 26907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 26917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 26927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 26937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 26947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 26957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 26967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 26977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 26987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 26997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 27007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 27017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 27027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 27037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 27047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 27057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 27067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 27077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 27087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 27097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 27107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 27117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 27127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 27137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 27147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 27157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 27167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 27177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 27187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 27197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 27207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 27217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 27227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 27237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 27247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 27257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 27267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 27277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 27287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 27297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 27307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 27317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 27327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T46 v46_; 27337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T47 v47_; 27347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T48 v48_; 27357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T49 v49_; 27367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 27377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 27387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 27397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10, 27407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T11, typename T12, typename T13, typename T14, typename T15, 27417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T16, typename T17, typename T18, typename T19, typename T20, 27427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T21, typename T22, typename T23, typename T24, typename T25, 27437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T26, typename T27, typename T28, typename T29, typename T30, 27447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T31, typename T32, typename T33, typename T34, typename T35, 27457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T36, typename T37, typename T38, typename T39, typename T40, 27467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T41, typename T42, typename T43, typename T44, typename T45, 27477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T46, typename T47, typename T48, typename T49, typename T50> 27487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass ValueArray50 { 27497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 27507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 27517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 27527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 27537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 27547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 27557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, 27567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), 27577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), 27587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), 27597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), 27607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), 27617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), 27627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), 27637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} 27647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 27657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T> 27667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator<T>() const { 27677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, 27687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, 27697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, 27707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, 27717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman v48_, v49_, v50_}; 27727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ValuesIn(array); 27737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 27747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 27757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 2776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const ValueArray50& other); 2778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 27797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1 v1_; 27807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2 v2_; 27817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T3 v3_; 27827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T4 v4_; 27837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T5 v5_; 27847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T6 v6_; 27857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T7 v7_; 27867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T8 v8_; 27877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T9 v9_; 27887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T10 v10_; 27897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T11 v11_; 27907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T12 v12_; 27917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T13 v13_; 27927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T14 v14_; 27937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T15 v15_; 27947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T16 v16_; 27957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T17 v17_; 27967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T18 v18_; 27977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T19 v19_; 27987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T20 v20_; 27997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T21 v21_; 28007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T22 v22_; 28017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T23 v23_; 28027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T24 v24_; 28037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T25 v25_; 28047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T26 v26_; 28057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T27 v27_; 28067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T28 v28_; 28077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T29 v29_; 28087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T30 v30_; 28097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T31 v31_; 28107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T32 v32_; 28117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T33 v33_; 28127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T34 v34_; 28137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T35 v35_; 28147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T36 v36_; 28157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T37 v37_; 28167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T38 v38_; 28177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T39 v39_; 28187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T40 v40_; 28197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T41 v41_; 28207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T42 v42_; 28217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T43 v43_; 28227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T44 v44_; 28237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T45 v45_; 28247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T46 v46_; 28257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T47 v47_; 28267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T48 v48_; 28277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T49 v49_; 28287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T50 v50_; 28297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 28307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2831b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# if GTEST_HAS_COMBINE 28327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 28337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 28347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates values from the Cartesian product of values produced 28357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// by the argument generators. 28367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 28377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 28387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator2 28397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > { 28407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 28417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2> ParamType; 28427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 28437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator2(const ParamGenerator<T1>& g1, 28447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2) 28457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2) {} 28467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator2() {} 28477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 28487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 28497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); 28507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 28527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); 28537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 28557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 28567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 28577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 28587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 28597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 28607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 28617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 28627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2) 28637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 28647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 28657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { 28667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 28677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 28697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 28707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 28717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 28727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 28747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 28757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 28767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 28777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 28787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 28797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 28807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 28817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 28837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 28857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 28867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 28877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 28887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 28897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 28907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 28917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 28927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 28937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 28947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 28957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 28967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 28977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 28987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 28997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 29007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 29017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 29027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_); 29037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 29067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 29077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 29087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 29097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 29107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 29117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 29127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 29137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_) { 29147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 29157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 29187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 29197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_); 29207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 29227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 29237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 29247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 29257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 29267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_; 29277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2929190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2930190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 2931190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 29327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 29337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 29347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 29357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 29367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 29377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 29387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 29397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 29407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 29417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 2942190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator2::Iterator 2943190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 2944190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 2945190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator2& other); 29467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 29487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 2949190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator2 29507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3> 29537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator3 29547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > { 29557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 29567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3> ParamType; 29577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator3(const ParamGenerator<T1>& g1, 29597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3) 29607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3) {} 29617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator3() {} 29627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 29647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 29657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin()); 29667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 29687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); 29697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 29727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 29737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 29747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 29757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 29767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 29777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 29787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 29797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 29807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3) 29817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 29827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 29837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 29847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { 29857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 29867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 29887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 29907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 29917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 29927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 29937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 29947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 29957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 29967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 29977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 29987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 29997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 30007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 30027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 30037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 30047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 30067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 30087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 30097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 30117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 30127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 30137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 30147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 30157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 30167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 30177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 30187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 30197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 30207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 30217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 30227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 30237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 30247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 30257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 30267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_); 30277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 30307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 30317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 30327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 30337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 30347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 30357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 30367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 30377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 30387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 30397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 30407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_) { 30417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 30427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 30457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 30467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_); 30477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 30497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 30507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 30517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 30527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 30537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 30547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_; 30557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 30567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3057190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3058190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3059190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 30607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 30617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 30627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 30637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 30647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 30657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 30667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 30677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 30687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 30697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 30707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 30717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 30727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3073190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator3::Iterator 3074190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3075190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3076190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator3& other); 30777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 30797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 30807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 3081190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator3 30827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4> 30857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator4 30867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > { 30877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 30887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType; 30897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator4(const ParamGenerator<T1>& g1, 30917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 30927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4) 30937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} 30947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator4() {} 30957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 30967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 30977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 30987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin()); 30997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 31017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 31027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end()); 31037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 31057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 31067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 31077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 31087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 31097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 31107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 31117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 31127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 31137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 31147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 31157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 31167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4) 31177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 31187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 31197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 31207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 31217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { 31227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 31237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 31257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 31267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 31277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 31287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 31307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 31317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 31327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 31337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 31347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 31357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 31367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 31377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 31397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 31407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 31417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 31437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 31447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 31457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 31477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 31497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 31507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 31527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 31537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 31547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 31557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 31567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 31577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 31587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 31597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 31607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 31617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 31627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 31637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 31647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 31657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 31667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 31677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 31687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_); 31697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 31717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 31727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 31737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 31747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 31757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 31767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 31777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 31787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 31797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 31807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 31817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 31827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 31837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 31847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 31857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_) { 31867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 31877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 31897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 31907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 31917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 31927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_); 31937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 31947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 31957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 31967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 31977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 31987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 31997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 32007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 32017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_; 32027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3204190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3205190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3206190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 32077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 32087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 32097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 32107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 32117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 32127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 32137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 32147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 32157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 32167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 32177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 32187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 32197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 32207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 32217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 32227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3223190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator4::Iterator 3224190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3225190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3226190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator4& other); 32277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 32297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 32307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 32317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 3232190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator4 32337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 32367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator5 32377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > { 32387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 32397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType; 32407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator5(const ParamGenerator<T1>& g1, 32427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 32437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5) 32447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} 32457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator5() {} 32467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 32487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 32497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); 32507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 32527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 32537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end()); 32547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 32577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 32587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 32597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 32607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 32617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 32627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 32637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 32647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 32657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 32667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 32677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 32687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 32697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5) 32707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 32717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 32727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 32737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 32747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 32757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { 32767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 32777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 32797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 32817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 32827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 32847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 32857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 32867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 32877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 32887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 32897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 32907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 32917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 32937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 32947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 32957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 32967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 32977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 32987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 32997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 33017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 33027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 33037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 33057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 33077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 33087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 33107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 33117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 33127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 33137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 33147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 33157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 33167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 33177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 33187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 33197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 33207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 33217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 33227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 33237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 33247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 33257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 33267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 33277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_); 33287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 33307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 33317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 33327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 33337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 33347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 33357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 33367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 33377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 33387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 33397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 33407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 33417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 33427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 33437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 33447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 33457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 33467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 33477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_) { 33487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 33497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 33517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 33527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 33537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 33547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_); 33557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 33577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 33587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 33597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 33607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 33617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 33627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 33637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 33647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_; 33657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 33667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3367190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3368190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3369190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 33707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 33717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 33727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 33737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 33747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 33757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 33767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 33777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 33787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 33797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 33807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 33817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 33827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 33837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 33847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 33857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 33867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 33877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 33887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3389190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator5::Iterator 3390190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3391190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3392190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator5& other); 33937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 33947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 33957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 33967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 33977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 33987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 3399190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator5 34007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 34037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6> 34047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator6 34057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, 34067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T6> > { 34077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 34087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType; 34097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator6(const ParamGenerator<T1>& g1, 34117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 34127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 34137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6) 34147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} 34157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator6() {} 34167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 34187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 34197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); 34207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 34227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 34237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); 34247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 34277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 34287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 34297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 34307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 34317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 34327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 34337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 34347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 34357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 34367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 34377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 34387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 34397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5, 34407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, 34417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator& current6) 34427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 34437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 34447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 34457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 34467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 34477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 34487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { 34497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 34507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 34527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 34547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 34557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 34577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 34587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 34597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 34607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current6_; 34617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current6_ == end6_) { 34627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ = begin6_; 34637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 34647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 34667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 34677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 34687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 34707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 34717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 34727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 34747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 34757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 34767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 34787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 34797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 34807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 34827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 34847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 34857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 34867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 34877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 34887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 34897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 34907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 34917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 34927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 34937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 34947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 34957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 34967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 34977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 34987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 34997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 35007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 35017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 35027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 35037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 35047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_ && 35057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == typed_other->current6_); 35067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 35077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 35097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 35107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 35117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 35127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 35137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 35147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 35157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 35167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 35177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 35187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 35197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 35207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 35217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 35227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 35237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 35247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 35257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_), 35267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(other.begin6_), 35277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end6_(other.end6_), 35287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_(other.current6_) { 35297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 35307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 35317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 35337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 35347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 35357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_, *current6_); 35367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 35377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 35387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 35397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 35407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 35417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 35427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 35437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 35447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 35457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_ || 35467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == end6_; 35477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 35487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3549190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3550190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 35527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 35537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 35547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 35557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 35567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 35577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 35587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 35597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 35607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 35617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 35627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 35637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 35647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 35657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 35667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 35677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 35687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 35697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 35707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator begin6_; 35717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator end6_; 35727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T6>::iterator current6_; 35737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3574190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator6::Iterator 3575190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3576190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3577190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator6& other); 35787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 35807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 35817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 35827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 35837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 35847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6> g6_; 3585190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator6 35867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 35897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7> 35907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator7 35917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, 35927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T7> > { 35937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 35947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType; 35957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 35967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator7(const ParamGenerator<T1>& g1, 35977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 35987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 35997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7) 36007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} 36017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator7() {} 36027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 36037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 36047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 36057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 36067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g7_.begin()); 36077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 36097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 36107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); 36117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 36137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 36147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 36157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 36167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 36177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 36187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 36197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 36207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 36217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 36227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 36237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 36247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 36257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 36267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5, 36277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, 36287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator& current6, 36297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7>& g7, 36307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator& current7) 36317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 36327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 36337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 36347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 36357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 36367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 36377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 36387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { 36397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 36407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 36427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 36437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 36447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 36457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 36477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 36487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 36497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 36507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current7_; 36517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current7_ == end7_) { 36527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ = begin7_; 36537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current6_; 36547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current6_ == end6_) { 36567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ = begin6_; 36577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 36587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 36607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 36617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 36627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 36647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 36657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 36667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 36687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 36697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 36707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 36727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 36737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 36747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 36767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 36787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 36797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 36807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 36817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 36827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 36837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 36847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 36857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 36867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 36877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 36887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 36897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 36907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 36917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 36927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 36937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 36947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 36957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 36967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 36977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 36987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_ && 36997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == typed_other->current6_ && 37007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == typed_other->current7_); 37017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 37027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 37047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 37057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 37067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 37077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 37087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 37097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 37107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 37117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 37127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 37137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 37147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 37157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 37167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 37177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 37187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 37197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 37207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_), 37217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(other.begin6_), 37227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end6_(other.end6_), 37237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_(other.current6_), 37247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(other.begin7_), 37257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end7_(other.end7_), 37267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_(other.current7_) { 37277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 37287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 37297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 37317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 37327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 37337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_, *current6_, *current7_); 37347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 37357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 37367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 37377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 37387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 37397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 37407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 37417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 37427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 37437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_ || 37447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == end6_ || 37457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == end7_; 37467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 37477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3748190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3749190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3750190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 37517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 37527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 37537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 37547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 37557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 37567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 37577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 37587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 37597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 37607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 37617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 37627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 37637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 37647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 37657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 37667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 37677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 37687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 37697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator begin6_; 37707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator end6_; 37717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T6>::iterator current6_; 37727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator begin7_; 37737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator end7_; 37747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T7>::iterator current7_; 37757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator7::Iterator 3777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3779190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator7& other); 37807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 37827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 37837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 37847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 37857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 37867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6> g6_; 37877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7> g7_; 3788190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator7 37897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 37927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8> 37937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator8 37947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, 37957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T7, T8> > { 37967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 37977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType; 37987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 37997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator8(const ParamGenerator<T1>& g1, 38007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 38017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 38027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 38037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8) 38047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), 38057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g8_(g8) {} 38067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator8() {} 38077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 38087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 38097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 38107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 38117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g7_.begin(), g8_, g8_.begin()); 38127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 38147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 38157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 38167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g8_.end()); 38177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 38197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 38207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 38217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 38227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 38237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 38247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 38257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 38267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 38277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 38287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 38297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 38307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 38317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 38327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5, 38337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, 38347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator& current6, 38357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7>& g7, 38367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator& current7, 38377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8, 38387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator& current8) 38397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 38407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 38417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 38427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 38437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 38447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 38457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 38467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 38477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { 38487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 38497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 38517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 38527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 38537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 38547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 38567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 38577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 38587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 38597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current8_; 38607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current8_ == end8_) { 38617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ = begin8_; 38627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current7_; 38637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current7_ == end7_) { 38657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ = begin7_; 38667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current6_; 38677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current6_ == end6_) { 38697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ = begin6_; 38707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 38717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 38737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 38747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 38757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 38777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 38787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 38797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 38817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 38827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 38837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 38857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 38867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 38877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 38897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 38917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 38927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 38937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 38947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 38957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 38967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 38977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 38987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 38997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 39007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 39017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 39027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 39037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 39047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 39057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 39067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 39077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 39087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 39097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 39107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 39117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_ && 39127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == typed_other->current6_ && 39137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == typed_other->current7_ && 39147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == typed_other->current8_); 39157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 39167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 39177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 39187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 39197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 39207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 39217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 39227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 39237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 39247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 39257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 39267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 39277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 39287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 39297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 39307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 39317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 39327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 39337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 39347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_), 39357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(other.begin6_), 39367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end6_(other.end6_), 39377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_(other.current6_), 39387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(other.begin7_), 39397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end7_(other.end7_), 39407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_(other.current7_), 39417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(other.begin8_), 39427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end8_(other.end8_), 39437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_(other.current8_) { 39447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 39457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 39467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 39477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 39487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 39497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 39507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_, *current6_, *current7_, *current8_); 39517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 39527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 39537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 39547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 39557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 39567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 39577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 39587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 39597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 39607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_ || 39617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == end6_ || 39627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == end7_ || 39637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == end8_; 39647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 39657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3966190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 3967190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 3968190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 39697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 39707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 39717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 39727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 39737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 39747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 39757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 39767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 39777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 39787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 39797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 39807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 39817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 39827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 39837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 39847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 39857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 39867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 39877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator begin6_; 39887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator end6_; 39897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T6>::iterator current6_; 39907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator begin7_; 39917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator end7_; 39927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T7>::iterator current7_; 39937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator begin8_; 39947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator end8_; 39957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T8>::iterator current8_; 39967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 3997190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator8::Iterator 3998190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3999190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4000190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator8& other); 40017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 40037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 40047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 40057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 40067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 40077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6> g6_; 40087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7> g7_; 40097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8> g8_; 4010190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator8 40117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 40147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9> 40157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator9 40167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, 40177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T7, T8, T9> > { 40187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 40197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType; 40207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator9(const ParamGenerator<T1>& g1, 40227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 40237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 40247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 40257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9) 40267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 40277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g9_(g9) {} 40287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator9() {} 40297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 40317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 40327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 40337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); 40347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 40367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 40377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 40387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g8_.end(), g9_, g9_.end()); 40397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 40427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 40437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 40447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 40457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 40467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 40477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 40487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 40497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 40507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 40517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 40527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 40537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 40547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5, 40557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, 40567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator& current6, 40577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7>& g7, 40587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator& current7, 40597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8, 40607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator& current8, 40617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T9>& g9, 40627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator& current9) 40637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 40647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 40657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 40667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 40677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 40687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 40697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 40707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 40717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(g8.begin()), end8_(g8.end()), current8_(current8), 40727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { 40737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 40747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 40767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 40777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 40787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 40797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 40817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 40827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 40837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 40847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current9_; 40857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current9_ == end9_) { 40867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ = begin9_; 40877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current8_; 40887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current8_ == end8_) { 40907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ = begin8_; 40917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current7_; 40927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current7_ == end7_) { 40947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ = begin7_; 40957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current6_; 40967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 40977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current6_ == end6_) { 40987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ = begin6_; 40997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 41007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 41027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 41037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 41047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 41067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 41077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 41087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 41107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 41117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 41127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 41147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 41157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 41167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 41187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 41207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 41217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 41237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 41247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 41257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 41267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 41277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 41287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 41297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 41307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 41317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 41327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 41337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 41347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 41357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 41367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 41377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 41387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 41397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 41407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_ && 41417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == typed_other->current6_ && 41427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == typed_other->current7_ && 41437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == typed_other->current8_ && 41447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ == typed_other->current9_); 41457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 41477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 41487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 41497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 41507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 41517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 41527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 41537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 41547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 41557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 41567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 41577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 41587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 41597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 41607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 41617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 41627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 41637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 41647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_), 41657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(other.begin6_), 41667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end6_(other.end6_), 41677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_(other.current6_), 41687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(other.begin7_), 41697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end7_(other.end7_), 41707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_(other.current7_), 41717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(other.begin8_), 41727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end8_(other.end8_), 41737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_(other.current8_), 41747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin9_(other.begin9_), 41757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end9_(other.end9_), 41767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_(other.current9_) { 41777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 41787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 41807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 41817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 41827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 41837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_, *current6_, *current7_, *current8_, 41847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current9_); 41857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 41867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 41877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 41887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 41897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 41907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 41917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 41927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 41937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 41947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_ || 41957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == end6_ || 41967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == end7_ || 41977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == end8_ || 41987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ == end9_; 41997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 42007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4201190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4202190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 4203190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 42047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 42057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 42067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 42077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 42087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 42097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 42107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 42117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 42127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 42137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 42147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 42157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 42167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 42177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 42187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 42197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 42207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 42217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 42227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator begin6_; 42237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator end6_; 42247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T6>::iterator current6_; 42257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator begin7_; 42267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator end7_; 42277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T7>::iterator current7_; 42287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator begin8_; 42297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator end8_; 42307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T8>::iterator current8_; 42317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator begin9_; 42327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator end9_; 42337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T9>::iterator current9_; 42347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 4235190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator9::Iterator 4236190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 4237190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4238190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator9& other); 42397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 42417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 42427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 42437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 42447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 42457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6> g6_; 42467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7> g7_; 42477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8> g8_; 42487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T9> g9_; 4249190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator9 42507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 42537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10> 42547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductGenerator10 42557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, 42567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T7, T8, T9, T10> > { 42577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 42587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType; 42597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CartesianProductGenerator10(const ParamGenerator<T1>& g1, 42617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, 42627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, 42637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, 42647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9, 42657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T10>& g10) 42667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 42677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g9_(g9), g10_(g10) {} 42687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~CartesianProductGenerator10() {} 42697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Begin() const { 42717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, 42727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, 42737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); 42747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 42757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* End() const { 42767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), 42777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, 42787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g8_.end(), g9_, g9_.end(), g10_, g10_.end()); 42797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 42807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 42817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 42827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Iterator : public ParamIteratorInterface<ParamType> { 42837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 42847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const ParamGeneratorInterface<ParamType>* base, 42857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1>& g1, 42867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator& current1, 42877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2>& g2, 42887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator& current2, 42897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3>& g3, 42907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator& current3, 42917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4>& g4, 42927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator& current4, 42937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5>& g5, 42947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator& current5, 42957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6>& g6, 42967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator& current6, 42977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7>& g7, 42987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator& current7, 42997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8>& g8, 43007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator& current8, 43017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T9>& g9, 43027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator& current9, 43037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T10>& g10, 43047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T10>::iterator& current10) 43057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(base), 43067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(g1.begin()), end1_(g1.end()), current1_(current1), 43077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(g2.begin()), end2_(g2.end()), current2_(current2), 43087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(g3.begin()), end3_(g3.end()), current3_(current3), 43097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(g4.begin()), end4_(g4.end()), current4_(current4), 43107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(g5.begin()), end5_(g5.end()), current5_(current5), 43117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(g6.begin()), end6_(g6.end()), current6_(current6), 43127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(g7.begin()), end7_(g7.end()), current7_(current7), 43137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(g8.begin()), end8_(g8.end()), current8_(current8), 43147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin9_(g9.begin()), end9_(g9.end()), current9_(current9), 43157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { 43167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 43177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Iterator() {} 43197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 43207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { 43217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return base_; 43227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Advance should not be called on beyond-of-range iterators 43247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so no component iterators must be beyond end of range, either. 43257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void Advance() { 43267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman assert(!AtEnd()); 43277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current10_; 43287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current10_ == end10_) { 43297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current10_ = begin10_; 43307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current9_; 43317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current9_ == end9_) { 43337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ = begin9_; 43347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current8_; 43357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current8_ == end8_) { 43377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ = begin8_; 43387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current7_; 43397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current7_ == end7_) { 43417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ = begin7_; 43427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current6_; 43437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current6_ == end6_) { 43457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ = begin6_; 43467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current5_; 43477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current5_ == end5_) { 43497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ = begin5_; 43507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current4_; 43517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current4_ == end4_) { 43537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ = begin4_; 43547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current3_; 43557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current3_ == end3_) { 43577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ = begin3_; 43587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current2_; 43597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (current2_ == end2_) { 43617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ = begin2_; 43627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++current1_; 43637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 43657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ParamIteratorInterface<ParamType>* Clone() const { 43677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return new Iterator(*this); 43687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual const ParamType* Current() const { return ¤t_value_; } 43707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { 43717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Having the same base generator guarantees that the other 43727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // iterator is of the same type and we can downcast. 43737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) 43747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "The program attempted to compare iterators " 43757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "from different generators." << std::endl; 43767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Iterator* typed_other = 43777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman CheckedDowncastToActualType<const Iterator>(&other); 43787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterators equal if they both point beyond their 43797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // respective ranges. That can happen in a variety of fashions, 43807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // so we have to consult AtEnd(). 43817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (AtEnd() && typed_other->AtEnd()) || 43827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ( 43837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == typed_other->current1_ && 43847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == typed_other->current2_ && 43857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == typed_other->current3_ && 43867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == typed_other->current4_ && 43877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == typed_other->current5_ && 43887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == typed_other->current6_ && 43897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == typed_other->current7_ && 43907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == typed_other->current8_ && 43917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ == typed_other->current9_ && 43927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current10_ == typed_other->current10_); 43937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 43947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 43957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 43967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Iterator(const Iterator& other) 43977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : base_(other.base_), 43987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin1_(other.begin1_), 43997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end1_(other.end1_), 44007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_(other.current1_), 44017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin2_(other.begin2_), 44027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end2_(other.end2_), 44037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_(other.current2_), 44047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin3_(other.begin3_), 44057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end3_(other.end3_), 44067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_(other.current3_), 44077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin4_(other.begin4_), 44087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end4_(other.end4_), 44097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_(other.current4_), 44107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin5_(other.begin5_), 44117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end5_(other.end5_), 44127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_(other.current5_), 44137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin6_(other.begin6_), 44147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end6_(other.end6_), 44157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_(other.current6_), 44167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin7_(other.begin7_), 44177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end7_(other.end7_), 44187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_(other.current7_), 44197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin8_(other.begin8_), 44207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end8_(other.end8_), 44217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_(other.current8_), 44227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin9_(other.begin9_), 44237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end9_(other.end9_), 44247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_(other.current9_), 44257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman begin10_(other.begin10_), 44267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman end10_(other.end10_), 44277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current10_(other.current10_) { 44287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ComputeCurrentValue(); 44297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 44307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 44317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void ComputeCurrentValue() { 44327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (!AtEnd()) 44337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current_value_ = ParamType(*current1_, *current2_, *current3_, 44347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current4_, *current5_, *current6_, *current7_, *current8_, 44357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman *current9_, *current10_); 44367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 44377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool AtEnd() const { 44387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We must report iterator past the end of the range when either of the 44397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // component iterators has reached the end of its range. 44407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return 44417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current1_ == end1_ || 44427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current2_ == end2_ || 44437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current3_ == end3_ || 44447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current4_ == end4_ || 44457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current5_ == end5_ || 44467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current6_ == end6_ || 44477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current7_ == end7_ || 44487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current8_ == end8_ || 44497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current9_ == end9_ || 44507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman current10_ == end10_; 44517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 44527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4453190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4454190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const Iterator& other); 4455190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 44567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGeneratorInterface<ParamType>* const base_; 44577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. 44587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // current[i]_ is the actual traversing iterator. 44597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator begin1_; 44607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T1>::iterator end1_; 44617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T1>::iterator current1_; 44627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator begin2_; 44637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T2>::iterator end2_; 44647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T2>::iterator current2_; 44657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator begin3_; 44667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T3>::iterator end3_; 44677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T3>::iterator current3_; 44687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator begin4_; 44697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T4>::iterator end4_; 44707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T4>::iterator current4_; 44717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator begin5_; 44727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T5>::iterator end5_; 44737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T5>::iterator current5_; 44747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator begin6_; 44757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T6>::iterator end6_; 44767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T6>::iterator current6_; 44777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator begin7_; 44787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T7>::iterator end7_; 44797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T7>::iterator current7_; 44807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator begin8_; 44817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T8>::iterator end8_; 44827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T8>::iterator current8_; 44837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator begin9_; 44847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T9>::iterator end9_; 44857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T9>::iterator current9_; 44867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T10>::iterator begin10_; 44877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const typename ParamGenerator<T10>::iterator end10_; 44887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename ParamGenerator<T10>::iterator current10_; 44897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ParamType current_value_; 4490190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; // class CartesianProductGenerator10::Iterator 4491190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 4492190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4493190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductGenerator10& other); 44947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 44957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T1> g1_; 44967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T2> g2_; 44977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T3> g3_; 44987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T4> g4_; 44997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T5> g5_; 45007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T6> g6_; 45017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T7> g7_; 45027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T8> g8_; 45037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T9> g9_; 45047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamGenerator<T10> g10_; 4505190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductGenerator10 45067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 45097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 45107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper classes providing Combine() with polymorphic features. They allow 45117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is 45127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// convertible to U. 45137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 45147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2> 45157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder2 { 45167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 45177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder2(const Generator1& g1, const Generator2& g2) 45187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2) {} 45197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 45207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const { 45217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2> >( 45227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator2<T1, T2>( 45237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 45247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_))); 45257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 45267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4528190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4529190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder2& other); 4530190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 45317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 45327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 4533190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder2 45347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3> 45367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder3 { 45377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 45387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder3(const Generator1& g1, const Generator2& g2, 45397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3) 45407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3) {} 45417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3> 45427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const { 45437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >( 45447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator3<T1, T2, T3>( 45457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 45467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 45477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_))); 45487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 45497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder3& other); 4553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 45547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 45557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 45567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 4557190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder3 45587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 45607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4> 45617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder4 { 45627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 45637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder4(const Generator1& g1, const Generator2& g2, 45647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4) 45657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} 45667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4> 45677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const { 45687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >( 45697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator4<T1, T2, T3, T4>( 45707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 45717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 45727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 45737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_))); 45747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 45757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4577190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4578190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder4& other); 4579190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 45807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 45817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 45827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 45837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 4584190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder4 45857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 45867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 45877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5> 45887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder5 { 45897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 45907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder5(const Generator1& g1, const Generator2& g2, 45917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5) 45927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} 45937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5> 45947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const { 45957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >( 45967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator5<T1, T2, T3, T4, T5>( 45977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 45987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 45997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 46007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 46017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_))); 46027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 46037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4605190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4606190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder5& other); 4607190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 46087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 46097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 46107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 46117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 46127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 4613190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder5 46147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 46167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5, class Generator6> 46177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder6 { 46187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 46197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder6(const Generator1& g1, const Generator2& g2, 46207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5, 46217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6& g6) 46227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} 46237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5, 46247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6> 46257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const { 46267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >( 46277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>( 46287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 46297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 46307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 46317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 46327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_), 46337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T6> >(g6_))); 46347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 46357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4637190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4638190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder6& other); 4639190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 46407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 46417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 46427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 46437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 46447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 46457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6 g6_; 4646190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder6 46477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 46497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5, class Generator6, class Generator7> 46507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder7 { 46517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 46527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder7(const Generator1& g1, const Generator2& g2, 46537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5, 46547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6& g6, const Generator7& g7) 46557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} 46567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5, 46577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7> 46587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, 46597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T7> >() const { 46607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >( 46617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>( 46627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 46637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 46647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 46657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 46667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_), 46677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T6> >(g6_), 46687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T7> >(g7_))); 46697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 46707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4672190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4673190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder7& other); 4674190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 46757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 46767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 46777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 46787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 46797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 46807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6 g6_; 46817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator7 g7_; 4682190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder7 46837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 46847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 46857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5, class Generator6, class Generator7, 46867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator8> 46877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder8 { 46887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 46897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder8(const Generator1& g1, const Generator2& g2, 46907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5, 46917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6& g6, const Generator7& g7, const Generator8& g8) 46927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), 46937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g8_(g8) {} 46947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5, 46957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8> 46967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, 46977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T8> >() const { 46987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >( 46997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>( 47007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 47017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 47027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 47037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 47047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_), 47057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T6> >(g6_), 47067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T7> >(g7_), 47077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T8> >(g8_))); 47087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 47097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4711190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4712190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder8& other); 4713190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 47147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 47157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 47167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 47177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 47187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 47197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6 g6_; 47207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator7 g7_; 47217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator8 g8_; 4722190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder8 47237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 47257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5, class Generator6, class Generator7, 47267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator8, class Generator9> 47277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder9 { 47287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 47297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder9(const Generator1& g1, const Generator2& g2, 47307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5, 47317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6& g6, const Generator7& g7, const Generator8& g8, 47327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator9& g9) 47337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 47347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g9_(g9) {} 47357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5, 47367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9> 47377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 47387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T9> >() const { 47397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 47407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T9> >( 47417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>( 47427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 47437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 47447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 47457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 47467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_), 47477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T6> >(g6_), 47487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T7> >(g7_), 47497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T8> >(g8_), 47507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T9> >(g9_))); 47517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 47527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4754190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4755190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder9& other); 4756190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 47577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 47587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 47597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 47607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 47617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 47627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6 g6_; 47637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator7 g7_; 47647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator8 g8_; 47657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator9 g9_; 4766190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder9 47677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <class Generator1, class Generator2, class Generator3, 47697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator4, class Generator5, class Generator6, class Generator7, 47707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman class Generator8, class Generator9, class Generator10> 47717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CartesianProductHolder10 { 47727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 47737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanCartesianProductHolder10(const Generator1& g1, const Generator2& g2, 47747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3& g3, const Generator4& g4, const Generator5& g5, 47757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6& g6, const Generator7& g7, const Generator8& g8, 47767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator9& g9, const Generator10& g10) 47777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), 47787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman g9_(g9), g10_(g10) {} 47797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2, typename T3, typename T4, typename T5, 47807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typename T6, typename T7, typename T8, typename T9, typename T10> 47817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 47827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T9, T10> >() const { 47837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, 47847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T9, T10> >( 47857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9, 47867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T10>( 47877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T1> >(g1_), 47887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T2> >(g2_), 47897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T3> >(g3_), 47907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T4> >(g4_), 47917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T5> >(g5_), 47927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T6> >(g6_), 47937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T7> >(g7_), 47947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T8> >(g8_), 47957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T9> >(g9_), 47967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<ParamGenerator<T10> >(g10_))); 47977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 47987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4800190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // No implementation - assignment is unsupported. 4801190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void operator=(const CartesianProductHolder10& other); 4802190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 48037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator1 g1_; 48047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator2 g2_; 48057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator3 g3_; 48067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator4 g4_; 48077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator5 g5_; 48087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator6 g6_; 48097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator7 g7_; 48107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator8 g8_; 48117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator9 g9_; 48127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const Generator10 g10_; 4813190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class CartesianProductHolder10 48147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4815b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# endif // GTEST_HAS_COMBINE 48167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 48177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 48187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace testing 48197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 48207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_PARAM_TEST 48217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 48227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 4823