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