jieba_rb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +51 -0
  8. data/Rakefile +11 -0
  9. data/ext/cppjieba/.gitignore +17 -0
  10. data/ext/cppjieba/.travis.yml +22 -0
  11. data/ext/cppjieba/CMakeLists.txt +27 -0
  12. data/ext/cppjieba/ChangeLog.md +81 -0
  13. data/ext/cppjieba/Dockerfile +11 -0
  14. data/ext/cppjieba/LICENSE +20 -0
  15. data/ext/cppjieba/README.md +359 -0
  16. data/ext/cppjieba/conf/CMakeLists.txt +1 -0
  17. data/ext/cppjieba/conf/server.conf +16 -0
  18. data/ext/cppjieba/dict/CMakeLists.txt +1 -0
  19. data/ext/cppjieba/dict/README.md +31 -0
  20. data/ext/cppjieba/dict/extra_dict/jieba.dict.small.utf8 +109750 -0
  21. data/ext/cppjieba/dict/gbk_dict/hmm_model.gbk +34 -0
  22. data/ext/cppjieba/dict/gbk_dict/jieba.dict.gbk +348982 -0
  23. data/ext/cppjieba/dict/hmm_model.utf8 +34 -0
  24. data/ext/cppjieba/dict/idf.utf8 +258826 -0
  25. data/ext/cppjieba/dict/jieba.dict.utf8 +348982 -0
  26. data/ext/cppjieba/dict/pos_dict/char_state_tab.utf8 +6653 -0
  27. data/ext/cppjieba/dict/pos_dict/prob_emit.utf8 +166 -0
  28. data/ext/cppjieba/dict/pos_dict/prob_start.utf8 +259 -0
  29. data/ext/cppjieba/dict/pos_dict/prob_trans.utf8 +5222 -0
  30. data/ext/cppjieba/dict/stop_words.utf8 +1534 -0
  31. data/ext/cppjieba/dict/user.dict.utf8 +3 -0
  32. data/ext/cppjieba/script/CMakeLists.txt +1 -0
  33. data/ext/cppjieba/script/cjserver.start +12 -0
  34. data/ext/cppjieba/script/cjserver.stop +13 -0
  35. data/ext/cppjieba/server/CMakeLists.txt +9 -0
  36. data/ext/cppjieba/server/Husky/HttpReqInfo.hpp +294 -0
  37. data/ext/cppjieba/server/Husky/IRequestHandler.hpp +18 -0
  38. data/ext/cppjieba/server/Husky/ThreadPoolServer.hpp +108 -0
  39. data/ext/cppjieba/server/Husky/WorkerThread.hpp +133 -0
  40. data/ext/cppjieba/server/server.cpp +91 -0
  41. data/ext/cppjieba/src/DictTrie.hpp +211 -0
  42. data/ext/cppjieba/src/FullSegment.hpp +153 -0
  43. data/ext/cppjieba/src/HMMSegment.hpp +394 -0
  44. data/ext/cppjieba/src/ISegment.hpp +17 -0
  45. data/ext/cppjieba/src/KeywordExtractor.hpp +173 -0
  46. data/ext/cppjieba/src/Limonp/ArgvContext.hpp +84 -0
  47. data/ext/cppjieba/src/Limonp/BlockingQueue.hpp +128 -0
  48. data/ext/cppjieba/src/Limonp/BoundedQueue.hpp +73 -0
  49. data/ext/cppjieba/src/Limonp/CastFloat.hpp +90 -0
  50. data/ext/cppjieba/src/Limonp/Condition.hpp +48 -0
  51. data/ext/cppjieba/src/Limonp/Config.hpp +118 -0
  52. data/ext/cppjieba/src/Limonp/HandyMacro.hpp +31 -0
  53. data/ext/cppjieba/src/Limonp/InitOnOff.hpp +21 -0
  54. data/ext/cppjieba/src/Limonp/LocalVector.hpp +171 -0
  55. data/ext/cppjieba/src/Limonp/Logger.hpp +74 -0
  56. data/ext/cppjieba/src/Limonp/Md5.hpp +432 -0
  57. data/ext/cppjieba/src/Limonp/MutexLock.hpp +57 -0
  58. data/ext/cppjieba/src/Limonp/MysqlClient.hpp +125 -0
  59. data/ext/cppjieba/src/Limonp/NonCopyable.hpp +22 -0
  60. data/ext/cppjieba/src/Limonp/StdExtension.hpp +139 -0
  61. data/ext/cppjieba/src/Limonp/StringUtil.hpp +349 -0
  62. data/ext/cppjieba/src/Limonp/Thread.hpp +50 -0
  63. data/ext/cppjieba/src/Limonp/ThreadPool.hpp +105 -0
  64. data/ext/cppjieba/src/MPSegment.hpp +148 -0
  65. data/ext/cppjieba/src/MixSegment.hpp +121 -0
  66. data/ext/cppjieba/src/PosTagger.hpp +109 -0
  67. data/ext/cppjieba/src/QuerySegment.hpp +123 -0
  68. data/ext/cppjieba/src/SegmentBase.hpp +78 -0
  69. data/ext/cppjieba/src/TransCode.hpp +63 -0
  70. data/ext/cppjieba/src/Trie.hpp +298 -0
  71. data/ext/cppjieba/test/CMakeLists.txt +7 -0
  72. data/ext/cppjieba/test/keyword_demo.cpp +16 -0
  73. data/ext/cppjieba/test/load_test.cpp +56 -0
  74. data/ext/cppjieba/test/segment_demo.cpp +59 -0
  75. data/ext/cppjieba/test/servertest/go_load_test.sh +2 -0
  76. data/ext/cppjieba/test/servertest/load_test.py +91 -0
  77. data/ext/cppjieba/test/servertest/run_curl.sh +11 -0
  78. data/ext/cppjieba/test/tagging_demo.cpp +12 -0
  79. data/ext/cppjieba/test/testdata/curl.res +1 -0
  80. data/ext/cppjieba/test/testdata/jieba.dict.0.1.utf8 +93 -0
  81. data/ext/cppjieba/test/testdata/jieba.dict.0.utf8 +93 -0
  82. data/ext/cppjieba/test/testdata/jieba.dict.1.utf8 +67 -0
  83. data/ext/cppjieba/test/testdata/jieba.dict.2.utf8 +64 -0
  84. data/ext/cppjieba/test/testdata/load_test.urls +2 -0
  85. data/ext/cppjieba/test/testdata/review.100 +100 -0
  86. data/ext/cppjieba/test/testdata/review.100.res +200 -0
  87. data/ext/cppjieba/test/testdata/server.conf +13 -0
  88. data/ext/cppjieba/test/testdata/testlines.gbk +9 -0
  89. data/ext/cppjieba/test/testdata/testlines.utf8 +8 -0
  90. data/ext/cppjieba/test/testdata/userdict.utf8 +6 -0
  91. data/ext/cppjieba/test/testdata/weicheng.utf8 +247 -0
  92. data/ext/cppjieba/test/unittest/CMakeLists.txt +28 -0
  93. data/ext/cppjieba/test/unittest/TKeywordExtractor.cpp +18 -0
  94. data/ext/cppjieba/test/unittest/TPosTagger.cpp +43 -0
  95. data/ext/cppjieba/test/unittest/TSegments.cpp +187 -0
  96. data/ext/cppjieba/test/unittest/TTrie.cpp +80 -0
  97. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-death-test.h +283 -0
  98. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-message.h +230 -0
  99. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-param-test.h +1421 -0
  100. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-param-test.h.pump +487 -0
  101. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-printers.h +796 -0
  102. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-spi.h +232 -0
  103. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-test-part.h +176 -0
  104. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest-typed-test.h +259 -0
  105. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest.h +2155 -0
  106. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest_pred_impl.h +358 -0
  107. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/gtest_prod.h +58 -0
  108. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-death-test-internal.h +308 -0
  109. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-filepath.h +210 -0
  110. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-internal.h +1226 -0
  111. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  112. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-param-util-generated.h +4822 -0
  113. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  114. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-param-util.h +619 -0
  115. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-port.h +1788 -0
  116. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-string.h +350 -0
  117. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-tuple.h +968 -0
  118. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-tuple.h.pump +336 -0
  119. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-type-util.h +3330 -0
  120. data/ext/cppjieba/test/unittest/gtest-1.6.0/include/gtest/internal/gtest-type-util.h.pump +296 -0
  121. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/.deps/.dirstamp +0 -0
  122. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/.deps/gtest-all.Plo +681 -0
  123. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/.deps/gtest_main.Plo +509 -0
  124. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/.dirstamp +0 -0
  125. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-all.cc +48 -0
  126. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-death-test.cc +1234 -0
  127. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-filepath.cc +380 -0
  128. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-internal-inl.h +1038 -0
  129. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-port.cc +746 -0
  130. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-printers.cc +356 -0
  131. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-test-part.cc +110 -0
  132. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest-typed-test.cc +110 -0
  133. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest.cc +4898 -0
  134. data/ext/cppjieba/test/unittest/gtest-1.6.0/src/gtest_main.cc +39 -0
  135. data/ext/cppjieba/test/unittest/gtest_main.cpp +39 -0
  136. data/ext/jieba/extconf.rb +26 -0
  137. data/ext/jieba/jieba.c +9 -0
  138. data/ext/jieba/jieba.h +9 -0
  139. data/ext/jieba/segment.cc +88 -0
  140. data/ext/jieba/segment.h +17 -0
  141. data/jieba_rb.gemspec +51 -0
  142. data/lib/jieba_rb/version.rb +3 -0
  143. data/lib/jieba_rb.rb +28 -0
  144. data/test/test_segment.rb +32 -0
  145. metadata +246 -0
@@ -0,0 +1,4822 @@
1
+ // This file was GENERATED by command:
2
+ // pump.py gtest-param-util-generated.h.pump
3
+ // DO NOT EDIT BY HAND!!!
4
+
5
+ // Copyright 2008 Google Inc.
6
+ // All Rights Reserved.
7
+ //
8
+ // Redistribution and use in source and binary forms, with or without
9
+ // modification, are permitted provided that the following conditions are
10
+ // met:
11
+ //
12
+ // * Redistributions of source code must retain the above copyright
13
+ // notice, this list of conditions and the following disclaimer.
14
+ // * Redistributions in binary form must reproduce the above
15
+ // copyright notice, this list of conditions and the following disclaimer
16
+ // in the documentation and/or other materials provided with the
17
+ // distribution.
18
+ // * Neither the name of Google Inc. nor the names of its
19
+ // contributors may be used to endorse or promote products derived from
20
+ // this software without specific prior written permission.
21
+ //
22
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
+ //
34
+ // Author: vladl@google.com (Vlad Losev)
35
+
36
+ // Type and function utilities for implementing parameterized tests.
37
+ // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
38
+ //
39
+ // Currently Google Test supports at most 50 arguments in Values,
40
+ // and at most 10 arguments in Combine. Please contact
41
+ // googletestframework@googlegroups.com if you need more.
42
+ // Please note that the number of arguments to Combine is limited
43
+ // by the maximum arity of the implementation of tr1::tuple which is
44
+ // currently set at 10.
45
+
46
+ #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47
+ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48
+
49
+ // scripts/fuse_gtest.py depends on gtest's own header being #included
50
+ // *unconditionally*. Therefore these #includes cannot be moved
51
+ // inside #if GTEST_HAS_PARAM_TEST.
52
+ #include "gtest/internal/gtest-param-util.h"
53
+ #include "gtest/internal/gtest-port.h"
54
+
55
+ #if GTEST_HAS_PARAM_TEST
56
+
57
+ namespace testing {
58
+
59
+ // Forward declarations of ValuesIn(), which is implemented in
60
+ // include/gtest/gtest-param-test.h.
61
+ template <typename ForwardIterator>
62
+ internal::ParamGenerator<
63
+ typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
64
+ ValuesIn(ForwardIterator begin, ForwardIterator end);
65
+
66
+ template <typename T, size_t N>
67
+ internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
68
+
69
+ template <class Container>
70
+ internal::ParamGenerator<typename Container::value_type> ValuesIn(
71
+ const Container& container);
72
+
73
+ namespace internal {
74
+
75
+ // Used in the Values() function to provide polymorphic capabilities.
76
+ template <typename T1>
77
+ class ValueArray1 {
78
+ public:
79
+ explicit ValueArray1(T1 v1) : v1_(v1) {}
80
+
81
+ template <typename T>
82
+ operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
83
+
84
+ private:
85
+ // No implementation - assignment is unsupported.
86
+ void operator=(const ValueArray1& other);
87
+
88
+ const T1 v1_;
89
+ };
90
+
91
+ template <typename T1, typename T2>
92
+ class ValueArray2 {
93
+ public:
94
+ ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
95
+
96
+ template <typename T>
97
+ operator ParamGenerator<T>() const {
98
+ const T array[] = {v1_, v2_};
99
+ return ValuesIn(array);
100
+ }
101
+
102
+ private:
103
+ // No implementation - assignment is unsupported.
104
+ void operator=(const ValueArray2& other);
105
+
106
+ const T1 v1_;
107
+ const T2 v2_;
108
+ };
109
+
110
+ template <typename T1, typename T2, typename T3>
111
+ class ValueArray3 {
112
+ public:
113
+ ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
114
+
115
+ template <typename T>
116
+ operator ParamGenerator<T>() const {
117
+ const T array[] = {v1_, v2_, v3_};
118
+ return ValuesIn(array);
119
+ }
120
+
121
+ private:
122
+ // No implementation - assignment is unsupported.
123
+ void operator=(const ValueArray3& other);
124
+
125
+ const T1 v1_;
126
+ const T2 v2_;
127
+ const T3 v3_;
128
+ };
129
+
130
+ template <typename T1, typename T2, typename T3, typename T4>
131
+ class ValueArray4 {
132
+ public:
133
+ ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
134
+ v4_(v4) {}
135
+
136
+ template <typename T>
137
+ operator ParamGenerator<T>() const {
138
+ const T array[] = {v1_, v2_, v3_, v4_};
139
+ return ValuesIn(array);
140
+ }
141
+
142
+ private:
143
+ // No implementation - assignment is unsupported.
144
+ void operator=(const ValueArray4& other);
145
+
146
+ const T1 v1_;
147
+ const T2 v2_;
148
+ const T3 v3_;
149
+ const T4 v4_;
150
+ };
151
+
152
+ template <typename T1, typename T2, typename T3, typename T4, typename T5>
153
+ class ValueArray5 {
154
+ public:
155
+ ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
156
+ v4_(v4), v5_(v5) {}
157
+
158
+ template <typename T>
159
+ operator ParamGenerator<T>() const {
160
+ const T array[] = {v1_, v2_, v3_, v4_, v5_};
161
+ return ValuesIn(array);
162
+ }
163
+
164
+ private:
165
+ // No implementation - assignment is unsupported.
166
+ void operator=(const ValueArray5& other);
167
+
168
+ const T1 v1_;
169
+ const T2 v2_;
170
+ const T3 v3_;
171
+ const T4 v4_;
172
+ const T5 v5_;
173
+ };
174
+
175
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
176
+ typename T6>
177
+ class ValueArray6 {
178
+ public:
179
+ ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
180
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
181
+
182
+ template <typename T>
183
+ operator ParamGenerator<T>() const {
184
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
185
+ return ValuesIn(array);
186
+ }
187
+
188
+ private:
189
+ // No implementation - assignment is unsupported.
190
+ void operator=(const ValueArray6& other);
191
+
192
+ const T1 v1_;
193
+ const T2 v2_;
194
+ const T3 v3_;
195
+ const T4 v4_;
196
+ const T5 v5_;
197
+ const T6 v6_;
198
+ };
199
+
200
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
201
+ typename T6, typename T7>
202
+ class ValueArray7 {
203
+ public:
204
+ ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
205
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
206
+
207
+ template <typename T>
208
+ operator ParamGenerator<T>() const {
209
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
210
+ return ValuesIn(array);
211
+ }
212
+
213
+ private:
214
+ // No implementation - assignment is unsupported.
215
+ void operator=(const ValueArray7& other);
216
+
217
+ const T1 v1_;
218
+ const T2 v2_;
219
+ const T3 v3_;
220
+ const T4 v4_;
221
+ const T5 v5_;
222
+ const T6 v6_;
223
+ const T7 v7_;
224
+ };
225
+
226
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
227
+ typename T6, typename T7, typename T8>
228
+ class ValueArray8 {
229
+ public:
230
+ ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
231
+ T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
232
+ v8_(v8) {}
233
+
234
+ template <typename T>
235
+ operator ParamGenerator<T>() const {
236
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
237
+ return ValuesIn(array);
238
+ }
239
+
240
+ private:
241
+ // No implementation - assignment is unsupported.
242
+ void operator=(const ValueArray8& other);
243
+
244
+ const T1 v1_;
245
+ const T2 v2_;
246
+ const T3 v3_;
247
+ const T4 v4_;
248
+ const T5 v5_;
249
+ const T6 v6_;
250
+ const T7 v7_;
251
+ const T8 v8_;
252
+ };
253
+
254
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
255
+ typename T6, typename T7, typename T8, typename T9>
256
+ class ValueArray9 {
257
+ public:
258
+ ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
259
+ T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
260
+ v8_(v8), v9_(v9) {}
261
+
262
+ template <typename T>
263
+ operator ParamGenerator<T>() const {
264
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
265
+ return ValuesIn(array);
266
+ }
267
+
268
+ private:
269
+ // No implementation - assignment is unsupported.
270
+ void operator=(const ValueArray9& other);
271
+
272
+ const T1 v1_;
273
+ const T2 v2_;
274
+ const T3 v3_;
275
+ const T4 v4_;
276
+ const T5 v5_;
277
+ const T6 v6_;
278
+ const T7 v7_;
279
+ const T8 v8_;
280
+ const T9 v9_;
281
+ };
282
+
283
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
284
+ typename T6, typename T7, typename T8, typename T9, typename T10>
285
+ class ValueArray10 {
286
+ public:
287
+ ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
288
+ T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
289
+ v8_(v8), v9_(v9), v10_(v10) {}
290
+
291
+ template <typename T>
292
+ operator ParamGenerator<T>() const {
293
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
294
+ return ValuesIn(array);
295
+ }
296
+
297
+ private:
298
+ // No implementation - assignment is unsupported.
299
+ void operator=(const ValueArray10& other);
300
+
301
+ const T1 v1_;
302
+ const T2 v2_;
303
+ const T3 v3_;
304
+ const T4 v4_;
305
+ const T5 v5_;
306
+ const T6 v6_;
307
+ const T7 v7_;
308
+ const T8 v8_;
309
+ const T9 v9_;
310
+ const T10 v10_;
311
+ };
312
+
313
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
314
+ typename T6, typename T7, typename T8, typename T9, typename T10,
315
+ typename T11>
316
+ class ValueArray11 {
317
+ public:
318
+ ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
319
+ T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
320
+ v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
321
+
322
+ template <typename T>
323
+ operator ParamGenerator<T>() const {
324
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
325
+ return ValuesIn(array);
326
+ }
327
+
328
+ private:
329
+ // No implementation - assignment is unsupported.
330
+ void operator=(const ValueArray11& other);
331
+
332
+ const T1 v1_;
333
+ const T2 v2_;
334
+ const T3 v3_;
335
+ const T4 v4_;
336
+ const T5 v5_;
337
+ const T6 v6_;
338
+ const T7 v7_;
339
+ const T8 v8_;
340
+ const T9 v9_;
341
+ const T10 v10_;
342
+ const T11 v11_;
343
+ };
344
+
345
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
346
+ typename T6, typename T7, typename T8, typename T9, typename T10,
347
+ typename T11, typename T12>
348
+ class ValueArray12 {
349
+ public:
350
+ ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
351
+ T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
352
+ v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
353
+
354
+ template <typename T>
355
+ operator ParamGenerator<T>() const {
356
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
357
+ v12_};
358
+ return ValuesIn(array);
359
+ }
360
+
361
+ private:
362
+ // No implementation - assignment is unsupported.
363
+ void operator=(const ValueArray12& other);
364
+
365
+ const T1 v1_;
366
+ const T2 v2_;
367
+ const T3 v3_;
368
+ const T4 v4_;
369
+ const T5 v5_;
370
+ const T6 v6_;
371
+ const T7 v7_;
372
+ const T8 v8_;
373
+ const T9 v9_;
374
+ const T10 v10_;
375
+ const T11 v11_;
376
+ const T12 v12_;
377
+ };
378
+
379
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
380
+ typename T6, typename T7, typename T8, typename T9, typename T10,
381
+ typename T11, typename T12, typename T13>
382
+ class ValueArray13 {
383
+ public:
384
+ ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
385
+ T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
386
+ v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
387
+ v12_(v12), v13_(v13) {}
388
+
389
+ template <typename T>
390
+ operator ParamGenerator<T>() const {
391
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
392
+ v12_, v13_};
393
+ return ValuesIn(array);
394
+ }
395
+
396
+ private:
397
+ // No implementation - assignment is unsupported.
398
+ void operator=(const ValueArray13& other);
399
+
400
+ const T1 v1_;
401
+ const T2 v2_;
402
+ const T3 v3_;
403
+ const T4 v4_;
404
+ const T5 v5_;
405
+ const T6 v6_;
406
+ const T7 v7_;
407
+ const T8 v8_;
408
+ const T9 v9_;
409
+ const T10 v10_;
410
+ const T11 v11_;
411
+ const T12 v12_;
412
+ const T13 v13_;
413
+ };
414
+
415
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
416
+ typename T6, typename T7, typename T8, typename T9, typename T10,
417
+ typename T11, typename T12, typename T13, typename T14>
418
+ class ValueArray14 {
419
+ public:
420
+ ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
421
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
422
+ v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
423
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
424
+
425
+ template <typename T>
426
+ operator ParamGenerator<T>() const {
427
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
428
+ v12_, v13_, v14_};
429
+ return ValuesIn(array);
430
+ }
431
+
432
+ private:
433
+ // No implementation - assignment is unsupported.
434
+ void operator=(const ValueArray14& other);
435
+
436
+ const T1 v1_;
437
+ const T2 v2_;
438
+ const T3 v3_;
439
+ const T4 v4_;
440
+ const T5 v5_;
441
+ const T6 v6_;
442
+ const T7 v7_;
443
+ const T8 v8_;
444
+ const T9 v9_;
445
+ const T10 v10_;
446
+ const T11 v11_;
447
+ const T12 v12_;
448
+ const T13 v13_;
449
+ const T14 v14_;
450
+ };
451
+
452
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
453
+ typename T6, typename T7, typename T8, typename T9, typename T10,
454
+ typename T11, typename T12, typename T13, typename T14, typename T15>
455
+ class ValueArray15 {
456
+ public:
457
+ ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
458
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
459
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
460
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
461
+
462
+ template <typename T>
463
+ operator ParamGenerator<T>() const {
464
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
465
+ v12_, v13_, v14_, v15_};
466
+ return ValuesIn(array);
467
+ }
468
+
469
+ private:
470
+ // No implementation - assignment is unsupported.
471
+ void operator=(const ValueArray15& other);
472
+
473
+ const T1 v1_;
474
+ const T2 v2_;
475
+ const T3 v3_;
476
+ const T4 v4_;
477
+ const T5 v5_;
478
+ const T6 v6_;
479
+ const T7 v7_;
480
+ const T8 v8_;
481
+ const T9 v9_;
482
+ const T10 v10_;
483
+ const T11 v11_;
484
+ const T12 v12_;
485
+ const T13 v13_;
486
+ const T14 v14_;
487
+ const T15 v15_;
488
+ };
489
+
490
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
491
+ typename T6, typename T7, typename T8, typename T9, typename T10,
492
+ typename T11, typename T12, typename T13, typename T14, typename T15,
493
+ typename T16>
494
+ class ValueArray16 {
495
+ public:
496
+ ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
497
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
498
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
499
+ v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
500
+ v16_(v16) {}
501
+
502
+ template <typename T>
503
+ operator ParamGenerator<T>() const {
504
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
505
+ v12_, v13_, v14_, v15_, v16_};
506
+ return ValuesIn(array);
507
+ }
508
+
509
+ private:
510
+ // No implementation - assignment is unsupported.
511
+ void operator=(const ValueArray16& other);
512
+
513
+ const T1 v1_;
514
+ const T2 v2_;
515
+ const T3 v3_;
516
+ const T4 v4_;
517
+ const T5 v5_;
518
+ const T6 v6_;
519
+ const T7 v7_;
520
+ const T8 v8_;
521
+ const T9 v9_;
522
+ const T10 v10_;
523
+ const T11 v11_;
524
+ const T12 v12_;
525
+ const T13 v13_;
526
+ const T14 v14_;
527
+ const T15 v15_;
528
+ const T16 v16_;
529
+ };
530
+
531
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
532
+ typename T6, typename T7, typename T8, typename T9, typename T10,
533
+ typename T11, typename T12, typename T13, typename T14, typename T15,
534
+ typename T16, typename T17>
535
+ class ValueArray17 {
536
+ public:
537
+ ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
538
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
539
+ T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
540
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
541
+ v15_(v15), v16_(v16), v17_(v17) {}
542
+
543
+ template <typename T>
544
+ operator ParamGenerator<T>() const {
545
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
546
+ v12_, v13_, v14_, v15_, v16_, v17_};
547
+ return ValuesIn(array);
548
+ }
549
+
550
+ private:
551
+ // No implementation - assignment is unsupported.
552
+ void operator=(const ValueArray17& other);
553
+
554
+ const T1 v1_;
555
+ const T2 v2_;
556
+ const T3 v3_;
557
+ const T4 v4_;
558
+ const T5 v5_;
559
+ const T6 v6_;
560
+ const T7 v7_;
561
+ const T8 v8_;
562
+ const T9 v9_;
563
+ const T10 v10_;
564
+ const T11 v11_;
565
+ const T12 v12_;
566
+ const T13 v13_;
567
+ const T14 v14_;
568
+ const T15 v15_;
569
+ const T16 v16_;
570
+ const T17 v17_;
571
+ };
572
+
573
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
574
+ typename T6, typename T7, typename T8, typename T9, typename T10,
575
+ typename T11, typename T12, typename T13, typename T14, typename T15,
576
+ typename T16, typename T17, typename T18>
577
+ class ValueArray18 {
578
+ public:
579
+ ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
580
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
581
+ T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
582
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
583
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
584
+
585
+ template <typename T>
586
+ operator ParamGenerator<T>() const {
587
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
588
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_};
589
+ return ValuesIn(array);
590
+ }
591
+
592
+ private:
593
+ // No implementation - assignment is unsupported.
594
+ void operator=(const ValueArray18& other);
595
+
596
+ const T1 v1_;
597
+ const T2 v2_;
598
+ const T3 v3_;
599
+ const T4 v4_;
600
+ const T5 v5_;
601
+ const T6 v6_;
602
+ const T7 v7_;
603
+ const T8 v8_;
604
+ const T9 v9_;
605
+ const T10 v10_;
606
+ const T11 v11_;
607
+ const T12 v12_;
608
+ const T13 v13_;
609
+ const T14 v14_;
610
+ const T15 v15_;
611
+ const T16 v16_;
612
+ const T17 v17_;
613
+ const T18 v18_;
614
+ };
615
+
616
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
617
+ typename T6, typename T7, typename T8, typename T9, typename T10,
618
+ typename T11, typename T12, typename T13, typename T14, typename T15,
619
+ typename T16, typename T17, typename T18, typename T19>
620
+ class ValueArray19 {
621
+ public:
622
+ ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
623
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
624
+ T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
625
+ v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
626
+ v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
627
+
628
+ template <typename T>
629
+ operator ParamGenerator<T>() const {
630
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
631
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
632
+ return ValuesIn(array);
633
+ }
634
+
635
+ private:
636
+ // No implementation - assignment is unsupported.
637
+ void operator=(const ValueArray19& other);
638
+
639
+ const T1 v1_;
640
+ const T2 v2_;
641
+ const T3 v3_;
642
+ const T4 v4_;
643
+ const T5 v5_;
644
+ const T6 v6_;
645
+ const T7 v7_;
646
+ const T8 v8_;
647
+ const T9 v9_;
648
+ const T10 v10_;
649
+ const T11 v11_;
650
+ const T12 v12_;
651
+ const T13 v13_;
652
+ const T14 v14_;
653
+ const T15 v15_;
654
+ const T16 v16_;
655
+ const T17 v17_;
656
+ const T18 v18_;
657
+ const T19 v19_;
658
+ };
659
+
660
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
661
+ typename T6, typename T7, typename T8, typename T9, typename T10,
662
+ typename T11, typename T12, typename T13, typename T14, typename T15,
663
+ typename T16, typename T17, typename T18, typename T19, typename T20>
664
+ class ValueArray20 {
665
+ public:
666
+ ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
667
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
668
+ T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
669
+ v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
670
+ v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
671
+ v19_(v19), v20_(v20) {}
672
+
673
+ template <typename T>
674
+ operator ParamGenerator<T>() const {
675
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
676
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
677
+ return ValuesIn(array);
678
+ }
679
+
680
+ private:
681
+ // No implementation - assignment is unsupported.
682
+ void operator=(const ValueArray20& other);
683
+
684
+ const T1 v1_;
685
+ const T2 v2_;
686
+ const T3 v3_;
687
+ const T4 v4_;
688
+ const T5 v5_;
689
+ const T6 v6_;
690
+ const T7 v7_;
691
+ const T8 v8_;
692
+ const T9 v9_;
693
+ const T10 v10_;
694
+ const T11 v11_;
695
+ const T12 v12_;
696
+ const T13 v13_;
697
+ const T14 v14_;
698
+ const T15 v15_;
699
+ const T16 v16_;
700
+ const T17 v17_;
701
+ const T18 v18_;
702
+ const T19 v19_;
703
+ const T20 v20_;
704
+ };
705
+
706
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
707
+ typename T6, typename T7, typename T8, typename T9, typename T10,
708
+ typename T11, typename T12, typename T13, typename T14, typename T15,
709
+ typename T16, typename T17, typename T18, typename T19, typename T20,
710
+ typename T21>
711
+ class ValueArray21 {
712
+ public:
713
+ ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
714
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
715
+ T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
716
+ v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
717
+ v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
718
+ v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
719
+
720
+ template <typename T>
721
+ operator ParamGenerator<T>() const {
722
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
723
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
724
+ return ValuesIn(array);
725
+ }
726
+
727
+ private:
728
+ // No implementation - assignment is unsupported.
729
+ void operator=(const ValueArray21& other);
730
+
731
+ const T1 v1_;
732
+ const T2 v2_;
733
+ const T3 v3_;
734
+ const T4 v4_;
735
+ const T5 v5_;
736
+ const T6 v6_;
737
+ const T7 v7_;
738
+ const T8 v8_;
739
+ const T9 v9_;
740
+ const T10 v10_;
741
+ const T11 v11_;
742
+ const T12 v12_;
743
+ const T13 v13_;
744
+ const T14 v14_;
745
+ const T15 v15_;
746
+ const T16 v16_;
747
+ const T17 v17_;
748
+ const T18 v18_;
749
+ const T19 v19_;
750
+ const T20 v20_;
751
+ const T21 v21_;
752
+ };
753
+
754
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
755
+ typename T6, typename T7, typename T8, typename T9, typename T10,
756
+ typename T11, typename T12, typename T13, typename T14, typename T15,
757
+ typename T16, typename T17, typename T18, typename T19, typename T20,
758
+ typename T21, typename T22>
759
+ class ValueArray22 {
760
+ public:
761
+ ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
762
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
763
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
764
+ v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
765
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
766
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
767
+
768
+ template <typename T>
769
+ operator ParamGenerator<T>() const {
770
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
771
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
772
+ return ValuesIn(array);
773
+ }
774
+
775
+ private:
776
+ // No implementation - assignment is unsupported.
777
+ void operator=(const ValueArray22& other);
778
+
779
+ const T1 v1_;
780
+ const T2 v2_;
781
+ const T3 v3_;
782
+ const T4 v4_;
783
+ const T5 v5_;
784
+ const T6 v6_;
785
+ const T7 v7_;
786
+ const T8 v8_;
787
+ const T9 v9_;
788
+ const T10 v10_;
789
+ const T11 v11_;
790
+ const T12 v12_;
791
+ const T13 v13_;
792
+ const T14 v14_;
793
+ const T15 v15_;
794
+ const T16 v16_;
795
+ const T17 v17_;
796
+ const T18 v18_;
797
+ const T19 v19_;
798
+ const T20 v20_;
799
+ const T21 v21_;
800
+ const T22 v22_;
801
+ };
802
+
803
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
804
+ typename T6, typename T7, typename T8, typename T9, typename T10,
805
+ typename T11, typename T12, typename T13, typename T14, typename T15,
806
+ typename T16, typename T17, typename T18, typename T19, typename T20,
807
+ typename T21, typename T22, typename T23>
808
+ class ValueArray23 {
809
+ public:
810
+ ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
811
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
812
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
813
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
814
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
815
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
816
+ v23_(v23) {}
817
+
818
+ template <typename T>
819
+ operator ParamGenerator<T>() const {
820
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
821
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
822
+ v23_};
823
+ return ValuesIn(array);
824
+ }
825
+
826
+ private:
827
+ // No implementation - assignment is unsupported.
828
+ void operator=(const ValueArray23& other);
829
+
830
+ const T1 v1_;
831
+ const T2 v2_;
832
+ const T3 v3_;
833
+ const T4 v4_;
834
+ const T5 v5_;
835
+ const T6 v6_;
836
+ const T7 v7_;
837
+ const T8 v8_;
838
+ const T9 v9_;
839
+ const T10 v10_;
840
+ const T11 v11_;
841
+ const T12 v12_;
842
+ const T13 v13_;
843
+ const T14 v14_;
844
+ const T15 v15_;
845
+ const T16 v16_;
846
+ const T17 v17_;
847
+ const T18 v18_;
848
+ const T19 v19_;
849
+ const T20 v20_;
850
+ const T21 v21_;
851
+ const T22 v22_;
852
+ const T23 v23_;
853
+ };
854
+
855
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
856
+ typename T6, typename T7, typename T8, typename T9, typename T10,
857
+ typename T11, typename T12, typename T13, typename T14, typename T15,
858
+ typename T16, typename T17, typename T18, typename T19, typename T20,
859
+ typename T21, typename T22, typename T23, typename T24>
860
+ class ValueArray24 {
861
+ public:
862
+ ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
863
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
864
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
865
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
866
+ v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
867
+ v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
868
+ v22_(v22), v23_(v23), v24_(v24) {}
869
+
870
+ template <typename T>
871
+ operator ParamGenerator<T>() const {
872
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
873
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
874
+ v24_};
875
+ return ValuesIn(array);
876
+ }
877
+
878
+ private:
879
+ // No implementation - assignment is unsupported.
880
+ void operator=(const ValueArray24& other);
881
+
882
+ const T1 v1_;
883
+ const T2 v2_;
884
+ const T3 v3_;
885
+ const T4 v4_;
886
+ const T5 v5_;
887
+ const T6 v6_;
888
+ const T7 v7_;
889
+ const T8 v8_;
890
+ const T9 v9_;
891
+ const T10 v10_;
892
+ const T11 v11_;
893
+ const T12 v12_;
894
+ const T13 v13_;
895
+ const T14 v14_;
896
+ const T15 v15_;
897
+ const T16 v16_;
898
+ const T17 v17_;
899
+ const T18 v18_;
900
+ const T19 v19_;
901
+ const T20 v20_;
902
+ const T21 v21_;
903
+ const T22 v22_;
904
+ const T23 v23_;
905
+ const T24 v24_;
906
+ };
907
+
908
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
909
+ typename T6, typename T7, typename T8, typename T9, typename T10,
910
+ typename T11, typename T12, typename T13, typename T14, typename T15,
911
+ typename T16, typename T17, typename T18, typename T19, typename T20,
912
+ typename T21, typename T22, typename T23, typename T24, typename T25>
913
+ class ValueArray25 {
914
+ public:
915
+ ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
916
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
917
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
918
+ T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
919
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
920
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
921
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
922
+
923
+ template <typename T>
924
+ operator ParamGenerator<T>() const {
925
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
926
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
927
+ v24_, v25_};
928
+ return ValuesIn(array);
929
+ }
930
+
931
+ private:
932
+ // No implementation - assignment is unsupported.
933
+ void operator=(const ValueArray25& other);
934
+
935
+ const T1 v1_;
936
+ const T2 v2_;
937
+ const T3 v3_;
938
+ const T4 v4_;
939
+ const T5 v5_;
940
+ const T6 v6_;
941
+ const T7 v7_;
942
+ const T8 v8_;
943
+ const T9 v9_;
944
+ const T10 v10_;
945
+ const T11 v11_;
946
+ const T12 v12_;
947
+ const T13 v13_;
948
+ const T14 v14_;
949
+ const T15 v15_;
950
+ const T16 v16_;
951
+ const T17 v17_;
952
+ const T18 v18_;
953
+ const T19 v19_;
954
+ const T20 v20_;
955
+ const T21 v21_;
956
+ const T22 v22_;
957
+ const T23 v23_;
958
+ const T24 v24_;
959
+ const T25 v25_;
960
+ };
961
+
962
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
963
+ typename T6, typename T7, typename T8, typename T9, typename T10,
964
+ typename T11, typename T12, typename T13, typename T14, typename T15,
965
+ typename T16, typename T17, typename T18, typename T19, typename T20,
966
+ typename T21, typename T22, typename T23, typename T24, typename T25,
967
+ typename T26>
968
+ class ValueArray26 {
969
+ public:
970
+ ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
971
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
972
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
973
+ T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
974
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
975
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
976
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
977
+
978
+ template <typename T>
979
+ operator ParamGenerator<T>() const {
980
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
981
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
982
+ v24_, v25_, v26_};
983
+ return ValuesIn(array);
984
+ }
985
+
986
+ private:
987
+ // No implementation - assignment is unsupported.
988
+ void operator=(const ValueArray26& other);
989
+
990
+ const T1 v1_;
991
+ const T2 v2_;
992
+ const T3 v3_;
993
+ const T4 v4_;
994
+ const T5 v5_;
995
+ const T6 v6_;
996
+ const T7 v7_;
997
+ const T8 v8_;
998
+ const T9 v9_;
999
+ const T10 v10_;
1000
+ const T11 v11_;
1001
+ const T12 v12_;
1002
+ const T13 v13_;
1003
+ const T14 v14_;
1004
+ const T15 v15_;
1005
+ const T16 v16_;
1006
+ const T17 v17_;
1007
+ const T18 v18_;
1008
+ const T19 v19_;
1009
+ const T20 v20_;
1010
+ const T21 v21_;
1011
+ const T22 v22_;
1012
+ const T23 v23_;
1013
+ const T24 v24_;
1014
+ const T25 v25_;
1015
+ const T26 v26_;
1016
+ };
1017
+
1018
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1019
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1020
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1021
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1022
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1023
+ typename T26, typename T27>
1024
+ class ValueArray27 {
1025
+ public:
1026
+ ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1027
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1028
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1029
+ T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1030
+ v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1031
+ v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1032
+ v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1033
+ v26_(v26), v27_(v27) {}
1034
+
1035
+ template <typename T>
1036
+ operator ParamGenerator<T>() const {
1037
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1038
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1039
+ v24_, v25_, v26_, v27_};
1040
+ return ValuesIn(array);
1041
+ }
1042
+
1043
+ private:
1044
+ // No implementation - assignment is unsupported.
1045
+ void operator=(const ValueArray27& other);
1046
+
1047
+ const T1 v1_;
1048
+ const T2 v2_;
1049
+ const T3 v3_;
1050
+ const T4 v4_;
1051
+ const T5 v5_;
1052
+ const T6 v6_;
1053
+ const T7 v7_;
1054
+ const T8 v8_;
1055
+ const T9 v9_;
1056
+ const T10 v10_;
1057
+ const T11 v11_;
1058
+ const T12 v12_;
1059
+ const T13 v13_;
1060
+ const T14 v14_;
1061
+ const T15 v15_;
1062
+ const T16 v16_;
1063
+ const T17 v17_;
1064
+ const T18 v18_;
1065
+ const T19 v19_;
1066
+ const T20 v20_;
1067
+ const T21 v21_;
1068
+ const T22 v22_;
1069
+ const T23 v23_;
1070
+ const T24 v24_;
1071
+ const T25 v25_;
1072
+ const T26 v26_;
1073
+ const T27 v27_;
1074
+ };
1075
+
1076
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1077
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1078
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1079
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1080
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1081
+ typename T26, typename T27, typename T28>
1082
+ class ValueArray28 {
1083
+ public:
1084
+ ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1085
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1086
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1087
+ T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1088
+ v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1089
+ v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1090
+ v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1091
+ v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1092
+
1093
+ template <typename T>
1094
+ operator ParamGenerator<T>() const {
1095
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1096
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1097
+ v24_, v25_, v26_, v27_, v28_};
1098
+ return ValuesIn(array);
1099
+ }
1100
+
1101
+ private:
1102
+ // No implementation - assignment is unsupported.
1103
+ void operator=(const ValueArray28& other);
1104
+
1105
+ const T1 v1_;
1106
+ const T2 v2_;
1107
+ const T3 v3_;
1108
+ const T4 v4_;
1109
+ const T5 v5_;
1110
+ const T6 v6_;
1111
+ const T7 v7_;
1112
+ const T8 v8_;
1113
+ const T9 v9_;
1114
+ const T10 v10_;
1115
+ const T11 v11_;
1116
+ const T12 v12_;
1117
+ const T13 v13_;
1118
+ const T14 v14_;
1119
+ const T15 v15_;
1120
+ const T16 v16_;
1121
+ const T17 v17_;
1122
+ const T18 v18_;
1123
+ const T19 v19_;
1124
+ const T20 v20_;
1125
+ const T21 v21_;
1126
+ const T22 v22_;
1127
+ const T23 v23_;
1128
+ const T24 v24_;
1129
+ const T25 v25_;
1130
+ const T26 v26_;
1131
+ const T27 v27_;
1132
+ const T28 v28_;
1133
+ };
1134
+
1135
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1136
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1137
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1138
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1139
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1140
+ typename T26, typename T27, typename T28, typename T29>
1141
+ class ValueArray29 {
1142
+ public:
1143
+ ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1144
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1145
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1146
+ T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1147
+ v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1148
+ v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1149
+ v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1150
+ v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1151
+
1152
+ template <typename T>
1153
+ operator ParamGenerator<T>() const {
1154
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1155
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1156
+ v24_, v25_, v26_, v27_, v28_, v29_};
1157
+ return ValuesIn(array);
1158
+ }
1159
+
1160
+ private:
1161
+ // No implementation - assignment is unsupported.
1162
+ void operator=(const ValueArray29& other);
1163
+
1164
+ const T1 v1_;
1165
+ const T2 v2_;
1166
+ const T3 v3_;
1167
+ const T4 v4_;
1168
+ const T5 v5_;
1169
+ const T6 v6_;
1170
+ const T7 v7_;
1171
+ const T8 v8_;
1172
+ const T9 v9_;
1173
+ const T10 v10_;
1174
+ const T11 v11_;
1175
+ const T12 v12_;
1176
+ const T13 v13_;
1177
+ const T14 v14_;
1178
+ const T15 v15_;
1179
+ const T16 v16_;
1180
+ const T17 v17_;
1181
+ const T18 v18_;
1182
+ const T19 v19_;
1183
+ const T20 v20_;
1184
+ const T21 v21_;
1185
+ const T22 v22_;
1186
+ const T23 v23_;
1187
+ const T24 v24_;
1188
+ const T25 v25_;
1189
+ const T26 v26_;
1190
+ const T27 v27_;
1191
+ const T28 v28_;
1192
+ const T29 v29_;
1193
+ };
1194
+
1195
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1196
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1197
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1198
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1199
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1200
+ typename T26, typename T27, typename T28, typename T29, typename T30>
1201
+ class ValueArray30 {
1202
+ public:
1203
+ ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1204
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1205
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1206
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1207
+ v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1208
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1209
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1210
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1211
+ v29_(v29), v30_(v30) {}
1212
+
1213
+ template <typename T>
1214
+ operator ParamGenerator<T>() const {
1215
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1216
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1217
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_};
1218
+ return ValuesIn(array);
1219
+ }
1220
+
1221
+ private:
1222
+ // No implementation - assignment is unsupported.
1223
+ void operator=(const ValueArray30& other);
1224
+
1225
+ const T1 v1_;
1226
+ const T2 v2_;
1227
+ const T3 v3_;
1228
+ const T4 v4_;
1229
+ const T5 v5_;
1230
+ const T6 v6_;
1231
+ const T7 v7_;
1232
+ const T8 v8_;
1233
+ const T9 v9_;
1234
+ const T10 v10_;
1235
+ const T11 v11_;
1236
+ const T12 v12_;
1237
+ const T13 v13_;
1238
+ const T14 v14_;
1239
+ const T15 v15_;
1240
+ const T16 v16_;
1241
+ const T17 v17_;
1242
+ const T18 v18_;
1243
+ const T19 v19_;
1244
+ const T20 v20_;
1245
+ const T21 v21_;
1246
+ const T22 v22_;
1247
+ const T23 v23_;
1248
+ const T24 v24_;
1249
+ const T25 v25_;
1250
+ const T26 v26_;
1251
+ const T27 v27_;
1252
+ const T28 v28_;
1253
+ const T29 v29_;
1254
+ const T30 v30_;
1255
+ };
1256
+
1257
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1258
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1259
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1260
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1261
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1262
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1263
+ typename T31>
1264
+ class ValueArray31 {
1265
+ public:
1266
+ ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1267
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1268
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1269
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1270
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1271
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1272
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1273
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1274
+ v29_(v29), v30_(v30), v31_(v31) {}
1275
+
1276
+ template <typename T>
1277
+ operator ParamGenerator<T>() const {
1278
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1279
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1280
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
1281
+ return ValuesIn(array);
1282
+ }
1283
+
1284
+ private:
1285
+ // No implementation - assignment is unsupported.
1286
+ void operator=(const ValueArray31& other);
1287
+
1288
+ const T1 v1_;
1289
+ const T2 v2_;
1290
+ const T3 v3_;
1291
+ const T4 v4_;
1292
+ const T5 v5_;
1293
+ const T6 v6_;
1294
+ const T7 v7_;
1295
+ const T8 v8_;
1296
+ const T9 v9_;
1297
+ const T10 v10_;
1298
+ const T11 v11_;
1299
+ const T12 v12_;
1300
+ const T13 v13_;
1301
+ const T14 v14_;
1302
+ const T15 v15_;
1303
+ const T16 v16_;
1304
+ const T17 v17_;
1305
+ const T18 v18_;
1306
+ const T19 v19_;
1307
+ const T20 v20_;
1308
+ const T21 v21_;
1309
+ const T22 v22_;
1310
+ const T23 v23_;
1311
+ const T24 v24_;
1312
+ const T25 v25_;
1313
+ const T26 v26_;
1314
+ const T27 v27_;
1315
+ const T28 v28_;
1316
+ const T29 v29_;
1317
+ const T30 v30_;
1318
+ const T31 v31_;
1319
+ };
1320
+
1321
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1322
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1323
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1324
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1325
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1326
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1327
+ typename T31, typename T32>
1328
+ class ValueArray32 {
1329
+ public:
1330
+ ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1331
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1332
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1333
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1334
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1335
+ v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1336
+ v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1337
+ v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1338
+ v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1339
+
1340
+ template <typename T>
1341
+ operator ParamGenerator<T>() const {
1342
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1343
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1344
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
1345
+ return ValuesIn(array);
1346
+ }
1347
+
1348
+ private:
1349
+ // No implementation - assignment is unsupported.
1350
+ void operator=(const ValueArray32& other);
1351
+
1352
+ const T1 v1_;
1353
+ const T2 v2_;
1354
+ const T3 v3_;
1355
+ const T4 v4_;
1356
+ const T5 v5_;
1357
+ const T6 v6_;
1358
+ const T7 v7_;
1359
+ const T8 v8_;
1360
+ const T9 v9_;
1361
+ const T10 v10_;
1362
+ const T11 v11_;
1363
+ const T12 v12_;
1364
+ const T13 v13_;
1365
+ const T14 v14_;
1366
+ const T15 v15_;
1367
+ const T16 v16_;
1368
+ const T17 v17_;
1369
+ const T18 v18_;
1370
+ const T19 v19_;
1371
+ const T20 v20_;
1372
+ const T21 v21_;
1373
+ const T22 v22_;
1374
+ const T23 v23_;
1375
+ const T24 v24_;
1376
+ const T25 v25_;
1377
+ const T26 v26_;
1378
+ const T27 v27_;
1379
+ const T28 v28_;
1380
+ const T29 v29_;
1381
+ const T30 v30_;
1382
+ const T31 v31_;
1383
+ const T32 v32_;
1384
+ };
1385
+
1386
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1387
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1388
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1389
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1390
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1391
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1392
+ typename T31, typename T32, typename T33>
1393
+ class ValueArray33 {
1394
+ public:
1395
+ ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1396
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1397
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1398
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1399
+ T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1400
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1401
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1402
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1403
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1404
+ v33_(v33) {}
1405
+
1406
+ template <typename T>
1407
+ operator ParamGenerator<T>() const {
1408
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1409
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1410
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
1411
+ return ValuesIn(array);
1412
+ }
1413
+
1414
+ private:
1415
+ // No implementation - assignment is unsupported.
1416
+ void operator=(const ValueArray33& other);
1417
+
1418
+ const T1 v1_;
1419
+ const T2 v2_;
1420
+ const T3 v3_;
1421
+ const T4 v4_;
1422
+ const T5 v5_;
1423
+ const T6 v6_;
1424
+ const T7 v7_;
1425
+ const T8 v8_;
1426
+ const T9 v9_;
1427
+ const T10 v10_;
1428
+ const T11 v11_;
1429
+ const T12 v12_;
1430
+ const T13 v13_;
1431
+ const T14 v14_;
1432
+ const T15 v15_;
1433
+ const T16 v16_;
1434
+ const T17 v17_;
1435
+ const T18 v18_;
1436
+ const T19 v19_;
1437
+ const T20 v20_;
1438
+ const T21 v21_;
1439
+ const T22 v22_;
1440
+ const T23 v23_;
1441
+ const T24 v24_;
1442
+ const T25 v25_;
1443
+ const T26 v26_;
1444
+ const T27 v27_;
1445
+ const T28 v28_;
1446
+ const T29 v29_;
1447
+ const T30 v30_;
1448
+ const T31 v31_;
1449
+ const T32 v32_;
1450
+ const T33 v33_;
1451
+ };
1452
+
1453
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1454
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1455
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1456
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1457
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1458
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1459
+ typename T31, typename T32, typename T33, typename T34>
1460
+ class ValueArray34 {
1461
+ public:
1462
+ ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1463
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1464
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1465
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1466
+ T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1467
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1468
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1469
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1470
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1471
+ v33_(v33), v34_(v34) {}
1472
+
1473
+ template <typename T>
1474
+ operator ParamGenerator<T>() const {
1475
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1476
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1477
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
1478
+ return ValuesIn(array);
1479
+ }
1480
+
1481
+ private:
1482
+ // No implementation - assignment is unsupported.
1483
+ void operator=(const ValueArray34& other);
1484
+
1485
+ const T1 v1_;
1486
+ const T2 v2_;
1487
+ const T3 v3_;
1488
+ const T4 v4_;
1489
+ const T5 v5_;
1490
+ const T6 v6_;
1491
+ const T7 v7_;
1492
+ const T8 v8_;
1493
+ const T9 v9_;
1494
+ const T10 v10_;
1495
+ const T11 v11_;
1496
+ const T12 v12_;
1497
+ const T13 v13_;
1498
+ const T14 v14_;
1499
+ const T15 v15_;
1500
+ const T16 v16_;
1501
+ const T17 v17_;
1502
+ const T18 v18_;
1503
+ const T19 v19_;
1504
+ const T20 v20_;
1505
+ const T21 v21_;
1506
+ const T22 v22_;
1507
+ const T23 v23_;
1508
+ const T24 v24_;
1509
+ const T25 v25_;
1510
+ const T26 v26_;
1511
+ const T27 v27_;
1512
+ const T28 v28_;
1513
+ const T29 v29_;
1514
+ const T30 v30_;
1515
+ const T31 v31_;
1516
+ const T32 v32_;
1517
+ const T33 v33_;
1518
+ const T34 v34_;
1519
+ };
1520
+
1521
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1522
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1523
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1524
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1525
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1526
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1527
+ typename T31, typename T32, typename T33, typename T34, typename T35>
1528
+ class ValueArray35 {
1529
+ public:
1530
+ ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1531
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1532
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1533
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1534
+ T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1535
+ v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1536
+ v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1537
+ v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1538
+ v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1539
+ v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1540
+
1541
+ template <typename T>
1542
+ operator ParamGenerator<T>() const {
1543
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1544
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1545
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
1546
+ v35_};
1547
+ return ValuesIn(array);
1548
+ }
1549
+
1550
+ private:
1551
+ // No implementation - assignment is unsupported.
1552
+ void operator=(const ValueArray35& other);
1553
+
1554
+ const T1 v1_;
1555
+ const T2 v2_;
1556
+ const T3 v3_;
1557
+ const T4 v4_;
1558
+ const T5 v5_;
1559
+ const T6 v6_;
1560
+ const T7 v7_;
1561
+ const T8 v8_;
1562
+ const T9 v9_;
1563
+ const T10 v10_;
1564
+ const T11 v11_;
1565
+ const T12 v12_;
1566
+ const T13 v13_;
1567
+ const T14 v14_;
1568
+ const T15 v15_;
1569
+ const T16 v16_;
1570
+ const T17 v17_;
1571
+ const T18 v18_;
1572
+ const T19 v19_;
1573
+ const T20 v20_;
1574
+ const T21 v21_;
1575
+ const T22 v22_;
1576
+ const T23 v23_;
1577
+ const T24 v24_;
1578
+ const T25 v25_;
1579
+ const T26 v26_;
1580
+ const T27 v27_;
1581
+ const T28 v28_;
1582
+ const T29 v29_;
1583
+ const T30 v30_;
1584
+ const T31 v31_;
1585
+ const T32 v32_;
1586
+ const T33 v33_;
1587
+ const T34 v34_;
1588
+ const T35 v35_;
1589
+ };
1590
+
1591
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1592
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1593
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1594
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1595
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1596
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1597
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1598
+ typename T36>
1599
+ class ValueArray36 {
1600
+ public:
1601
+ ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1602
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1603
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1604
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1605
+ T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1606
+ v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1607
+ v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1608
+ v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1609
+ v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1610
+ v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1611
+
1612
+ template <typename T>
1613
+ operator ParamGenerator<T>() const {
1614
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1615
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1616
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1617
+ v36_};
1618
+ return ValuesIn(array);
1619
+ }
1620
+
1621
+ private:
1622
+ // No implementation - assignment is unsupported.
1623
+ void operator=(const ValueArray36& other);
1624
+
1625
+ const T1 v1_;
1626
+ const T2 v2_;
1627
+ const T3 v3_;
1628
+ const T4 v4_;
1629
+ const T5 v5_;
1630
+ const T6 v6_;
1631
+ const T7 v7_;
1632
+ const T8 v8_;
1633
+ const T9 v9_;
1634
+ const T10 v10_;
1635
+ const T11 v11_;
1636
+ const T12 v12_;
1637
+ const T13 v13_;
1638
+ const T14 v14_;
1639
+ const T15 v15_;
1640
+ const T16 v16_;
1641
+ const T17 v17_;
1642
+ const T18 v18_;
1643
+ const T19 v19_;
1644
+ const T20 v20_;
1645
+ const T21 v21_;
1646
+ const T22 v22_;
1647
+ const T23 v23_;
1648
+ const T24 v24_;
1649
+ const T25 v25_;
1650
+ const T26 v26_;
1651
+ const T27 v27_;
1652
+ const T28 v28_;
1653
+ const T29 v29_;
1654
+ const T30 v30_;
1655
+ const T31 v31_;
1656
+ const T32 v32_;
1657
+ const T33 v33_;
1658
+ const T34 v34_;
1659
+ const T35 v35_;
1660
+ const T36 v36_;
1661
+ };
1662
+
1663
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1664
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1665
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1666
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1667
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1668
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1669
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1670
+ typename T36, typename T37>
1671
+ class ValueArray37 {
1672
+ public:
1673
+ ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1674
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1675
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1676
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1677
+ T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1678
+ v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1679
+ v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1680
+ v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1681
+ v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1682
+ v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1683
+ v36_(v36), v37_(v37) {}
1684
+
1685
+ template <typename T>
1686
+ operator ParamGenerator<T>() const {
1687
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1688
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1689
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1690
+ v36_, v37_};
1691
+ return ValuesIn(array);
1692
+ }
1693
+
1694
+ private:
1695
+ // No implementation - assignment is unsupported.
1696
+ void operator=(const ValueArray37& other);
1697
+
1698
+ const T1 v1_;
1699
+ const T2 v2_;
1700
+ const T3 v3_;
1701
+ const T4 v4_;
1702
+ const T5 v5_;
1703
+ const T6 v6_;
1704
+ const T7 v7_;
1705
+ const T8 v8_;
1706
+ const T9 v9_;
1707
+ const T10 v10_;
1708
+ const T11 v11_;
1709
+ const T12 v12_;
1710
+ const T13 v13_;
1711
+ const T14 v14_;
1712
+ const T15 v15_;
1713
+ const T16 v16_;
1714
+ const T17 v17_;
1715
+ const T18 v18_;
1716
+ const T19 v19_;
1717
+ const T20 v20_;
1718
+ const T21 v21_;
1719
+ const T22 v22_;
1720
+ const T23 v23_;
1721
+ const T24 v24_;
1722
+ const T25 v25_;
1723
+ const T26 v26_;
1724
+ const T27 v27_;
1725
+ const T28 v28_;
1726
+ const T29 v29_;
1727
+ const T30 v30_;
1728
+ const T31 v31_;
1729
+ const T32 v32_;
1730
+ const T33 v33_;
1731
+ const T34 v34_;
1732
+ const T35 v35_;
1733
+ const T36 v36_;
1734
+ const T37 v37_;
1735
+ };
1736
+
1737
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1738
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1739
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1740
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1741
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1742
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1743
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1744
+ typename T36, typename T37, typename T38>
1745
+ class ValueArray38 {
1746
+ public:
1747
+ ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1748
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1749
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1750
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1751
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1752
+ v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1753
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1754
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1755
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1756
+ v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1757
+ v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1758
+
1759
+ template <typename T>
1760
+ operator ParamGenerator<T>() const {
1761
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1762
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1763
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1764
+ v36_, v37_, v38_};
1765
+ return ValuesIn(array);
1766
+ }
1767
+
1768
+ private:
1769
+ // No implementation - assignment is unsupported.
1770
+ void operator=(const ValueArray38& other);
1771
+
1772
+ const T1 v1_;
1773
+ const T2 v2_;
1774
+ const T3 v3_;
1775
+ const T4 v4_;
1776
+ const T5 v5_;
1777
+ const T6 v6_;
1778
+ const T7 v7_;
1779
+ const T8 v8_;
1780
+ const T9 v9_;
1781
+ const T10 v10_;
1782
+ const T11 v11_;
1783
+ const T12 v12_;
1784
+ const T13 v13_;
1785
+ const T14 v14_;
1786
+ const T15 v15_;
1787
+ const T16 v16_;
1788
+ const T17 v17_;
1789
+ const T18 v18_;
1790
+ const T19 v19_;
1791
+ const T20 v20_;
1792
+ const T21 v21_;
1793
+ const T22 v22_;
1794
+ const T23 v23_;
1795
+ const T24 v24_;
1796
+ const T25 v25_;
1797
+ const T26 v26_;
1798
+ const T27 v27_;
1799
+ const T28 v28_;
1800
+ const T29 v29_;
1801
+ const T30 v30_;
1802
+ const T31 v31_;
1803
+ const T32 v32_;
1804
+ const T33 v33_;
1805
+ const T34 v34_;
1806
+ const T35 v35_;
1807
+ const T36 v36_;
1808
+ const T37 v37_;
1809
+ const T38 v38_;
1810
+ };
1811
+
1812
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1813
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1814
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1815
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1816
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1817
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1818
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1819
+ typename T36, typename T37, typename T38, typename T39>
1820
+ class ValueArray39 {
1821
+ public:
1822
+ ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1823
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1824
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1825
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1826
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
1827
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1828
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1829
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1830
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1831
+ v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1832
+ v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
1833
+
1834
+ template <typename T>
1835
+ operator ParamGenerator<T>() const {
1836
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1837
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1838
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1839
+ v36_, v37_, v38_, v39_};
1840
+ return ValuesIn(array);
1841
+ }
1842
+
1843
+ private:
1844
+ // No implementation - assignment is unsupported.
1845
+ void operator=(const ValueArray39& other);
1846
+
1847
+ const T1 v1_;
1848
+ const T2 v2_;
1849
+ const T3 v3_;
1850
+ const T4 v4_;
1851
+ const T5 v5_;
1852
+ const T6 v6_;
1853
+ const T7 v7_;
1854
+ const T8 v8_;
1855
+ const T9 v9_;
1856
+ const T10 v10_;
1857
+ const T11 v11_;
1858
+ const T12 v12_;
1859
+ const T13 v13_;
1860
+ const T14 v14_;
1861
+ const T15 v15_;
1862
+ const T16 v16_;
1863
+ const T17 v17_;
1864
+ const T18 v18_;
1865
+ const T19 v19_;
1866
+ const T20 v20_;
1867
+ const T21 v21_;
1868
+ const T22 v22_;
1869
+ const T23 v23_;
1870
+ const T24 v24_;
1871
+ const T25 v25_;
1872
+ const T26 v26_;
1873
+ const T27 v27_;
1874
+ const T28 v28_;
1875
+ const T29 v29_;
1876
+ const T30 v30_;
1877
+ const T31 v31_;
1878
+ const T32 v32_;
1879
+ const T33 v33_;
1880
+ const T34 v34_;
1881
+ const T35 v35_;
1882
+ const T36 v36_;
1883
+ const T37 v37_;
1884
+ const T38 v38_;
1885
+ const T39 v39_;
1886
+ };
1887
+
1888
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1889
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1890
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1891
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1892
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1893
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1894
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1895
+ typename T36, typename T37, typename T38, typename T39, typename T40>
1896
+ class ValueArray40 {
1897
+ public:
1898
+ ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1899
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1900
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1901
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1902
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
1903
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1904
+ v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1905
+ v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1906
+ v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1907
+ v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
1908
+ v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
1909
+ v40_(v40) {}
1910
+
1911
+ template <typename T>
1912
+ operator ParamGenerator<T>() const {
1913
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1914
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1915
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1916
+ v36_, v37_, v38_, v39_, v40_};
1917
+ return ValuesIn(array);
1918
+ }
1919
+
1920
+ private:
1921
+ // No implementation - assignment is unsupported.
1922
+ void operator=(const ValueArray40& other);
1923
+
1924
+ const T1 v1_;
1925
+ const T2 v2_;
1926
+ const T3 v3_;
1927
+ const T4 v4_;
1928
+ const T5 v5_;
1929
+ const T6 v6_;
1930
+ const T7 v7_;
1931
+ const T8 v8_;
1932
+ const T9 v9_;
1933
+ const T10 v10_;
1934
+ const T11 v11_;
1935
+ const T12 v12_;
1936
+ const T13 v13_;
1937
+ const T14 v14_;
1938
+ const T15 v15_;
1939
+ const T16 v16_;
1940
+ const T17 v17_;
1941
+ const T18 v18_;
1942
+ const T19 v19_;
1943
+ const T20 v20_;
1944
+ const T21 v21_;
1945
+ const T22 v22_;
1946
+ const T23 v23_;
1947
+ const T24 v24_;
1948
+ const T25 v25_;
1949
+ const T26 v26_;
1950
+ const T27 v27_;
1951
+ const T28 v28_;
1952
+ const T29 v29_;
1953
+ const T30 v30_;
1954
+ const T31 v31_;
1955
+ const T32 v32_;
1956
+ const T33 v33_;
1957
+ const T34 v34_;
1958
+ const T35 v35_;
1959
+ const T36 v36_;
1960
+ const T37 v37_;
1961
+ const T38 v38_;
1962
+ const T39 v39_;
1963
+ const T40 v40_;
1964
+ };
1965
+
1966
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
1967
+ typename T6, typename T7, typename T8, typename T9, typename T10,
1968
+ typename T11, typename T12, typename T13, typename T14, typename T15,
1969
+ typename T16, typename T17, typename T18, typename T19, typename T20,
1970
+ typename T21, typename T22, typename T23, typename T24, typename T25,
1971
+ typename T26, typename T27, typename T28, typename T29, typename T30,
1972
+ typename T31, typename T32, typename T33, typename T34, typename T35,
1973
+ typename T36, typename T37, typename T38, typename T39, typename T40,
1974
+ typename T41>
1975
+ class ValueArray41 {
1976
+ public:
1977
+ ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1978
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1979
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1980
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1981
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
1982
+ T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1983
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1984
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1985
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1986
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1987
+ v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
1988
+ v39_(v39), v40_(v40), v41_(v41) {}
1989
+
1990
+ template <typename T>
1991
+ operator ParamGenerator<T>() const {
1992
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1993
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1994
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1995
+ v36_, v37_, v38_, v39_, v40_, v41_};
1996
+ return ValuesIn(array);
1997
+ }
1998
+
1999
+ private:
2000
+ // No implementation - assignment is unsupported.
2001
+ void operator=(const ValueArray41& other);
2002
+
2003
+ const T1 v1_;
2004
+ const T2 v2_;
2005
+ const T3 v3_;
2006
+ const T4 v4_;
2007
+ const T5 v5_;
2008
+ const T6 v6_;
2009
+ const T7 v7_;
2010
+ const T8 v8_;
2011
+ const T9 v9_;
2012
+ const T10 v10_;
2013
+ const T11 v11_;
2014
+ const T12 v12_;
2015
+ const T13 v13_;
2016
+ const T14 v14_;
2017
+ const T15 v15_;
2018
+ const T16 v16_;
2019
+ const T17 v17_;
2020
+ const T18 v18_;
2021
+ const T19 v19_;
2022
+ const T20 v20_;
2023
+ const T21 v21_;
2024
+ const T22 v22_;
2025
+ const T23 v23_;
2026
+ const T24 v24_;
2027
+ const T25 v25_;
2028
+ const T26 v26_;
2029
+ const T27 v27_;
2030
+ const T28 v28_;
2031
+ const T29 v29_;
2032
+ const T30 v30_;
2033
+ const T31 v31_;
2034
+ const T32 v32_;
2035
+ const T33 v33_;
2036
+ const T34 v34_;
2037
+ const T35 v35_;
2038
+ const T36 v36_;
2039
+ const T37 v37_;
2040
+ const T38 v38_;
2041
+ const T39 v39_;
2042
+ const T40 v40_;
2043
+ const T41 v41_;
2044
+ };
2045
+
2046
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2047
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2048
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2049
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2050
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2051
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2052
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2053
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2054
+ typename T41, typename T42>
2055
+ class ValueArray42 {
2056
+ public:
2057
+ ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2058
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2059
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2060
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2061
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2062
+ T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2063
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2064
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2065
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2066
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2067
+ v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2068
+ v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2069
+
2070
+ template <typename T>
2071
+ operator ParamGenerator<T>() const {
2072
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2073
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2074
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2075
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_};
2076
+ return ValuesIn(array);
2077
+ }
2078
+
2079
+ private:
2080
+ // No implementation - assignment is unsupported.
2081
+ void operator=(const ValueArray42& other);
2082
+
2083
+ const T1 v1_;
2084
+ const T2 v2_;
2085
+ const T3 v3_;
2086
+ const T4 v4_;
2087
+ const T5 v5_;
2088
+ const T6 v6_;
2089
+ const T7 v7_;
2090
+ const T8 v8_;
2091
+ const T9 v9_;
2092
+ const T10 v10_;
2093
+ const T11 v11_;
2094
+ const T12 v12_;
2095
+ const T13 v13_;
2096
+ const T14 v14_;
2097
+ const T15 v15_;
2098
+ const T16 v16_;
2099
+ const T17 v17_;
2100
+ const T18 v18_;
2101
+ const T19 v19_;
2102
+ const T20 v20_;
2103
+ const T21 v21_;
2104
+ const T22 v22_;
2105
+ const T23 v23_;
2106
+ const T24 v24_;
2107
+ const T25 v25_;
2108
+ const T26 v26_;
2109
+ const T27 v27_;
2110
+ const T28 v28_;
2111
+ const T29 v29_;
2112
+ const T30 v30_;
2113
+ const T31 v31_;
2114
+ const T32 v32_;
2115
+ const T33 v33_;
2116
+ const T34 v34_;
2117
+ const T35 v35_;
2118
+ const T36 v36_;
2119
+ const T37 v37_;
2120
+ const T38 v38_;
2121
+ const T39 v39_;
2122
+ const T40 v40_;
2123
+ const T41 v41_;
2124
+ const T42 v42_;
2125
+ };
2126
+
2127
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2128
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2129
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2130
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2131
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2132
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2133
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2134
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2135
+ typename T41, typename T42, typename T43>
2136
+ class ValueArray43 {
2137
+ public:
2138
+ ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2139
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2140
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2141
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2142
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2143
+ T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2144
+ v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2145
+ v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2146
+ v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2147
+ v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2148
+ v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2149
+ v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2150
+
2151
+ template <typename T>
2152
+ operator ParamGenerator<T>() const {
2153
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2154
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2155
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2156
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
2157
+ return ValuesIn(array);
2158
+ }
2159
+
2160
+ private:
2161
+ // No implementation - assignment is unsupported.
2162
+ void operator=(const ValueArray43& other);
2163
+
2164
+ const T1 v1_;
2165
+ const T2 v2_;
2166
+ const T3 v3_;
2167
+ const T4 v4_;
2168
+ const T5 v5_;
2169
+ const T6 v6_;
2170
+ const T7 v7_;
2171
+ const T8 v8_;
2172
+ const T9 v9_;
2173
+ const T10 v10_;
2174
+ const T11 v11_;
2175
+ const T12 v12_;
2176
+ const T13 v13_;
2177
+ const T14 v14_;
2178
+ const T15 v15_;
2179
+ const T16 v16_;
2180
+ const T17 v17_;
2181
+ const T18 v18_;
2182
+ const T19 v19_;
2183
+ const T20 v20_;
2184
+ const T21 v21_;
2185
+ const T22 v22_;
2186
+ const T23 v23_;
2187
+ const T24 v24_;
2188
+ const T25 v25_;
2189
+ const T26 v26_;
2190
+ const T27 v27_;
2191
+ const T28 v28_;
2192
+ const T29 v29_;
2193
+ const T30 v30_;
2194
+ const T31 v31_;
2195
+ const T32 v32_;
2196
+ const T33 v33_;
2197
+ const T34 v34_;
2198
+ const T35 v35_;
2199
+ const T36 v36_;
2200
+ const T37 v37_;
2201
+ const T38 v38_;
2202
+ const T39 v39_;
2203
+ const T40 v40_;
2204
+ const T41 v41_;
2205
+ const T42 v42_;
2206
+ const T43 v43_;
2207
+ };
2208
+
2209
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2210
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2211
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2212
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2213
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2214
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2215
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2216
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2217
+ typename T41, typename T42, typename T43, typename T44>
2218
+ class ValueArray44 {
2219
+ public:
2220
+ ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2221
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2222
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2223
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2224
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2225
+ T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2226
+ v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2227
+ v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2228
+ v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2229
+ v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2230
+ v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2231
+ v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2232
+ v43_(v43), v44_(v44) {}
2233
+
2234
+ template <typename T>
2235
+ operator ParamGenerator<T>() const {
2236
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2237
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2238
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2239
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
2240
+ return ValuesIn(array);
2241
+ }
2242
+
2243
+ private:
2244
+ // No implementation - assignment is unsupported.
2245
+ void operator=(const ValueArray44& other);
2246
+
2247
+ const T1 v1_;
2248
+ const T2 v2_;
2249
+ const T3 v3_;
2250
+ const T4 v4_;
2251
+ const T5 v5_;
2252
+ const T6 v6_;
2253
+ const T7 v7_;
2254
+ const T8 v8_;
2255
+ const T9 v9_;
2256
+ const T10 v10_;
2257
+ const T11 v11_;
2258
+ const T12 v12_;
2259
+ const T13 v13_;
2260
+ const T14 v14_;
2261
+ const T15 v15_;
2262
+ const T16 v16_;
2263
+ const T17 v17_;
2264
+ const T18 v18_;
2265
+ const T19 v19_;
2266
+ const T20 v20_;
2267
+ const T21 v21_;
2268
+ const T22 v22_;
2269
+ const T23 v23_;
2270
+ const T24 v24_;
2271
+ const T25 v25_;
2272
+ const T26 v26_;
2273
+ const T27 v27_;
2274
+ const T28 v28_;
2275
+ const T29 v29_;
2276
+ const T30 v30_;
2277
+ const T31 v31_;
2278
+ const T32 v32_;
2279
+ const T33 v33_;
2280
+ const T34 v34_;
2281
+ const T35 v35_;
2282
+ const T36 v36_;
2283
+ const T37 v37_;
2284
+ const T38 v38_;
2285
+ const T39 v39_;
2286
+ const T40 v40_;
2287
+ const T41 v41_;
2288
+ const T42 v42_;
2289
+ const T43 v43_;
2290
+ const T44 v44_;
2291
+ };
2292
+
2293
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2294
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2295
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2296
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2297
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2298
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2299
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2300
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2301
+ typename T41, typename T42, typename T43, typename T44, typename T45>
2302
+ class ValueArray45 {
2303
+ public:
2304
+ ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2305
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2306
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2307
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2308
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2309
+ T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2310
+ v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2311
+ v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2312
+ v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2313
+ v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2314
+ v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2315
+ v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2316
+ v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2317
+
2318
+ template <typename T>
2319
+ operator ParamGenerator<T>() const {
2320
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2321
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2322
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2323
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
2324
+ return ValuesIn(array);
2325
+ }
2326
+
2327
+ private:
2328
+ // No implementation - assignment is unsupported.
2329
+ void operator=(const ValueArray45& other);
2330
+
2331
+ const T1 v1_;
2332
+ const T2 v2_;
2333
+ const T3 v3_;
2334
+ const T4 v4_;
2335
+ const T5 v5_;
2336
+ const T6 v6_;
2337
+ const T7 v7_;
2338
+ const T8 v8_;
2339
+ const T9 v9_;
2340
+ const T10 v10_;
2341
+ const T11 v11_;
2342
+ const T12 v12_;
2343
+ const T13 v13_;
2344
+ const T14 v14_;
2345
+ const T15 v15_;
2346
+ const T16 v16_;
2347
+ const T17 v17_;
2348
+ const T18 v18_;
2349
+ const T19 v19_;
2350
+ const T20 v20_;
2351
+ const T21 v21_;
2352
+ const T22 v22_;
2353
+ const T23 v23_;
2354
+ const T24 v24_;
2355
+ const T25 v25_;
2356
+ const T26 v26_;
2357
+ const T27 v27_;
2358
+ const T28 v28_;
2359
+ const T29 v29_;
2360
+ const T30 v30_;
2361
+ const T31 v31_;
2362
+ const T32 v32_;
2363
+ const T33 v33_;
2364
+ const T34 v34_;
2365
+ const T35 v35_;
2366
+ const T36 v36_;
2367
+ const T37 v37_;
2368
+ const T38 v38_;
2369
+ const T39 v39_;
2370
+ const T40 v40_;
2371
+ const T41 v41_;
2372
+ const T42 v42_;
2373
+ const T43 v43_;
2374
+ const T44 v44_;
2375
+ const T45 v45_;
2376
+ };
2377
+
2378
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2379
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2380
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2381
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2382
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2383
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2384
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2385
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2386
+ typename T41, typename T42, typename T43, typename T44, typename T45,
2387
+ typename T46>
2388
+ class ValueArray46 {
2389
+ public:
2390
+ ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2391
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2392
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2393
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2394
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2395
+ T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2396
+ v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2397
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2398
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2399
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2400
+ v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2401
+ v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2402
+ v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2403
+
2404
+ template <typename T>
2405
+ operator ParamGenerator<T>() const {
2406
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2407
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2408
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2409
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
2410
+ return ValuesIn(array);
2411
+ }
2412
+
2413
+ private:
2414
+ // No implementation - assignment is unsupported.
2415
+ void operator=(const ValueArray46& other);
2416
+
2417
+ const T1 v1_;
2418
+ const T2 v2_;
2419
+ const T3 v3_;
2420
+ const T4 v4_;
2421
+ const T5 v5_;
2422
+ const T6 v6_;
2423
+ const T7 v7_;
2424
+ const T8 v8_;
2425
+ const T9 v9_;
2426
+ const T10 v10_;
2427
+ const T11 v11_;
2428
+ const T12 v12_;
2429
+ const T13 v13_;
2430
+ const T14 v14_;
2431
+ const T15 v15_;
2432
+ const T16 v16_;
2433
+ const T17 v17_;
2434
+ const T18 v18_;
2435
+ const T19 v19_;
2436
+ const T20 v20_;
2437
+ const T21 v21_;
2438
+ const T22 v22_;
2439
+ const T23 v23_;
2440
+ const T24 v24_;
2441
+ const T25 v25_;
2442
+ const T26 v26_;
2443
+ const T27 v27_;
2444
+ const T28 v28_;
2445
+ const T29 v29_;
2446
+ const T30 v30_;
2447
+ const T31 v31_;
2448
+ const T32 v32_;
2449
+ const T33 v33_;
2450
+ const T34 v34_;
2451
+ const T35 v35_;
2452
+ const T36 v36_;
2453
+ const T37 v37_;
2454
+ const T38 v38_;
2455
+ const T39 v39_;
2456
+ const T40 v40_;
2457
+ const T41 v41_;
2458
+ const T42 v42_;
2459
+ const T43 v43_;
2460
+ const T44 v44_;
2461
+ const T45 v45_;
2462
+ const T46 v46_;
2463
+ };
2464
+
2465
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2466
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2467
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2468
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2469
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2470
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2471
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2472
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2473
+ typename T41, typename T42, typename T43, typename T44, typename T45,
2474
+ typename T46, typename T47>
2475
+ class ValueArray47 {
2476
+ public:
2477
+ ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2478
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2479
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2480
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2481
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2482
+ T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2483
+ v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2484
+ v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2485
+ v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2486
+ v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2487
+ v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2488
+ v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2489
+ v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2490
+ v47_(v47) {}
2491
+
2492
+ template <typename T>
2493
+ operator ParamGenerator<T>() const {
2494
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2495
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2496
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2497
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
2498
+ v47_};
2499
+ return ValuesIn(array);
2500
+ }
2501
+
2502
+ private:
2503
+ // No implementation - assignment is unsupported.
2504
+ void operator=(const ValueArray47& other);
2505
+
2506
+ const T1 v1_;
2507
+ const T2 v2_;
2508
+ const T3 v3_;
2509
+ const T4 v4_;
2510
+ const T5 v5_;
2511
+ const T6 v6_;
2512
+ const T7 v7_;
2513
+ const T8 v8_;
2514
+ const T9 v9_;
2515
+ const T10 v10_;
2516
+ const T11 v11_;
2517
+ const T12 v12_;
2518
+ const T13 v13_;
2519
+ const T14 v14_;
2520
+ const T15 v15_;
2521
+ const T16 v16_;
2522
+ const T17 v17_;
2523
+ const T18 v18_;
2524
+ const T19 v19_;
2525
+ const T20 v20_;
2526
+ const T21 v21_;
2527
+ const T22 v22_;
2528
+ const T23 v23_;
2529
+ const T24 v24_;
2530
+ const T25 v25_;
2531
+ const T26 v26_;
2532
+ const T27 v27_;
2533
+ const T28 v28_;
2534
+ const T29 v29_;
2535
+ const T30 v30_;
2536
+ const T31 v31_;
2537
+ const T32 v32_;
2538
+ const T33 v33_;
2539
+ const T34 v34_;
2540
+ const T35 v35_;
2541
+ const T36 v36_;
2542
+ const T37 v37_;
2543
+ const T38 v38_;
2544
+ const T39 v39_;
2545
+ const T40 v40_;
2546
+ const T41 v41_;
2547
+ const T42 v42_;
2548
+ const T43 v43_;
2549
+ const T44 v44_;
2550
+ const T45 v45_;
2551
+ const T46 v46_;
2552
+ const T47 v47_;
2553
+ };
2554
+
2555
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2556
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2557
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2558
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2559
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2560
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2561
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2562
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2563
+ typename T41, typename T42, typename T43, typename T44, typename T45,
2564
+ typename T46, typename T47, typename T48>
2565
+ class ValueArray48 {
2566
+ public:
2567
+ ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2568
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2569
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2570
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2571
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2572
+ T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2573
+ v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2574
+ v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2575
+ v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2576
+ v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2577
+ v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2578
+ v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2579
+ v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2580
+ v46_(v46), v47_(v47), v48_(v48) {}
2581
+
2582
+ template <typename T>
2583
+ operator ParamGenerator<T>() const {
2584
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2585
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2586
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2587
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2588
+ v48_};
2589
+ return ValuesIn(array);
2590
+ }
2591
+
2592
+ private:
2593
+ // No implementation - assignment is unsupported.
2594
+ void operator=(const ValueArray48& other);
2595
+
2596
+ const T1 v1_;
2597
+ const T2 v2_;
2598
+ const T3 v3_;
2599
+ const T4 v4_;
2600
+ const T5 v5_;
2601
+ const T6 v6_;
2602
+ const T7 v7_;
2603
+ const T8 v8_;
2604
+ const T9 v9_;
2605
+ const T10 v10_;
2606
+ const T11 v11_;
2607
+ const T12 v12_;
2608
+ const T13 v13_;
2609
+ const T14 v14_;
2610
+ const T15 v15_;
2611
+ const T16 v16_;
2612
+ const T17 v17_;
2613
+ const T18 v18_;
2614
+ const T19 v19_;
2615
+ const T20 v20_;
2616
+ const T21 v21_;
2617
+ const T22 v22_;
2618
+ const T23 v23_;
2619
+ const T24 v24_;
2620
+ const T25 v25_;
2621
+ const T26 v26_;
2622
+ const T27 v27_;
2623
+ const T28 v28_;
2624
+ const T29 v29_;
2625
+ const T30 v30_;
2626
+ const T31 v31_;
2627
+ const T32 v32_;
2628
+ const T33 v33_;
2629
+ const T34 v34_;
2630
+ const T35 v35_;
2631
+ const T36 v36_;
2632
+ const T37 v37_;
2633
+ const T38 v38_;
2634
+ const T39 v39_;
2635
+ const T40 v40_;
2636
+ const T41 v41_;
2637
+ const T42 v42_;
2638
+ const T43 v43_;
2639
+ const T44 v44_;
2640
+ const T45 v45_;
2641
+ const T46 v46_;
2642
+ const T47 v47_;
2643
+ const T48 v48_;
2644
+ };
2645
+
2646
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2647
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2648
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2649
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2650
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2651
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2652
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2653
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2654
+ typename T41, typename T42, typename T43, typename T44, typename T45,
2655
+ typename T46, typename T47, typename T48, typename T49>
2656
+ class ValueArray49 {
2657
+ public:
2658
+ ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2659
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2660
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2661
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2662
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2663
+ T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2664
+ T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2665
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2666
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2667
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2668
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2669
+ v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2670
+ v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2671
+ v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2672
+
2673
+ template <typename T>
2674
+ operator ParamGenerator<T>() const {
2675
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2676
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2677
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2678
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2679
+ v48_, v49_};
2680
+ return ValuesIn(array);
2681
+ }
2682
+
2683
+ private:
2684
+ // No implementation - assignment is unsupported.
2685
+ void operator=(const ValueArray49& other);
2686
+
2687
+ const T1 v1_;
2688
+ const T2 v2_;
2689
+ const T3 v3_;
2690
+ const T4 v4_;
2691
+ const T5 v5_;
2692
+ const T6 v6_;
2693
+ const T7 v7_;
2694
+ const T8 v8_;
2695
+ const T9 v9_;
2696
+ const T10 v10_;
2697
+ const T11 v11_;
2698
+ const T12 v12_;
2699
+ const T13 v13_;
2700
+ const T14 v14_;
2701
+ const T15 v15_;
2702
+ const T16 v16_;
2703
+ const T17 v17_;
2704
+ const T18 v18_;
2705
+ const T19 v19_;
2706
+ const T20 v20_;
2707
+ const T21 v21_;
2708
+ const T22 v22_;
2709
+ const T23 v23_;
2710
+ const T24 v24_;
2711
+ const T25 v25_;
2712
+ const T26 v26_;
2713
+ const T27 v27_;
2714
+ const T28 v28_;
2715
+ const T29 v29_;
2716
+ const T30 v30_;
2717
+ const T31 v31_;
2718
+ const T32 v32_;
2719
+ const T33 v33_;
2720
+ const T34 v34_;
2721
+ const T35 v35_;
2722
+ const T36 v36_;
2723
+ const T37 v37_;
2724
+ const T38 v38_;
2725
+ const T39 v39_;
2726
+ const T40 v40_;
2727
+ const T41 v41_;
2728
+ const T42 v42_;
2729
+ const T43 v43_;
2730
+ const T44 v44_;
2731
+ const T45 v45_;
2732
+ const T46 v46_;
2733
+ const T47 v47_;
2734
+ const T48 v48_;
2735
+ const T49 v49_;
2736
+ };
2737
+
2738
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
2739
+ typename T6, typename T7, typename T8, typename T9, typename T10,
2740
+ typename T11, typename T12, typename T13, typename T14, typename T15,
2741
+ typename T16, typename T17, typename T18, typename T19, typename T20,
2742
+ typename T21, typename T22, typename T23, typename T24, typename T25,
2743
+ typename T26, typename T27, typename T28, typename T29, typename T30,
2744
+ typename T31, typename T32, typename T33, typename T34, typename T35,
2745
+ typename T36, typename T37, typename T38, typename T39, typename T40,
2746
+ typename T41, typename T42, typename T43, typename T44, typename T45,
2747
+ typename T46, typename T47, typename T48, typename T49, typename T50>
2748
+ class ValueArray50 {
2749
+ public:
2750
+ ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2751
+ T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2752
+ T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2753
+ T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2754
+ T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2755
+ T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
2756
+ T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2757
+ v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2758
+ v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2759
+ v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2760
+ v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2761
+ v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2762
+ v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2763
+ v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
2764
+
2765
+ template <typename T>
2766
+ operator ParamGenerator<T>() const {
2767
+ const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2768
+ v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2769
+ v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2770
+ v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2771
+ v48_, v49_, v50_};
2772
+ return ValuesIn(array);
2773
+ }
2774
+
2775
+ private:
2776
+ // No implementation - assignment is unsupported.
2777
+ void operator=(const ValueArray50& other);
2778
+
2779
+ const T1 v1_;
2780
+ const T2 v2_;
2781
+ const T3 v3_;
2782
+ const T4 v4_;
2783
+ const T5 v5_;
2784
+ const T6 v6_;
2785
+ const T7 v7_;
2786
+ const T8 v8_;
2787
+ const T9 v9_;
2788
+ const T10 v10_;
2789
+ const T11 v11_;
2790
+ const T12 v12_;
2791
+ const T13 v13_;
2792
+ const T14 v14_;
2793
+ const T15 v15_;
2794
+ const T16 v16_;
2795
+ const T17 v17_;
2796
+ const T18 v18_;
2797
+ const T19 v19_;
2798
+ const T20 v20_;
2799
+ const T21 v21_;
2800
+ const T22 v22_;
2801
+ const T23 v23_;
2802
+ const T24 v24_;
2803
+ const T25 v25_;
2804
+ const T26 v26_;
2805
+ const T27 v27_;
2806
+ const T28 v28_;
2807
+ const T29 v29_;
2808
+ const T30 v30_;
2809
+ const T31 v31_;
2810
+ const T32 v32_;
2811
+ const T33 v33_;
2812
+ const T34 v34_;
2813
+ const T35 v35_;
2814
+ const T36 v36_;
2815
+ const T37 v37_;
2816
+ const T38 v38_;
2817
+ const T39 v39_;
2818
+ const T40 v40_;
2819
+ const T41 v41_;
2820
+ const T42 v42_;
2821
+ const T43 v43_;
2822
+ const T44 v44_;
2823
+ const T45 v45_;
2824
+ const T46 v46_;
2825
+ const T47 v47_;
2826
+ const T48 v48_;
2827
+ const T49 v49_;
2828
+ const T50 v50_;
2829
+ };
2830
+
2831
+ # if GTEST_HAS_COMBINE
2832
+ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
2833
+ //
2834
+ // Generates values from the Cartesian product of values produced
2835
+ // by the argument generators.
2836
+ //
2837
+ template <typename T1, typename T2>
2838
+ class CartesianProductGenerator2
2839
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
2840
+ public:
2841
+ typedef ::std::tr1::tuple<T1, T2> ParamType;
2842
+
2843
+ CartesianProductGenerator2(const ParamGenerator<T1>& g1,
2844
+ const ParamGenerator<T2>& g2)
2845
+ : g1_(g1), g2_(g2) {}
2846
+ virtual ~CartesianProductGenerator2() {}
2847
+
2848
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
2849
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
2850
+ }
2851
+ virtual ParamIteratorInterface<ParamType>* End() const {
2852
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
2853
+ }
2854
+
2855
+ private:
2856
+ class Iterator : public ParamIteratorInterface<ParamType> {
2857
+ public:
2858
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
2859
+ const ParamGenerator<T1>& g1,
2860
+ const typename ParamGenerator<T1>::iterator& current1,
2861
+ const ParamGenerator<T2>& g2,
2862
+ const typename ParamGenerator<T2>::iterator& current2)
2863
+ : base_(base),
2864
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
2865
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
2866
+ ComputeCurrentValue();
2867
+ }
2868
+ virtual ~Iterator() {}
2869
+
2870
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
2871
+ return base_;
2872
+ }
2873
+ // Advance should not be called on beyond-of-range iterators
2874
+ // so no component iterators must be beyond end of range, either.
2875
+ virtual void Advance() {
2876
+ assert(!AtEnd());
2877
+ ++current2_;
2878
+ if (current2_ == end2_) {
2879
+ current2_ = begin2_;
2880
+ ++current1_;
2881
+ }
2882
+ ComputeCurrentValue();
2883
+ }
2884
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
2885
+ return new Iterator(*this);
2886
+ }
2887
+ virtual const ParamType* Current() const { return &current_value_; }
2888
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
2889
+ // Having the same base generator guarantees that the other
2890
+ // iterator is of the same type and we can downcast.
2891
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
2892
+ << "The program attempted to compare iterators "
2893
+ << "from different generators." << std::endl;
2894
+ const Iterator* typed_other =
2895
+ CheckedDowncastToActualType<const Iterator>(&other);
2896
+ // We must report iterators equal if they both point beyond their
2897
+ // respective ranges. That can happen in a variety of fashions,
2898
+ // so we have to consult AtEnd().
2899
+ return (AtEnd() && typed_other->AtEnd()) ||
2900
+ (
2901
+ current1_ == typed_other->current1_ &&
2902
+ current2_ == typed_other->current2_);
2903
+ }
2904
+
2905
+ private:
2906
+ Iterator(const Iterator& other)
2907
+ : base_(other.base_),
2908
+ begin1_(other.begin1_),
2909
+ end1_(other.end1_),
2910
+ current1_(other.current1_),
2911
+ begin2_(other.begin2_),
2912
+ end2_(other.end2_),
2913
+ current2_(other.current2_) {
2914
+ ComputeCurrentValue();
2915
+ }
2916
+
2917
+ void ComputeCurrentValue() {
2918
+ if (!AtEnd())
2919
+ current_value_ = ParamType(*current1_, *current2_);
2920
+ }
2921
+ bool AtEnd() const {
2922
+ // We must report iterator past the end of the range when either of the
2923
+ // component iterators has reached the end of its range.
2924
+ return
2925
+ current1_ == end1_ ||
2926
+ current2_ == end2_;
2927
+ }
2928
+
2929
+ // No implementation - assignment is unsupported.
2930
+ void operator=(const Iterator& other);
2931
+
2932
+ const ParamGeneratorInterface<ParamType>* const base_;
2933
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
2934
+ // current[i]_ is the actual traversing iterator.
2935
+ const typename ParamGenerator<T1>::iterator begin1_;
2936
+ const typename ParamGenerator<T1>::iterator end1_;
2937
+ typename ParamGenerator<T1>::iterator current1_;
2938
+ const typename ParamGenerator<T2>::iterator begin2_;
2939
+ const typename ParamGenerator<T2>::iterator end2_;
2940
+ typename ParamGenerator<T2>::iterator current2_;
2941
+ ParamType current_value_;
2942
+ }; // class CartesianProductGenerator2::Iterator
2943
+
2944
+ // No implementation - assignment is unsupported.
2945
+ void operator=(const CartesianProductGenerator2& other);
2946
+
2947
+ const ParamGenerator<T1> g1_;
2948
+ const ParamGenerator<T2> g2_;
2949
+ }; // class CartesianProductGenerator2
2950
+
2951
+
2952
+ template <typename T1, typename T2, typename T3>
2953
+ class CartesianProductGenerator3
2954
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
2955
+ public:
2956
+ typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
2957
+
2958
+ CartesianProductGenerator3(const ParamGenerator<T1>& g1,
2959
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
2960
+ : g1_(g1), g2_(g2), g3_(g3) {}
2961
+ virtual ~CartesianProductGenerator3() {}
2962
+
2963
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
2964
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
2965
+ g3_.begin());
2966
+ }
2967
+ virtual ParamIteratorInterface<ParamType>* End() const {
2968
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
2969
+ }
2970
+
2971
+ private:
2972
+ class Iterator : public ParamIteratorInterface<ParamType> {
2973
+ public:
2974
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
2975
+ const ParamGenerator<T1>& g1,
2976
+ const typename ParamGenerator<T1>::iterator& current1,
2977
+ const ParamGenerator<T2>& g2,
2978
+ const typename ParamGenerator<T2>::iterator& current2,
2979
+ const ParamGenerator<T3>& g3,
2980
+ const typename ParamGenerator<T3>::iterator& current3)
2981
+ : base_(base),
2982
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
2983
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
2984
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
2985
+ ComputeCurrentValue();
2986
+ }
2987
+ virtual ~Iterator() {}
2988
+
2989
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
2990
+ return base_;
2991
+ }
2992
+ // Advance should not be called on beyond-of-range iterators
2993
+ // so no component iterators must be beyond end of range, either.
2994
+ virtual void Advance() {
2995
+ assert(!AtEnd());
2996
+ ++current3_;
2997
+ if (current3_ == end3_) {
2998
+ current3_ = begin3_;
2999
+ ++current2_;
3000
+ }
3001
+ if (current2_ == end2_) {
3002
+ current2_ = begin2_;
3003
+ ++current1_;
3004
+ }
3005
+ ComputeCurrentValue();
3006
+ }
3007
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3008
+ return new Iterator(*this);
3009
+ }
3010
+ virtual const ParamType* Current() const { return &current_value_; }
3011
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3012
+ // Having the same base generator guarantees that the other
3013
+ // iterator is of the same type and we can downcast.
3014
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3015
+ << "The program attempted to compare iterators "
3016
+ << "from different generators." << std::endl;
3017
+ const Iterator* typed_other =
3018
+ CheckedDowncastToActualType<const Iterator>(&other);
3019
+ // We must report iterators equal if they both point beyond their
3020
+ // respective ranges. That can happen in a variety of fashions,
3021
+ // so we have to consult AtEnd().
3022
+ return (AtEnd() && typed_other->AtEnd()) ||
3023
+ (
3024
+ current1_ == typed_other->current1_ &&
3025
+ current2_ == typed_other->current2_ &&
3026
+ current3_ == typed_other->current3_);
3027
+ }
3028
+
3029
+ private:
3030
+ Iterator(const Iterator& other)
3031
+ : base_(other.base_),
3032
+ begin1_(other.begin1_),
3033
+ end1_(other.end1_),
3034
+ current1_(other.current1_),
3035
+ begin2_(other.begin2_),
3036
+ end2_(other.end2_),
3037
+ current2_(other.current2_),
3038
+ begin3_(other.begin3_),
3039
+ end3_(other.end3_),
3040
+ current3_(other.current3_) {
3041
+ ComputeCurrentValue();
3042
+ }
3043
+
3044
+ void ComputeCurrentValue() {
3045
+ if (!AtEnd())
3046
+ current_value_ = ParamType(*current1_, *current2_, *current3_);
3047
+ }
3048
+ bool AtEnd() const {
3049
+ // We must report iterator past the end of the range when either of the
3050
+ // component iterators has reached the end of its range.
3051
+ return
3052
+ current1_ == end1_ ||
3053
+ current2_ == end2_ ||
3054
+ current3_ == end3_;
3055
+ }
3056
+
3057
+ // No implementation - assignment is unsupported.
3058
+ void operator=(const Iterator& other);
3059
+
3060
+ const ParamGeneratorInterface<ParamType>* const base_;
3061
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3062
+ // current[i]_ is the actual traversing iterator.
3063
+ const typename ParamGenerator<T1>::iterator begin1_;
3064
+ const typename ParamGenerator<T1>::iterator end1_;
3065
+ typename ParamGenerator<T1>::iterator current1_;
3066
+ const typename ParamGenerator<T2>::iterator begin2_;
3067
+ const typename ParamGenerator<T2>::iterator end2_;
3068
+ typename ParamGenerator<T2>::iterator current2_;
3069
+ const typename ParamGenerator<T3>::iterator begin3_;
3070
+ const typename ParamGenerator<T3>::iterator end3_;
3071
+ typename ParamGenerator<T3>::iterator current3_;
3072
+ ParamType current_value_;
3073
+ }; // class CartesianProductGenerator3::Iterator
3074
+
3075
+ // No implementation - assignment is unsupported.
3076
+ void operator=(const CartesianProductGenerator3& other);
3077
+
3078
+ const ParamGenerator<T1> g1_;
3079
+ const ParamGenerator<T2> g2_;
3080
+ const ParamGenerator<T3> g3_;
3081
+ }; // class CartesianProductGenerator3
3082
+
3083
+
3084
+ template <typename T1, typename T2, typename T3, typename T4>
3085
+ class CartesianProductGenerator4
3086
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3087
+ public:
3088
+ typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
3089
+
3090
+ CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3091
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3092
+ const ParamGenerator<T4>& g4)
3093
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3094
+ virtual ~CartesianProductGenerator4() {}
3095
+
3096
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
3097
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3098
+ g3_.begin(), g4_, g4_.begin());
3099
+ }
3100
+ virtual ParamIteratorInterface<ParamType>* End() const {
3101
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3102
+ g4_, g4_.end());
3103
+ }
3104
+
3105
+ private:
3106
+ class Iterator : public ParamIteratorInterface<ParamType> {
3107
+ public:
3108
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
3109
+ const ParamGenerator<T1>& g1,
3110
+ const typename ParamGenerator<T1>::iterator& current1,
3111
+ const ParamGenerator<T2>& g2,
3112
+ const typename ParamGenerator<T2>::iterator& current2,
3113
+ const ParamGenerator<T3>& g3,
3114
+ const typename ParamGenerator<T3>::iterator& current3,
3115
+ const ParamGenerator<T4>& g4,
3116
+ const typename ParamGenerator<T4>::iterator& current4)
3117
+ : base_(base),
3118
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3119
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3120
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3121
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3122
+ ComputeCurrentValue();
3123
+ }
3124
+ virtual ~Iterator() {}
3125
+
3126
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3127
+ return base_;
3128
+ }
3129
+ // Advance should not be called on beyond-of-range iterators
3130
+ // so no component iterators must be beyond end of range, either.
3131
+ virtual void Advance() {
3132
+ assert(!AtEnd());
3133
+ ++current4_;
3134
+ if (current4_ == end4_) {
3135
+ current4_ = begin4_;
3136
+ ++current3_;
3137
+ }
3138
+ if (current3_ == end3_) {
3139
+ current3_ = begin3_;
3140
+ ++current2_;
3141
+ }
3142
+ if (current2_ == end2_) {
3143
+ current2_ = begin2_;
3144
+ ++current1_;
3145
+ }
3146
+ ComputeCurrentValue();
3147
+ }
3148
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3149
+ return new Iterator(*this);
3150
+ }
3151
+ virtual const ParamType* Current() const { return &current_value_; }
3152
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3153
+ // Having the same base generator guarantees that the other
3154
+ // iterator is of the same type and we can downcast.
3155
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3156
+ << "The program attempted to compare iterators "
3157
+ << "from different generators." << std::endl;
3158
+ const Iterator* typed_other =
3159
+ CheckedDowncastToActualType<const Iterator>(&other);
3160
+ // We must report iterators equal if they both point beyond their
3161
+ // respective ranges. That can happen in a variety of fashions,
3162
+ // so we have to consult AtEnd().
3163
+ return (AtEnd() && typed_other->AtEnd()) ||
3164
+ (
3165
+ current1_ == typed_other->current1_ &&
3166
+ current2_ == typed_other->current2_ &&
3167
+ current3_ == typed_other->current3_ &&
3168
+ current4_ == typed_other->current4_);
3169
+ }
3170
+
3171
+ private:
3172
+ Iterator(const Iterator& other)
3173
+ : base_(other.base_),
3174
+ begin1_(other.begin1_),
3175
+ end1_(other.end1_),
3176
+ current1_(other.current1_),
3177
+ begin2_(other.begin2_),
3178
+ end2_(other.end2_),
3179
+ current2_(other.current2_),
3180
+ begin3_(other.begin3_),
3181
+ end3_(other.end3_),
3182
+ current3_(other.current3_),
3183
+ begin4_(other.begin4_),
3184
+ end4_(other.end4_),
3185
+ current4_(other.current4_) {
3186
+ ComputeCurrentValue();
3187
+ }
3188
+
3189
+ void ComputeCurrentValue() {
3190
+ if (!AtEnd())
3191
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
3192
+ *current4_);
3193
+ }
3194
+ bool AtEnd() const {
3195
+ // We must report iterator past the end of the range when either of the
3196
+ // component iterators has reached the end of its range.
3197
+ return
3198
+ current1_ == end1_ ||
3199
+ current2_ == end2_ ||
3200
+ current3_ == end3_ ||
3201
+ current4_ == end4_;
3202
+ }
3203
+
3204
+ // No implementation - assignment is unsupported.
3205
+ void operator=(const Iterator& other);
3206
+
3207
+ const ParamGeneratorInterface<ParamType>* const base_;
3208
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3209
+ // current[i]_ is the actual traversing iterator.
3210
+ const typename ParamGenerator<T1>::iterator begin1_;
3211
+ const typename ParamGenerator<T1>::iterator end1_;
3212
+ typename ParamGenerator<T1>::iterator current1_;
3213
+ const typename ParamGenerator<T2>::iterator begin2_;
3214
+ const typename ParamGenerator<T2>::iterator end2_;
3215
+ typename ParamGenerator<T2>::iterator current2_;
3216
+ const typename ParamGenerator<T3>::iterator begin3_;
3217
+ const typename ParamGenerator<T3>::iterator end3_;
3218
+ typename ParamGenerator<T3>::iterator current3_;
3219
+ const typename ParamGenerator<T4>::iterator begin4_;
3220
+ const typename ParamGenerator<T4>::iterator end4_;
3221
+ typename ParamGenerator<T4>::iterator current4_;
3222
+ ParamType current_value_;
3223
+ }; // class CartesianProductGenerator4::Iterator
3224
+
3225
+ // No implementation - assignment is unsupported.
3226
+ void operator=(const CartesianProductGenerator4& other);
3227
+
3228
+ const ParamGenerator<T1> g1_;
3229
+ const ParamGenerator<T2> g2_;
3230
+ const ParamGenerator<T3> g3_;
3231
+ const ParamGenerator<T4> g4_;
3232
+ }; // class CartesianProductGenerator4
3233
+
3234
+
3235
+ template <typename T1, typename T2, typename T3, typename T4, typename T5>
3236
+ class CartesianProductGenerator5
3237
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
3238
+ public:
3239
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
3240
+
3241
+ CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3242
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3243
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3244
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3245
+ virtual ~CartesianProductGenerator5() {}
3246
+
3247
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
3248
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3249
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3250
+ }
3251
+ virtual ParamIteratorInterface<ParamType>* End() const {
3252
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3253
+ g4_, g4_.end(), g5_, g5_.end());
3254
+ }
3255
+
3256
+ private:
3257
+ class Iterator : public ParamIteratorInterface<ParamType> {
3258
+ public:
3259
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
3260
+ const ParamGenerator<T1>& g1,
3261
+ const typename ParamGenerator<T1>::iterator& current1,
3262
+ const ParamGenerator<T2>& g2,
3263
+ const typename ParamGenerator<T2>::iterator& current2,
3264
+ const ParamGenerator<T3>& g3,
3265
+ const typename ParamGenerator<T3>::iterator& current3,
3266
+ const ParamGenerator<T4>& g4,
3267
+ const typename ParamGenerator<T4>::iterator& current4,
3268
+ const ParamGenerator<T5>& g5,
3269
+ const typename ParamGenerator<T5>::iterator& current5)
3270
+ : base_(base),
3271
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3272
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3273
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3274
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3275
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
3276
+ ComputeCurrentValue();
3277
+ }
3278
+ virtual ~Iterator() {}
3279
+
3280
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3281
+ return base_;
3282
+ }
3283
+ // Advance should not be called on beyond-of-range iterators
3284
+ // so no component iterators must be beyond end of range, either.
3285
+ virtual void Advance() {
3286
+ assert(!AtEnd());
3287
+ ++current5_;
3288
+ if (current5_ == end5_) {
3289
+ current5_ = begin5_;
3290
+ ++current4_;
3291
+ }
3292
+ if (current4_ == end4_) {
3293
+ current4_ = begin4_;
3294
+ ++current3_;
3295
+ }
3296
+ if (current3_ == end3_) {
3297
+ current3_ = begin3_;
3298
+ ++current2_;
3299
+ }
3300
+ if (current2_ == end2_) {
3301
+ current2_ = begin2_;
3302
+ ++current1_;
3303
+ }
3304
+ ComputeCurrentValue();
3305
+ }
3306
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3307
+ return new Iterator(*this);
3308
+ }
3309
+ virtual const ParamType* Current() const { return &current_value_; }
3310
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3311
+ // Having the same base generator guarantees that the other
3312
+ // iterator is of the same type and we can downcast.
3313
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3314
+ << "The program attempted to compare iterators "
3315
+ << "from different generators." << std::endl;
3316
+ const Iterator* typed_other =
3317
+ CheckedDowncastToActualType<const Iterator>(&other);
3318
+ // We must report iterators equal if they both point beyond their
3319
+ // respective ranges. That can happen in a variety of fashions,
3320
+ // so we have to consult AtEnd().
3321
+ return (AtEnd() && typed_other->AtEnd()) ||
3322
+ (
3323
+ current1_ == typed_other->current1_ &&
3324
+ current2_ == typed_other->current2_ &&
3325
+ current3_ == typed_other->current3_ &&
3326
+ current4_ == typed_other->current4_ &&
3327
+ current5_ == typed_other->current5_);
3328
+ }
3329
+
3330
+ private:
3331
+ Iterator(const Iterator& other)
3332
+ : base_(other.base_),
3333
+ begin1_(other.begin1_),
3334
+ end1_(other.end1_),
3335
+ current1_(other.current1_),
3336
+ begin2_(other.begin2_),
3337
+ end2_(other.end2_),
3338
+ current2_(other.current2_),
3339
+ begin3_(other.begin3_),
3340
+ end3_(other.end3_),
3341
+ current3_(other.current3_),
3342
+ begin4_(other.begin4_),
3343
+ end4_(other.end4_),
3344
+ current4_(other.current4_),
3345
+ begin5_(other.begin5_),
3346
+ end5_(other.end5_),
3347
+ current5_(other.current5_) {
3348
+ ComputeCurrentValue();
3349
+ }
3350
+
3351
+ void ComputeCurrentValue() {
3352
+ if (!AtEnd())
3353
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
3354
+ *current4_, *current5_);
3355
+ }
3356
+ bool AtEnd() const {
3357
+ // We must report iterator past the end of the range when either of the
3358
+ // component iterators has reached the end of its range.
3359
+ return
3360
+ current1_ == end1_ ||
3361
+ current2_ == end2_ ||
3362
+ current3_ == end3_ ||
3363
+ current4_ == end4_ ||
3364
+ current5_ == end5_;
3365
+ }
3366
+
3367
+ // No implementation - assignment is unsupported.
3368
+ void operator=(const Iterator& other);
3369
+
3370
+ const ParamGeneratorInterface<ParamType>* const base_;
3371
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3372
+ // current[i]_ is the actual traversing iterator.
3373
+ const typename ParamGenerator<T1>::iterator begin1_;
3374
+ const typename ParamGenerator<T1>::iterator end1_;
3375
+ typename ParamGenerator<T1>::iterator current1_;
3376
+ const typename ParamGenerator<T2>::iterator begin2_;
3377
+ const typename ParamGenerator<T2>::iterator end2_;
3378
+ typename ParamGenerator<T2>::iterator current2_;
3379
+ const typename ParamGenerator<T3>::iterator begin3_;
3380
+ const typename ParamGenerator<T3>::iterator end3_;
3381
+ typename ParamGenerator<T3>::iterator current3_;
3382
+ const typename ParamGenerator<T4>::iterator begin4_;
3383
+ const typename ParamGenerator<T4>::iterator end4_;
3384
+ typename ParamGenerator<T4>::iterator current4_;
3385
+ const typename ParamGenerator<T5>::iterator begin5_;
3386
+ const typename ParamGenerator<T5>::iterator end5_;
3387
+ typename ParamGenerator<T5>::iterator current5_;
3388
+ ParamType current_value_;
3389
+ }; // class CartesianProductGenerator5::Iterator
3390
+
3391
+ // No implementation - assignment is unsupported.
3392
+ void operator=(const CartesianProductGenerator5& other);
3393
+
3394
+ const ParamGenerator<T1> g1_;
3395
+ const ParamGenerator<T2> g2_;
3396
+ const ParamGenerator<T3> g3_;
3397
+ const ParamGenerator<T4> g4_;
3398
+ const ParamGenerator<T5> g5_;
3399
+ }; // class CartesianProductGenerator5
3400
+
3401
+
3402
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
3403
+ typename T6>
3404
+ class CartesianProductGenerator6
3405
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3406
+ T6> > {
3407
+ public:
3408
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3409
+
3410
+ CartesianProductGenerator6(const ParamGenerator<T1>& g1,
3411
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3412
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3413
+ const ParamGenerator<T6>& g6)
3414
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3415
+ virtual ~CartesianProductGenerator6() {}
3416
+
3417
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
3418
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3419
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3420
+ }
3421
+ virtual ParamIteratorInterface<ParamType>* End() const {
3422
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3423
+ g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3424
+ }
3425
+
3426
+ private:
3427
+ class Iterator : public ParamIteratorInterface<ParamType> {
3428
+ public:
3429
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
3430
+ const ParamGenerator<T1>& g1,
3431
+ const typename ParamGenerator<T1>::iterator& current1,
3432
+ const ParamGenerator<T2>& g2,
3433
+ const typename ParamGenerator<T2>::iterator& current2,
3434
+ const ParamGenerator<T3>& g3,
3435
+ const typename ParamGenerator<T3>::iterator& current3,
3436
+ const ParamGenerator<T4>& g4,
3437
+ const typename ParamGenerator<T4>::iterator& current4,
3438
+ const ParamGenerator<T5>& g5,
3439
+ const typename ParamGenerator<T5>::iterator& current5,
3440
+ const ParamGenerator<T6>& g6,
3441
+ const typename ParamGenerator<T6>::iterator& current6)
3442
+ : base_(base),
3443
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3444
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3445
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3446
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3447
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3448
+ begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
3449
+ ComputeCurrentValue();
3450
+ }
3451
+ virtual ~Iterator() {}
3452
+
3453
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3454
+ return base_;
3455
+ }
3456
+ // Advance should not be called on beyond-of-range iterators
3457
+ // so no component iterators must be beyond end of range, either.
3458
+ virtual void Advance() {
3459
+ assert(!AtEnd());
3460
+ ++current6_;
3461
+ if (current6_ == end6_) {
3462
+ current6_ = begin6_;
3463
+ ++current5_;
3464
+ }
3465
+ if (current5_ == end5_) {
3466
+ current5_ = begin5_;
3467
+ ++current4_;
3468
+ }
3469
+ if (current4_ == end4_) {
3470
+ current4_ = begin4_;
3471
+ ++current3_;
3472
+ }
3473
+ if (current3_ == end3_) {
3474
+ current3_ = begin3_;
3475
+ ++current2_;
3476
+ }
3477
+ if (current2_ == end2_) {
3478
+ current2_ = begin2_;
3479
+ ++current1_;
3480
+ }
3481
+ ComputeCurrentValue();
3482
+ }
3483
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3484
+ return new Iterator(*this);
3485
+ }
3486
+ virtual const ParamType* Current() const { return &current_value_; }
3487
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3488
+ // Having the same base generator guarantees that the other
3489
+ // iterator is of the same type and we can downcast.
3490
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3491
+ << "The program attempted to compare iterators "
3492
+ << "from different generators." << std::endl;
3493
+ const Iterator* typed_other =
3494
+ CheckedDowncastToActualType<const Iterator>(&other);
3495
+ // We must report iterators equal if they both point beyond their
3496
+ // respective ranges. That can happen in a variety of fashions,
3497
+ // so we have to consult AtEnd().
3498
+ return (AtEnd() && typed_other->AtEnd()) ||
3499
+ (
3500
+ current1_ == typed_other->current1_ &&
3501
+ current2_ == typed_other->current2_ &&
3502
+ current3_ == typed_other->current3_ &&
3503
+ current4_ == typed_other->current4_ &&
3504
+ current5_ == typed_other->current5_ &&
3505
+ current6_ == typed_other->current6_);
3506
+ }
3507
+
3508
+ private:
3509
+ Iterator(const Iterator& other)
3510
+ : base_(other.base_),
3511
+ begin1_(other.begin1_),
3512
+ end1_(other.end1_),
3513
+ current1_(other.current1_),
3514
+ begin2_(other.begin2_),
3515
+ end2_(other.end2_),
3516
+ current2_(other.current2_),
3517
+ begin3_(other.begin3_),
3518
+ end3_(other.end3_),
3519
+ current3_(other.current3_),
3520
+ begin4_(other.begin4_),
3521
+ end4_(other.end4_),
3522
+ current4_(other.current4_),
3523
+ begin5_(other.begin5_),
3524
+ end5_(other.end5_),
3525
+ current5_(other.current5_),
3526
+ begin6_(other.begin6_),
3527
+ end6_(other.end6_),
3528
+ current6_(other.current6_) {
3529
+ ComputeCurrentValue();
3530
+ }
3531
+
3532
+ void ComputeCurrentValue() {
3533
+ if (!AtEnd())
3534
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
3535
+ *current4_, *current5_, *current6_);
3536
+ }
3537
+ bool AtEnd() const {
3538
+ // We must report iterator past the end of the range when either of the
3539
+ // component iterators has reached the end of its range.
3540
+ return
3541
+ current1_ == end1_ ||
3542
+ current2_ == end2_ ||
3543
+ current3_ == end3_ ||
3544
+ current4_ == end4_ ||
3545
+ current5_ == end5_ ||
3546
+ current6_ == end6_;
3547
+ }
3548
+
3549
+ // No implementation - assignment is unsupported.
3550
+ void operator=(const Iterator& other);
3551
+
3552
+ const ParamGeneratorInterface<ParamType>* const base_;
3553
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3554
+ // current[i]_ is the actual traversing iterator.
3555
+ const typename ParamGenerator<T1>::iterator begin1_;
3556
+ const typename ParamGenerator<T1>::iterator end1_;
3557
+ typename ParamGenerator<T1>::iterator current1_;
3558
+ const typename ParamGenerator<T2>::iterator begin2_;
3559
+ const typename ParamGenerator<T2>::iterator end2_;
3560
+ typename ParamGenerator<T2>::iterator current2_;
3561
+ const typename ParamGenerator<T3>::iterator begin3_;
3562
+ const typename ParamGenerator<T3>::iterator end3_;
3563
+ typename ParamGenerator<T3>::iterator current3_;
3564
+ const typename ParamGenerator<T4>::iterator begin4_;
3565
+ const typename ParamGenerator<T4>::iterator end4_;
3566
+ typename ParamGenerator<T4>::iterator current4_;
3567
+ const typename ParamGenerator<T5>::iterator begin5_;
3568
+ const typename ParamGenerator<T5>::iterator end5_;
3569
+ typename ParamGenerator<T5>::iterator current5_;
3570
+ const typename ParamGenerator<T6>::iterator begin6_;
3571
+ const typename ParamGenerator<T6>::iterator end6_;
3572
+ typename ParamGenerator<T6>::iterator current6_;
3573
+ ParamType current_value_;
3574
+ }; // class CartesianProductGenerator6::Iterator
3575
+
3576
+ // No implementation - assignment is unsupported.
3577
+ void operator=(const CartesianProductGenerator6& other);
3578
+
3579
+ const ParamGenerator<T1> g1_;
3580
+ const ParamGenerator<T2> g2_;
3581
+ const ParamGenerator<T3> g3_;
3582
+ const ParamGenerator<T4> g4_;
3583
+ const ParamGenerator<T5> g5_;
3584
+ const ParamGenerator<T6> g6_;
3585
+ }; // class CartesianProductGenerator6
3586
+
3587
+
3588
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
3589
+ typename T6, typename T7>
3590
+ class CartesianProductGenerator7
3591
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3592
+ T7> > {
3593
+ public:
3594
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3595
+
3596
+ CartesianProductGenerator7(const ParamGenerator<T1>& g1,
3597
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3598
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3599
+ const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
3600
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3601
+ virtual ~CartesianProductGenerator7() {}
3602
+
3603
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
3604
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3605
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3606
+ g7_.begin());
3607
+ }
3608
+ virtual ParamIteratorInterface<ParamType>* End() const {
3609
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3610
+ g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3611
+ }
3612
+
3613
+ private:
3614
+ class Iterator : public ParamIteratorInterface<ParamType> {
3615
+ public:
3616
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
3617
+ const ParamGenerator<T1>& g1,
3618
+ const typename ParamGenerator<T1>::iterator& current1,
3619
+ const ParamGenerator<T2>& g2,
3620
+ const typename ParamGenerator<T2>::iterator& current2,
3621
+ const ParamGenerator<T3>& g3,
3622
+ const typename ParamGenerator<T3>::iterator& current3,
3623
+ const ParamGenerator<T4>& g4,
3624
+ const typename ParamGenerator<T4>::iterator& current4,
3625
+ const ParamGenerator<T5>& g5,
3626
+ const typename ParamGenerator<T5>::iterator& current5,
3627
+ const ParamGenerator<T6>& g6,
3628
+ const typename ParamGenerator<T6>::iterator& current6,
3629
+ const ParamGenerator<T7>& g7,
3630
+ const typename ParamGenerator<T7>::iterator& current7)
3631
+ : base_(base),
3632
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3633
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3634
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3635
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3636
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3637
+ begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3638
+ begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
3639
+ ComputeCurrentValue();
3640
+ }
3641
+ virtual ~Iterator() {}
3642
+
3643
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3644
+ return base_;
3645
+ }
3646
+ // Advance should not be called on beyond-of-range iterators
3647
+ // so no component iterators must be beyond end of range, either.
3648
+ virtual void Advance() {
3649
+ assert(!AtEnd());
3650
+ ++current7_;
3651
+ if (current7_ == end7_) {
3652
+ current7_ = begin7_;
3653
+ ++current6_;
3654
+ }
3655
+ if (current6_ == end6_) {
3656
+ current6_ = begin6_;
3657
+ ++current5_;
3658
+ }
3659
+ if (current5_ == end5_) {
3660
+ current5_ = begin5_;
3661
+ ++current4_;
3662
+ }
3663
+ if (current4_ == end4_) {
3664
+ current4_ = begin4_;
3665
+ ++current3_;
3666
+ }
3667
+ if (current3_ == end3_) {
3668
+ current3_ = begin3_;
3669
+ ++current2_;
3670
+ }
3671
+ if (current2_ == end2_) {
3672
+ current2_ = begin2_;
3673
+ ++current1_;
3674
+ }
3675
+ ComputeCurrentValue();
3676
+ }
3677
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3678
+ return new Iterator(*this);
3679
+ }
3680
+ virtual const ParamType* Current() const { return &current_value_; }
3681
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3682
+ // Having the same base generator guarantees that the other
3683
+ // iterator is of the same type and we can downcast.
3684
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3685
+ << "The program attempted to compare iterators "
3686
+ << "from different generators." << std::endl;
3687
+ const Iterator* typed_other =
3688
+ CheckedDowncastToActualType<const Iterator>(&other);
3689
+ // We must report iterators equal if they both point beyond their
3690
+ // respective ranges. That can happen in a variety of fashions,
3691
+ // so we have to consult AtEnd().
3692
+ return (AtEnd() && typed_other->AtEnd()) ||
3693
+ (
3694
+ current1_ == typed_other->current1_ &&
3695
+ current2_ == typed_other->current2_ &&
3696
+ current3_ == typed_other->current3_ &&
3697
+ current4_ == typed_other->current4_ &&
3698
+ current5_ == typed_other->current5_ &&
3699
+ current6_ == typed_other->current6_ &&
3700
+ current7_ == typed_other->current7_);
3701
+ }
3702
+
3703
+ private:
3704
+ Iterator(const Iterator& other)
3705
+ : base_(other.base_),
3706
+ begin1_(other.begin1_),
3707
+ end1_(other.end1_),
3708
+ current1_(other.current1_),
3709
+ begin2_(other.begin2_),
3710
+ end2_(other.end2_),
3711
+ current2_(other.current2_),
3712
+ begin3_(other.begin3_),
3713
+ end3_(other.end3_),
3714
+ current3_(other.current3_),
3715
+ begin4_(other.begin4_),
3716
+ end4_(other.end4_),
3717
+ current4_(other.current4_),
3718
+ begin5_(other.begin5_),
3719
+ end5_(other.end5_),
3720
+ current5_(other.current5_),
3721
+ begin6_(other.begin6_),
3722
+ end6_(other.end6_),
3723
+ current6_(other.current6_),
3724
+ begin7_(other.begin7_),
3725
+ end7_(other.end7_),
3726
+ current7_(other.current7_) {
3727
+ ComputeCurrentValue();
3728
+ }
3729
+
3730
+ void ComputeCurrentValue() {
3731
+ if (!AtEnd())
3732
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
3733
+ *current4_, *current5_, *current6_, *current7_);
3734
+ }
3735
+ bool AtEnd() const {
3736
+ // We must report iterator past the end of the range when either of the
3737
+ // component iterators has reached the end of its range.
3738
+ return
3739
+ current1_ == end1_ ||
3740
+ current2_ == end2_ ||
3741
+ current3_ == end3_ ||
3742
+ current4_ == end4_ ||
3743
+ current5_ == end5_ ||
3744
+ current6_ == end6_ ||
3745
+ current7_ == end7_;
3746
+ }
3747
+
3748
+ // No implementation - assignment is unsupported.
3749
+ void operator=(const Iterator& other);
3750
+
3751
+ const ParamGeneratorInterface<ParamType>* const base_;
3752
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3753
+ // current[i]_ is the actual traversing iterator.
3754
+ const typename ParamGenerator<T1>::iterator begin1_;
3755
+ const typename ParamGenerator<T1>::iterator end1_;
3756
+ typename ParamGenerator<T1>::iterator current1_;
3757
+ const typename ParamGenerator<T2>::iterator begin2_;
3758
+ const typename ParamGenerator<T2>::iterator end2_;
3759
+ typename ParamGenerator<T2>::iterator current2_;
3760
+ const typename ParamGenerator<T3>::iterator begin3_;
3761
+ const typename ParamGenerator<T3>::iterator end3_;
3762
+ typename ParamGenerator<T3>::iterator current3_;
3763
+ const typename ParamGenerator<T4>::iterator begin4_;
3764
+ const typename ParamGenerator<T4>::iterator end4_;
3765
+ typename ParamGenerator<T4>::iterator current4_;
3766
+ const typename ParamGenerator<T5>::iterator begin5_;
3767
+ const typename ParamGenerator<T5>::iterator end5_;
3768
+ typename ParamGenerator<T5>::iterator current5_;
3769
+ const typename ParamGenerator<T6>::iterator begin6_;
3770
+ const typename ParamGenerator<T6>::iterator end6_;
3771
+ typename ParamGenerator<T6>::iterator current6_;
3772
+ const typename ParamGenerator<T7>::iterator begin7_;
3773
+ const typename ParamGenerator<T7>::iterator end7_;
3774
+ typename ParamGenerator<T7>::iterator current7_;
3775
+ ParamType current_value_;
3776
+ }; // class CartesianProductGenerator7::Iterator
3777
+
3778
+ // No implementation - assignment is unsupported.
3779
+ void operator=(const CartesianProductGenerator7& other);
3780
+
3781
+ const ParamGenerator<T1> g1_;
3782
+ const ParamGenerator<T2> g2_;
3783
+ const ParamGenerator<T3> g3_;
3784
+ const ParamGenerator<T4> g4_;
3785
+ const ParamGenerator<T5> g5_;
3786
+ const ParamGenerator<T6> g6_;
3787
+ const ParamGenerator<T7> g7_;
3788
+ }; // class CartesianProductGenerator7
3789
+
3790
+
3791
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
3792
+ typename T6, typename T7, typename T8>
3793
+ class CartesianProductGenerator8
3794
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3795
+ T7, T8> > {
3796
+ public:
3797
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
3798
+
3799
+ CartesianProductGenerator8(const ParamGenerator<T1>& g1,
3800
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3801
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3802
+ const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
3803
+ const ParamGenerator<T8>& g8)
3804
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
3805
+ g8_(g8) {}
3806
+ virtual ~CartesianProductGenerator8() {}
3807
+
3808
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
3809
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3810
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3811
+ g7_.begin(), g8_, g8_.begin());
3812
+ }
3813
+ virtual ParamIteratorInterface<ParamType>* End() const {
3814
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3815
+ g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
3816
+ g8_.end());
3817
+ }
3818
+
3819
+ private:
3820
+ class Iterator : public ParamIteratorInterface<ParamType> {
3821
+ public:
3822
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
3823
+ const ParamGenerator<T1>& g1,
3824
+ const typename ParamGenerator<T1>::iterator& current1,
3825
+ const ParamGenerator<T2>& g2,
3826
+ const typename ParamGenerator<T2>::iterator& current2,
3827
+ const ParamGenerator<T3>& g3,
3828
+ const typename ParamGenerator<T3>::iterator& current3,
3829
+ const ParamGenerator<T4>& g4,
3830
+ const typename ParamGenerator<T4>::iterator& current4,
3831
+ const ParamGenerator<T5>& g5,
3832
+ const typename ParamGenerator<T5>::iterator& current5,
3833
+ const ParamGenerator<T6>& g6,
3834
+ const typename ParamGenerator<T6>::iterator& current6,
3835
+ const ParamGenerator<T7>& g7,
3836
+ const typename ParamGenerator<T7>::iterator& current7,
3837
+ const ParamGenerator<T8>& g8,
3838
+ const typename ParamGenerator<T8>::iterator& current8)
3839
+ : base_(base),
3840
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3841
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3842
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3843
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3844
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3845
+ begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3846
+ begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
3847
+ begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
3848
+ ComputeCurrentValue();
3849
+ }
3850
+ virtual ~Iterator() {}
3851
+
3852
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3853
+ return base_;
3854
+ }
3855
+ // Advance should not be called on beyond-of-range iterators
3856
+ // so no component iterators must be beyond end of range, either.
3857
+ virtual void Advance() {
3858
+ assert(!AtEnd());
3859
+ ++current8_;
3860
+ if (current8_ == end8_) {
3861
+ current8_ = begin8_;
3862
+ ++current7_;
3863
+ }
3864
+ if (current7_ == end7_) {
3865
+ current7_ = begin7_;
3866
+ ++current6_;
3867
+ }
3868
+ if (current6_ == end6_) {
3869
+ current6_ = begin6_;
3870
+ ++current5_;
3871
+ }
3872
+ if (current5_ == end5_) {
3873
+ current5_ = begin5_;
3874
+ ++current4_;
3875
+ }
3876
+ if (current4_ == end4_) {
3877
+ current4_ = begin4_;
3878
+ ++current3_;
3879
+ }
3880
+ if (current3_ == end3_) {
3881
+ current3_ = begin3_;
3882
+ ++current2_;
3883
+ }
3884
+ if (current2_ == end2_) {
3885
+ current2_ = begin2_;
3886
+ ++current1_;
3887
+ }
3888
+ ComputeCurrentValue();
3889
+ }
3890
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
3891
+ return new Iterator(*this);
3892
+ }
3893
+ virtual const ParamType* Current() const { return &current_value_; }
3894
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3895
+ // Having the same base generator guarantees that the other
3896
+ // iterator is of the same type and we can downcast.
3897
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3898
+ << "The program attempted to compare iterators "
3899
+ << "from different generators." << std::endl;
3900
+ const Iterator* typed_other =
3901
+ CheckedDowncastToActualType<const Iterator>(&other);
3902
+ // We must report iterators equal if they both point beyond their
3903
+ // respective ranges. That can happen in a variety of fashions,
3904
+ // so we have to consult AtEnd().
3905
+ return (AtEnd() && typed_other->AtEnd()) ||
3906
+ (
3907
+ current1_ == typed_other->current1_ &&
3908
+ current2_ == typed_other->current2_ &&
3909
+ current3_ == typed_other->current3_ &&
3910
+ current4_ == typed_other->current4_ &&
3911
+ current5_ == typed_other->current5_ &&
3912
+ current6_ == typed_other->current6_ &&
3913
+ current7_ == typed_other->current7_ &&
3914
+ current8_ == typed_other->current8_);
3915
+ }
3916
+
3917
+ private:
3918
+ Iterator(const Iterator& other)
3919
+ : base_(other.base_),
3920
+ begin1_(other.begin1_),
3921
+ end1_(other.end1_),
3922
+ current1_(other.current1_),
3923
+ begin2_(other.begin2_),
3924
+ end2_(other.end2_),
3925
+ current2_(other.current2_),
3926
+ begin3_(other.begin3_),
3927
+ end3_(other.end3_),
3928
+ current3_(other.current3_),
3929
+ begin4_(other.begin4_),
3930
+ end4_(other.end4_),
3931
+ current4_(other.current4_),
3932
+ begin5_(other.begin5_),
3933
+ end5_(other.end5_),
3934
+ current5_(other.current5_),
3935
+ begin6_(other.begin6_),
3936
+ end6_(other.end6_),
3937
+ current6_(other.current6_),
3938
+ begin7_(other.begin7_),
3939
+ end7_(other.end7_),
3940
+ current7_(other.current7_),
3941
+ begin8_(other.begin8_),
3942
+ end8_(other.end8_),
3943
+ current8_(other.current8_) {
3944
+ ComputeCurrentValue();
3945
+ }
3946
+
3947
+ void ComputeCurrentValue() {
3948
+ if (!AtEnd())
3949
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
3950
+ *current4_, *current5_, *current6_, *current7_, *current8_);
3951
+ }
3952
+ bool AtEnd() const {
3953
+ // We must report iterator past the end of the range when either of the
3954
+ // component iterators has reached the end of its range.
3955
+ return
3956
+ current1_ == end1_ ||
3957
+ current2_ == end2_ ||
3958
+ current3_ == end3_ ||
3959
+ current4_ == end4_ ||
3960
+ current5_ == end5_ ||
3961
+ current6_ == end6_ ||
3962
+ current7_ == end7_ ||
3963
+ current8_ == end8_;
3964
+ }
3965
+
3966
+ // No implementation - assignment is unsupported.
3967
+ void operator=(const Iterator& other);
3968
+
3969
+ const ParamGeneratorInterface<ParamType>* const base_;
3970
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3971
+ // current[i]_ is the actual traversing iterator.
3972
+ const typename ParamGenerator<T1>::iterator begin1_;
3973
+ const typename ParamGenerator<T1>::iterator end1_;
3974
+ typename ParamGenerator<T1>::iterator current1_;
3975
+ const typename ParamGenerator<T2>::iterator begin2_;
3976
+ const typename ParamGenerator<T2>::iterator end2_;
3977
+ typename ParamGenerator<T2>::iterator current2_;
3978
+ const typename ParamGenerator<T3>::iterator begin3_;
3979
+ const typename ParamGenerator<T3>::iterator end3_;
3980
+ typename ParamGenerator<T3>::iterator current3_;
3981
+ const typename ParamGenerator<T4>::iterator begin4_;
3982
+ const typename ParamGenerator<T4>::iterator end4_;
3983
+ typename ParamGenerator<T4>::iterator current4_;
3984
+ const typename ParamGenerator<T5>::iterator begin5_;
3985
+ const typename ParamGenerator<T5>::iterator end5_;
3986
+ typename ParamGenerator<T5>::iterator current5_;
3987
+ const typename ParamGenerator<T6>::iterator begin6_;
3988
+ const typename ParamGenerator<T6>::iterator end6_;
3989
+ typename ParamGenerator<T6>::iterator current6_;
3990
+ const typename ParamGenerator<T7>::iterator begin7_;
3991
+ const typename ParamGenerator<T7>::iterator end7_;
3992
+ typename ParamGenerator<T7>::iterator current7_;
3993
+ const typename ParamGenerator<T8>::iterator begin8_;
3994
+ const typename ParamGenerator<T8>::iterator end8_;
3995
+ typename ParamGenerator<T8>::iterator current8_;
3996
+ ParamType current_value_;
3997
+ }; // class CartesianProductGenerator8::Iterator
3998
+
3999
+ // No implementation - assignment is unsupported.
4000
+ void operator=(const CartesianProductGenerator8& other);
4001
+
4002
+ const ParamGenerator<T1> g1_;
4003
+ const ParamGenerator<T2> g2_;
4004
+ const ParamGenerator<T3> g3_;
4005
+ const ParamGenerator<T4> g4_;
4006
+ const ParamGenerator<T5> g5_;
4007
+ const ParamGenerator<T6> g6_;
4008
+ const ParamGenerator<T7> g7_;
4009
+ const ParamGenerator<T8> g8_;
4010
+ }; // class CartesianProductGenerator8
4011
+
4012
+
4013
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4014
+ typename T6, typename T7, typename T8, typename T9>
4015
+ class CartesianProductGenerator9
4016
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4017
+ T7, T8, T9> > {
4018
+ public:
4019
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4020
+
4021
+ CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4022
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4023
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4024
+ const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4025
+ const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4026
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4027
+ g9_(g9) {}
4028
+ virtual ~CartesianProductGenerator9() {}
4029
+
4030
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
4031
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4032
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4033
+ g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4034
+ }
4035
+ virtual ParamIteratorInterface<ParamType>* End() const {
4036
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4037
+ g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4038
+ g8_.end(), g9_, g9_.end());
4039
+ }
4040
+
4041
+ private:
4042
+ class Iterator : public ParamIteratorInterface<ParamType> {
4043
+ public:
4044
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
4045
+ const ParamGenerator<T1>& g1,
4046
+ const typename ParamGenerator<T1>::iterator& current1,
4047
+ const ParamGenerator<T2>& g2,
4048
+ const typename ParamGenerator<T2>::iterator& current2,
4049
+ const ParamGenerator<T3>& g3,
4050
+ const typename ParamGenerator<T3>::iterator& current3,
4051
+ const ParamGenerator<T4>& g4,
4052
+ const typename ParamGenerator<T4>::iterator& current4,
4053
+ const ParamGenerator<T5>& g5,
4054
+ const typename ParamGenerator<T5>::iterator& current5,
4055
+ const ParamGenerator<T6>& g6,
4056
+ const typename ParamGenerator<T6>::iterator& current6,
4057
+ const ParamGenerator<T7>& g7,
4058
+ const typename ParamGenerator<T7>::iterator& current7,
4059
+ const ParamGenerator<T8>& g8,
4060
+ const typename ParamGenerator<T8>::iterator& current8,
4061
+ const ParamGenerator<T9>& g9,
4062
+ const typename ParamGenerator<T9>::iterator& current9)
4063
+ : base_(base),
4064
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4065
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4066
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4067
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4068
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4069
+ begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4070
+ begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4071
+ begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4072
+ begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4073
+ ComputeCurrentValue();
4074
+ }
4075
+ virtual ~Iterator() {}
4076
+
4077
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4078
+ return base_;
4079
+ }
4080
+ // Advance should not be called on beyond-of-range iterators
4081
+ // so no component iterators must be beyond end of range, either.
4082
+ virtual void Advance() {
4083
+ assert(!AtEnd());
4084
+ ++current9_;
4085
+ if (current9_ == end9_) {
4086
+ current9_ = begin9_;
4087
+ ++current8_;
4088
+ }
4089
+ if (current8_ == end8_) {
4090
+ current8_ = begin8_;
4091
+ ++current7_;
4092
+ }
4093
+ if (current7_ == end7_) {
4094
+ current7_ = begin7_;
4095
+ ++current6_;
4096
+ }
4097
+ if (current6_ == end6_) {
4098
+ current6_ = begin6_;
4099
+ ++current5_;
4100
+ }
4101
+ if (current5_ == end5_) {
4102
+ current5_ = begin5_;
4103
+ ++current4_;
4104
+ }
4105
+ if (current4_ == end4_) {
4106
+ current4_ = begin4_;
4107
+ ++current3_;
4108
+ }
4109
+ if (current3_ == end3_) {
4110
+ current3_ = begin3_;
4111
+ ++current2_;
4112
+ }
4113
+ if (current2_ == end2_) {
4114
+ current2_ = begin2_;
4115
+ ++current1_;
4116
+ }
4117
+ ComputeCurrentValue();
4118
+ }
4119
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
4120
+ return new Iterator(*this);
4121
+ }
4122
+ virtual const ParamType* Current() const { return &current_value_; }
4123
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4124
+ // Having the same base generator guarantees that the other
4125
+ // iterator is of the same type and we can downcast.
4126
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4127
+ << "The program attempted to compare iterators "
4128
+ << "from different generators." << std::endl;
4129
+ const Iterator* typed_other =
4130
+ CheckedDowncastToActualType<const Iterator>(&other);
4131
+ // We must report iterators equal if they both point beyond their
4132
+ // respective ranges. That can happen in a variety of fashions,
4133
+ // so we have to consult AtEnd().
4134
+ return (AtEnd() && typed_other->AtEnd()) ||
4135
+ (
4136
+ current1_ == typed_other->current1_ &&
4137
+ current2_ == typed_other->current2_ &&
4138
+ current3_ == typed_other->current3_ &&
4139
+ current4_ == typed_other->current4_ &&
4140
+ current5_ == typed_other->current5_ &&
4141
+ current6_ == typed_other->current6_ &&
4142
+ current7_ == typed_other->current7_ &&
4143
+ current8_ == typed_other->current8_ &&
4144
+ current9_ == typed_other->current9_);
4145
+ }
4146
+
4147
+ private:
4148
+ Iterator(const Iterator& other)
4149
+ : base_(other.base_),
4150
+ begin1_(other.begin1_),
4151
+ end1_(other.end1_),
4152
+ current1_(other.current1_),
4153
+ begin2_(other.begin2_),
4154
+ end2_(other.end2_),
4155
+ current2_(other.current2_),
4156
+ begin3_(other.begin3_),
4157
+ end3_(other.end3_),
4158
+ current3_(other.current3_),
4159
+ begin4_(other.begin4_),
4160
+ end4_(other.end4_),
4161
+ current4_(other.current4_),
4162
+ begin5_(other.begin5_),
4163
+ end5_(other.end5_),
4164
+ current5_(other.current5_),
4165
+ begin6_(other.begin6_),
4166
+ end6_(other.end6_),
4167
+ current6_(other.current6_),
4168
+ begin7_(other.begin7_),
4169
+ end7_(other.end7_),
4170
+ current7_(other.current7_),
4171
+ begin8_(other.begin8_),
4172
+ end8_(other.end8_),
4173
+ current8_(other.current8_),
4174
+ begin9_(other.begin9_),
4175
+ end9_(other.end9_),
4176
+ current9_(other.current9_) {
4177
+ ComputeCurrentValue();
4178
+ }
4179
+
4180
+ void ComputeCurrentValue() {
4181
+ if (!AtEnd())
4182
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
4183
+ *current4_, *current5_, *current6_, *current7_, *current8_,
4184
+ *current9_);
4185
+ }
4186
+ bool AtEnd() const {
4187
+ // We must report iterator past the end of the range when either of the
4188
+ // component iterators has reached the end of its range.
4189
+ return
4190
+ current1_ == end1_ ||
4191
+ current2_ == end2_ ||
4192
+ current3_ == end3_ ||
4193
+ current4_ == end4_ ||
4194
+ current5_ == end5_ ||
4195
+ current6_ == end6_ ||
4196
+ current7_ == end7_ ||
4197
+ current8_ == end8_ ||
4198
+ current9_ == end9_;
4199
+ }
4200
+
4201
+ // No implementation - assignment is unsupported.
4202
+ void operator=(const Iterator& other);
4203
+
4204
+ const ParamGeneratorInterface<ParamType>* const base_;
4205
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4206
+ // current[i]_ is the actual traversing iterator.
4207
+ const typename ParamGenerator<T1>::iterator begin1_;
4208
+ const typename ParamGenerator<T1>::iterator end1_;
4209
+ typename ParamGenerator<T1>::iterator current1_;
4210
+ const typename ParamGenerator<T2>::iterator begin2_;
4211
+ const typename ParamGenerator<T2>::iterator end2_;
4212
+ typename ParamGenerator<T2>::iterator current2_;
4213
+ const typename ParamGenerator<T3>::iterator begin3_;
4214
+ const typename ParamGenerator<T3>::iterator end3_;
4215
+ typename ParamGenerator<T3>::iterator current3_;
4216
+ const typename ParamGenerator<T4>::iterator begin4_;
4217
+ const typename ParamGenerator<T4>::iterator end4_;
4218
+ typename ParamGenerator<T4>::iterator current4_;
4219
+ const typename ParamGenerator<T5>::iterator begin5_;
4220
+ const typename ParamGenerator<T5>::iterator end5_;
4221
+ typename ParamGenerator<T5>::iterator current5_;
4222
+ const typename ParamGenerator<T6>::iterator begin6_;
4223
+ const typename ParamGenerator<T6>::iterator end6_;
4224
+ typename ParamGenerator<T6>::iterator current6_;
4225
+ const typename ParamGenerator<T7>::iterator begin7_;
4226
+ const typename ParamGenerator<T7>::iterator end7_;
4227
+ typename ParamGenerator<T7>::iterator current7_;
4228
+ const typename ParamGenerator<T8>::iterator begin8_;
4229
+ const typename ParamGenerator<T8>::iterator end8_;
4230
+ typename ParamGenerator<T8>::iterator current8_;
4231
+ const typename ParamGenerator<T9>::iterator begin9_;
4232
+ const typename ParamGenerator<T9>::iterator end9_;
4233
+ typename ParamGenerator<T9>::iterator current9_;
4234
+ ParamType current_value_;
4235
+ }; // class CartesianProductGenerator9::Iterator
4236
+
4237
+ // No implementation - assignment is unsupported.
4238
+ void operator=(const CartesianProductGenerator9& other);
4239
+
4240
+ const ParamGenerator<T1> g1_;
4241
+ const ParamGenerator<T2> g2_;
4242
+ const ParamGenerator<T3> g3_;
4243
+ const ParamGenerator<T4> g4_;
4244
+ const ParamGenerator<T5> g5_;
4245
+ const ParamGenerator<T6> g6_;
4246
+ const ParamGenerator<T7> g7_;
4247
+ const ParamGenerator<T8> g8_;
4248
+ const ParamGenerator<T9> g9_;
4249
+ }; // class CartesianProductGenerator9
4250
+
4251
+
4252
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4253
+ typename T6, typename T7, typename T8, typename T9, typename T10>
4254
+ class CartesianProductGenerator10
4255
+ : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4256
+ T7, T8, T9, T10> > {
4257
+ public:
4258
+ typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4259
+
4260
+ CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4261
+ const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4262
+ const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4263
+ const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4264
+ const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4265
+ const ParamGenerator<T10>& g10)
4266
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4267
+ g9_(g9), g10_(g10) {}
4268
+ virtual ~CartesianProductGenerator10() {}
4269
+
4270
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
4271
+ return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4272
+ g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4273
+ g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4274
+ }
4275
+ virtual ParamIteratorInterface<ParamType>* End() const {
4276
+ return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4277
+ g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4278
+ g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4279
+ }
4280
+
4281
+ private:
4282
+ class Iterator : public ParamIteratorInterface<ParamType> {
4283
+ public:
4284
+ Iterator(const ParamGeneratorInterface<ParamType>* base,
4285
+ const ParamGenerator<T1>& g1,
4286
+ const typename ParamGenerator<T1>::iterator& current1,
4287
+ const ParamGenerator<T2>& g2,
4288
+ const typename ParamGenerator<T2>::iterator& current2,
4289
+ const ParamGenerator<T3>& g3,
4290
+ const typename ParamGenerator<T3>::iterator& current3,
4291
+ const ParamGenerator<T4>& g4,
4292
+ const typename ParamGenerator<T4>::iterator& current4,
4293
+ const ParamGenerator<T5>& g5,
4294
+ const typename ParamGenerator<T5>::iterator& current5,
4295
+ const ParamGenerator<T6>& g6,
4296
+ const typename ParamGenerator<T6>::iterator& current6,
4297
+ const ParamGenerator<T7>& g7,
4298
+ const typename ParamGenerator<T7>::iterator& current7,
4299
+ const ParamGenerator<T8>& g8,
4300
+ const typename ParamGenerator<T8>::iterator& current8,
4301
+ const ParamGenerator<T9>& g9,
4302
+ const typename ParamGenerator<T9>::iterator& current9,
4303
+ const ParamGenerator<T10>& g10,
4304
+ const typename ParamGenerator<T10>::iterator& current10)
4305
+ : base_(base),
4306
+ begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4307
+ begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4308
+ begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4309
+ begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4310
+ begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4311
+ begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4312
+ begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4313
+ begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4314
+ begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4315
+ begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
4316
+ ComputeCurrentValue();
4317
+ }
4318
+ virtual ~Iterator() {}
4319
+
4320
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4321
+ return base_;
4322
+ }
4323
+ // Advance should not be called on beyond-of-range iterators
4324
+ // so no component iterators must be beyond end of range, either.
4325
+ virtual void Advance() {
4326
+ assert(!AtEnd());
4327
+ ++current10_;
4328
+ if (current10_ == end10_) {
4329
+ current10_ = begin10_;
4330
+ ++current9_;
4331
+ }
4332
+ if (current9_ == end9_) {
4333
+ current9_ = begin9_;
4334
+ ++current8_;
4335
+ }
4336
+ if (current8_ == end8_) {
4337
+ current8_ = begin8_;
4338
+ ++current7_;
4339
+ }
4340
+ if (current7_ == end7_) {
4341
+ current7_ = begin7_;
4342
+ ++current6_;
4343
+ }
4344
+ if (current6_ == end6_) {
4345
+ current6_ = begin6_;
4346
+ ++current5_;
4347
+ }
4348
+ if (current5_ == end5_) {
4349
+ current5_ = begin5_;
4350
+ ++current4_;
4351
+ }
4352
+ if (current4_ == end4_) {
4353
+ current4_ = begin4_;
4354
+ ++current3_;
4355
+ }
4356
+ if (current3_ == end3_) {
4357
+ current3_ = begin3_;
4358
+ ++current2_;
4359
+ }
4360
+ if (current2_ == end2_) {
4361
+ current2_ = begin2_;
4362
+ ++current1_;
4363
+ }
4364
+ ComputeCurrentValue();
4365
+ }
4366
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
4367
+ return new Iterator(*this);
4368
+ }
4369
+ virtual const ParamType* Current() const { return &current_value_; }
4370
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4371
+ // Having the same base generator guarantees that the other
4372
+ // iterator is of the same type and we can downcast.
4373
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4374
+ << "The program attempted to compare iterators "
4375
+ << "from different generators." << std::endl;
4376
+ const Iterator* typed_other =
4377
+ CheckedDowncastToActualType<const Iterator>(&other);
4378
+ // We must report iterators equal if they both point beyond their
4379
+ // respective ranges. That can happen in a variety of fashions,
4380
+ // so we have to consult AtEnd().
4381
+ return (AtEnd() && typed_other->AtEnd()) ||
4382
+ (
4383
+ current1_ == typed_other->current1_ &&
4384
+ current2_ == typed_other->current2_ &&
4385
+ current3_ == typed_other->current3_ &&
4386
+ current4_ == typed_other->current4_ &&
4387
+ current5_ == typed_other->current5_ &&
4388
+ current6_ == typed_other->current6_ &&
4389
+ current7_ == typed_other->current7_ &&
4390
+ current8_ == typed_other->current8_ &&
4391
+ current9_ == typed_other->current9_ &&
4392
+ current10_ == typed_other->current10_);
4393
+ }
4394
+
4395
+ private:
4396
+ Iterator(const Iterator& other)
4397
+ : base_(other.base_),
4398
+ begin1_(other.begin1_),
4399
+ end1_(other.end1_),
4400
+ current1_(other.current1_),
4401
+ begin2_(other.begin2_),
4402
+ end2_(other.end2_),
4403
+ current2_(other.current2_),
4404
+ begin3_(other.begin3_),
4405
+ end3_(other.end3_),
4406
+ current3_(other.current3_),
4407
+ begin4_(other.begin4_),
4408
+ end4_(other.end4_),
4409
+ current4_(other.current4_),
4410
+ begin5_(other.begin5_),
4411
+ end5_(other.end5_),
4412
+ current5_(other.current5_),
4413
+ begin6_(other.begin6_),
4414
+ end6_(other.end6_),
4415
+ current6_(other.current6_),
4416
+ begin7_(other.begin7_),
4417
+ end7_(other.end7_),
4418
+ current7_(other.current7_),
4419
+ begin8_(other.begin8_),
4420
+ end8_(other.end8_),
4421
+ current8_(other.current8_),
4422
+ begin9_(other.begin9_),
4423
+ end9_(other.end9_),
4424
+ current9_(other.current9_),
4425
+ begin10_(other.begin10_),
4426
+ end10_(other.end10_),
4427
+ current10_(other.current10_) {
4428
+ ComputeCurrentValue();
4429
+ }
4430
+
4431
+ void ComputeCurrentValue() {
4432
+ if (!AtEnd())
4433
+ current_value_ = ParamType(*current1_, *current2_, *current3_,
4434
+ *current4_, *current5_, *current6_, *current7_, *current8_,
4435
+ *current9_, *current10_);
4436
+ }
4437
+ bool AtEnd() const {
4438
+ // We must report iterator past the end of the range when either of the
4439
+ // component iterators has reached the end of its range.
4440
+ return
4441
+ current1_ == end1_ ||
4442
+ current2_ == end2_ ||
4443
+ current3_ == end3_ ||
4444
+ current4_ == end4_ ||
4445
+ current5_ == end5_ ||
4446
+ current6_ == end6_ ||
4447
+ current7_ == end7_ ||
4448
+ current8_ == end8_ ||
4449
+ current9_ == end9_ ||
4450
+ current10_ == end10_;
4451
+ }
4452
+
4453
+ // No implementation - assignment is unsupported.
4454
+ void operator=(const Iterator& other);
4455
+
4456
+ const ParamGeneratorInterface<ParamType>* const base_;
4457
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4458
+ // current[i]_ is the actual traversing iterator.
4459
+ const typename ParamGenerator<T1>::iterator begin1_;
4460
+ const typename ParamGenerator<T1>::iterator end1_;
4461
+ typename ParamGenerator<T1>::iterator current1_;
4462
+ const typename ParamGenerator<T2>::iterator begin2_;
4463
+ const typename ParamGenerator<T2>::iterator end2_;
4464
+ typename ParamGenerator<T2>::iterator current2_;
4465
+ const typename ParamGenerator<T3>::iterator begin3_;
4466
+ const typename ParamGenerator<T3>::iterator end3_;
4467
+ typename ParamGenerator<T3>::iterator current3_;
4468
+ const typename ParamGenerator<T4>::iterator begin4_;
4469
+ const typename ParamGenerator<T4>::iterator end4_;
4470
+ typename ParamGenerator<T4>::iterator current4_;
4471
+ const typename ParamGenerator<T5>::iterator begin5_;
4472
+ const typename ParamGenerator<T5>::iterator end5_;
4473
+ typename ParamGenerator<T5>::iterator current5_;
4474
+ const typename ParamGenerator<T6>::iterator begin6_;
4475
+ const typename ParamGenerator<T6>::iterator end6_;
4476
+ typename ParamGenerator<T6>::iterator current6_;
4477
+ const typename ParamGenerator<T7>::iterator begin7_;
4478
+ const typename ParamGenerator<T7>::iterator end7_;
4479
+ typename ParamGenerator<T7>::iterator current7_;
4480
+ const typename ParamGenerator<T8>::iterator begin8_;
4481
+ const typename ParamGenerator<T8>::iterator end8_;
4482
+ typename ParamGenerator<T8>::iterator current8_;
4483
+ const typename ParamGenerator<T9>::iterator begin9_;
4484
+ const typename ParamGenerator<T9>::iterator end9_;
4485
+ typename ParamGenerator<T9>::iterator current9_;
4486
+ const typename ParamGenerator<T10>::iterator begin10_;
4487
+ const typename ParamGenerator<T10>::iterator end10_;
4488
+ typename ParamGenerator<T10>::iterator current10_;
4489
+ ParamType current_value_;
4490
+ }; // class CartesianProductGenerator10::Iterator
4491
+
4492
+ // No implementation - assignment is unsupported.
4493
+ void operator=(const CartesianProductGenerator10& other);
4494
+
4495
+ const ParamGenerator<T1> g1_;
4496
+ const ParamGenerator<T2> g2_;
4497
+ const ParamGenerator<T3> g3_;
4498
+ const ParamGenerator<T4> g4_;
4499
+ const ParamGenerator<T5> g5_;
4500
+ const ParamGenerator<T6> g6_;
4501
+ const ParamGenerator<T7> g7_;
4502
+ const ParamGenerator<T8> g8_;
4503
+ const ParamGenerator<T9> g9_;
4504
+ const ParamGenerator<T10> g10_;
4505
+ }; // class CartesianProductGenerator10
4506
+
4507
+
4508
+ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
4509
+ //
4510
+ // Helper classes providing Combine() with polymorphic features. They allow
4511
+ // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
4512
+ // convertible to U.
4513
+ //
4514
+ template <class Generator1, class Generator2>
4515
+ class CartesianProductHolder2 {
4516
+ public:
4517
+ CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
4518
+ : g1_(g1), g2_(g2) {}
4519
+ template <typename T1, typename T2>
4520
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {
4521
+ return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
4522
+ new CartesianProductGenerator2<T1, T2>(
4523
+ static_cast<ParamGenerator<T1> >(g1_),
4524
+ static_cast<ParamGenerator<T2> >(g2_)));
4525
+ }
4526
+
4527
+ private:
4528
+ // No implementation - assignment is unsupported.
4529
+ void operator=(const CartesianProductHolder2& other);
4530
+
4531
+ const Generator1 g1_;
4532
+ const Generator2 g2_;
4533
+ }; // class CartesianProductHolder2
4534
+
4535
+ template <class Generator1, class Generator2, class Generator3>
4536
+ class CartesianProductHolder3 {
4537
+ public:
4538
+ CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
4539
+ const Generator3& g3)
4540
+ : g1_(g1), g2_(g2), g3_(g3) {}
4541
+ template <typename T1, typename T2, typename T3>
4542
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {
4543
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
4544
+ new CartesianProductGenerator3<T1, T2, T3>(
4545
+ static_cast<ParamGenerator<T1> >(g1_),
4546
+ static_cast<ParamGenerator<T2> >(g2_),
4547
+ static_cast<ParamGenerator<T3> >(g3_)));
4548
+ }
4549
+
4550
+ private:
4551
+ // No implementation - assignment is unsupported.
4552
+ void operator=(const CartesianProductHolder3& other);
4553
+
4554
+ const Generator1 g1_;
4555
+ const Generator2 g2_;
4556
+ const Generator3 g3_;
4557
+ }; // class CartesianProductHolder3
4558
+
4559
+ template <class Generator1, class Generator2, class Generator3,
4560
+ class Generator4>
4561
+ class CartesianProductHolder4 {
4562
+ public:
4563
+ CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
4564
+ const Generator3& g3, const Generator4& g4)
4565
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4566
+ template <typename T1, typename T2, typename T3, typename T4>
4567
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {
4568
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
4569
+ new CartesianProductGenerator4<T1, T2, T3, T4>(
4570
+ static_cast<ParamGenerator<T1> >(g1_),
4571
+ static_cast<ParamGenerator<T2> >(g2_),
4572
+ static_cast<ParamGenerator<T3> >(g3_),
4573
+ static_cast<ParamGenerator<T4> >(g4_)));
4574
+ }
4575
+
4576
+ private:
4577
+ // No implementation - assignment is unsupported.
4578
+ void operator=(const CartesianProductHolder4& other);
4579
+
4580
+ const Generator1 g1_;
4581
+ const Generator2 g2_;
4582
+ const Generator3 g3_;
4583
+ const Generator4 g4_;
4584
+ }; // class CartesianProductHolder4
4585
+
4586
+ template <class Generator1, class Generator2, class Generator3,
4587
+ class Generator4, class Generator5>
4588
+ class CartesianProductHolder5 {
4589
+ public:
4590
+ CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
4591
+ const Generator3& g3, const Generator4& g4, const Generator5& g5)
4592
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4593
+ template <typename T1, typename T2, typename T3, typename T4, typename T5>
4594
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {
4595
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
4596
+ new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4597
+ static_cast<ParamGenerator<T1> >(g1_),
4598
+ static_cast<ParamGenerator<T2> >(g2_),
4599
+ static_cast<ParamGenerator<T3> >(g3_),
4600
+ static_cast<ParamGenerator<T4> >(g4_),
4601
+ static_cast<ParamGenerator<T5> >(g5_)));
4602
+ }
4603
+
4604
+ private:
4605
+ // No implementation - assignment is unsupported.
4606
+ void operator=(const CartesianProductHolder5& other);
4607
+
4608
+ const Generator1 g1_;
4609
+ const Generator2 g2_;
4610
+ const Generator3 g3_;
4611
+ const Generator4 g4_;
4612
+ const Generator5 g5_;
4613
+ }; // class CartesianProductHolder5
4614
+
4615
+ template <class Generator1, class Generator2, class Generator3,
4616
+ class Generator4, class Generator5, class Generator6>
4617
+ class CartesianProductHolder6 {
4618
+ public:
4619
+ CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
4620
+ const Generator3& g3, const Generator4& g4, const Generator5& g5,
4621
+ const Generator6& g6)
4622
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4623
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4624
+ typename T6>
4625
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {
4626
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
4627
+ new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4628
+ static_cast<ParamGenerator<T1> >(g1_),
4629
+ static_cast<ParamGenerator<T2> >(g2_),
4630
+ static_cast<ParamGenerator<T3> >(g3_),
4631
+ static_cast<ParamGenerator<T4> >(g4_),
4632
+ static_cast<ParamGenerator<T5> >(g5_),
4633
+ static_cast<ParamGenerator<T6> >(g6_)));
4634
+ }
4635
+
4636
+ private:
4637
+ // No implementation - assignment is unsupported.
4638
+ void operator=(const CartesianProductHolder6& other);
4639
+
4640
+ const Generator1 g1_;
4641
+ const Generator2 g2_;
4642
+ const Generator3 g3_;
4643
+ const Generator4 g4_;
4644
+ const Generator5 g5_;
4645
+ const Generator6 g6_;
4646
+ }; // class CartesianProductHolder6
4647
+
4648
+ template <class Generator1, class Generator2, class Generator3,
4649
+ class Generator4, class Generator5, class Generator6, class Generator7>
4650
+ class CartesianProductHolder7 {
4651
+ public:
4652
+ CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
4653
+ const Generator3& g3, const Generator4& g4, const Generator5& g5,
4654
+ const Generator6& g6, const Generator7& g7)
4655
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4656
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4657
+ typename T6, typename T7>
4658
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4659
+ T7> >() const {
4660
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4661
+ new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4662
+ static_cast<ParamGenerator<T1> >(g1_),
4663
+ static_cast<ParamGenerator<T2> >(g2_),
4664
+ static_cast<ParamGenerator<T3> >(g3_),
4665
+ static_cast<ParamGenerator<T4> >(g4_),
4666
+ static_cast<ParamGenerator<T5> >(g5_),
4667
+ static_cast<ParamGenerator<T6> >(g6_),
4668
+ static_cast<ParamGenerator<T7> >(g7_)));
4669
+ }
4670
+
4671
+ private:
4672
+ // No implementation - assignment is unsupported.
4673
+ void operator=(const CartesianProductHolder7& other);
4674
+
4675
+ const Generator1 g1_;
4676
+ const Generator2 g2_;
4677
+ const Generator3 g3_;
4678
+ const Generator4 g4_;
4679
+ const Generator5 g5_;
4680
+ const Generator6 g6_;
4681
+ const Generator7 g7_;
4682
+ }; // class CartesianProductHolder7
4683
+
4684
+ template <class Generator1, class Generator2, class Generator3,
4685
+ class Generator4, class Generator5, class Generator6, class Generator7,
4686
+ class Generator8>
4687
+ class CartesianProductHolder8 {
4688
+ public:
4689
+ CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
4690
+ const Generator3& g3, const Generator4& g4, const Generator5& g5,
4691
+ const Generator6& g6, const Generator7& g7, const Generator8& g8)
4692
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4693
+ g8_(g8) {}
4694
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4695
+ typename T6, typename T7, typename T8>
4696
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,
4697
+ T8> >() const {
4698
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
4699
+ new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
4700
+ static_cast<ParamGenerator<T1> >(g1_),
4701
+ static_cast<ParamGenerator<T2> >(g2_),
4702
+ static_cast<ParamGenerator<T3> >(g3_),
4703
+ static_cast<ParamGenerator<T4> >(g4_),
4704
+ static_cast<ParamGenerator<T5> >(g5_),
4705
+ static_cast<ParamGenerator<T6> >(g6_),
4706
+ static_cast<ParamGenerator<T7> >(g7_),
4707
+ static_cast<ParamGenerator<T8> >(g8_)));
4708
+ }
4709
+
4710
+ private:
4711
+ // No implementation - assignment is unsupported.
4712
+ void operator=(const CartesianProductHolder8& other);
4713
+
4714
+ const Generator1 g1_;
4715
+ const Generator2 g2_;
4716
+ const Generator3 g3_;
4717
+ const Generator4 g4_;
4718
+ const Generator5 g5_;
4719
+ const Generator6 g6_;
4720
+ const Generator7 g7_;
4721
+ const Generator8 g8_;
4722
+ }; // class CartesianProductHolder8
4723
+
4724
+ template <class Generator1, class Generator2, class Generator3,
4725
+ class Generator4, class Generator5, class Generator6, class Generator7,
4726
+ class Generator8, class Generator9>
4727
+ class CartesianProductHolder9 {
4728
+ public:
4729
+ CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
4730
+ const Generator3& g3, const Generator4& g4, const Generator5& g5,
4731
+ const Generator6& g6, const Generator7& g7, const Generator8& g8,
4732
+ const Generator9& g9)
4733
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4734
+ g9_(g9) {}
4735
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4736
+ typename T6, typename T7, typename T8, typename T9>
4737
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
4738
+ T9> >() const {
4739
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
4740
+ T9> >(
4741
+ new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
4742
+ static_cast<ParamGenerator<T1> >(g1_),
4743
+ static_cast<ParamGenerator<T2> >(g2_),
4744
+ static_cast<ParamGenerator<T3> >(g3_),
4745
+ static_cast<ParamGenerator<T4> >(g4_),
4746
+ static_cast<ParamGenerator<T5> >(g5_),
4747
+ static_cast<ParamGenerator<T6> >(g6_),
4748
+ static_cast<ParamGenerator<T7> >(g7_),
4749
+ static_cast<ParamGenerator<T8> >(g8_),
4750
+ static_cast<ParamGenerator<T9> >(g9_)));
4751
+ }
4752
+
4753
+ private:
4754
+ // No implementation - assignment is unsupported.
4755
+ void operator=(const CartesianProductHolder9& other);
4756
+
4757
+ const Generator1 g1_;
4758
+ const Generator2 g2_;
4759
+ const Generator3 g3_;
4760
+ const Generator4 g4_;
4761
+ const Generator5 g5_;
4762
+ const Generator6 g6_;
4763
+ const Generator7 g7_;
4764
+ const Generator8 g8_;
4765
+ const Generator9 g9_;
4766
+ }; // class CartesianProductHolder9
4767
+
4768
+ template <class Generator1, class Generator2, class Generator3,
4769
+ class Generator4, class Generator5, class Generator6, class Generator7,
4770
+ class Generator8, class Generator9, class Generator10>
4771
+ class CartesianProductHolder10 {
4772
+ public:
4773
+ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
4774
+ const Generator3& g3, const Generator4& g4, const Generator5& g5,
4775
+ const Generator6& g6, const Generator7& g7, const Generator8& g8,
4776
+ const Generator9& g9, const Generator10& g10)
4777
+ : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4778
+ g9_(g9), g10_(g10) {}
4779
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
4780
+ typename T6, typename T7, typename T8, typename T9, typename T10>
4781
+ operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
4782
+ T9, T10> >() const {
4783
+ return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
4784
+ T9, T10> >(
4785
+ new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
4786
+ T10>(
4787
+ static_cast<ParamGenerator<T1> >(g1_),
4788
+ static_cast<ParamGenerator<T2> >(g2_),
4789
+ static_cast<ParamGenerator<T3> >(g3_),
4790
+ static_cast<ParamGenerator<T4> >(g4_),
4791
+ static_cast<ParamGenerator<T5> >(g5_),
4792
+ static_cast<ParamGenerator<T6> >(g6_),
4793
+ static_cast<ParamGenerator<T7> >(g7_),
4794
+ static_cast<ParamGenerator<T8> >(g8_),
4795
+ static_cast<ParamGenerator<T9> >(g9_),
4796
+ static_cast<ParamGenerator<T10> >(g10_)));
4797
+ }
4798
+
4799
+ private:
4800
+ // No implementation - assignment is unsupported.
4801
+ void operator=(const CartesianProductHolder10& other);
4802
+
4803
+ const Generator1 g1_;
4804
+ const Generator2 g2_;
4805
+ const Generator3 g3_;
4806
+ const Generator4 g4_;
4807
+ const Generator5 g5_;
4808
+ const Generator6 g6_;
4809
+ const Generator7 g7_;
4810
+ const Generator8 g8_;
4811
+ const Generator9 g9_;
4812
+ const Generator10 g10_;
4813
+ }; // class CartesianProductHolder10
4814
+
4815
+ # endif // GTEST_HAS_COMBINE
4816
+
4817
+ } // namespace internal
4818
+ } // namespace testing
4819
+
4820
+ #endif // GTEST_HAS_PARAM_TEST
4821
+
4822
+ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_