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,301 @@
1
+ $$ -*- mode: c++; -*-
2
+ $var n = 50 $$ Maximum length of Values arguments we want to support.
3
+ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
4
+ // Copyright 2008 Google Inc.
5
+ // All Rights Reserved.
6
+ //
7
+ // Redistribution and use in source and binary forms, with or without
8
+ // modification, are permitted provided that the following conditions are
9
+ // met:
10
+ //
11
+ // * Redistributions of source code must retain the above copyright
12
+ // notice, this list of conditions and the following disclaimer.
13
+ // * Redistributions in binary form must reproduce the above
14
+ // copyright notice, this list of conditions and the following disclaimer
15
+ // in the documentation and/or other materials provided with the
16
+ // distribution.
17
+ // * Neither the name of Google Inc. nor the names of its
18
+ // contributors may be used to endorse or promote products derived from
19
+ // this software without specific prior written permission.
20
+ //
21
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ //
33
+ // Author: vladl@google.com (Vlad Losev)
34
+
35
+ // Type and function utilities for implementing parameterized tests.
36
+ // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
37
+ //
38
+ // Currently Google Test supports at most $n arguments in Values,
39
+ // and at most $maxtuple arguments in Combine. Please contact
40
+ // googletestframework@googlegroups.com if you need more.
41
+ // Please note that the number of arguments to Combine is limited
42
+ // by the maximum arity of the implementation of tr1::tuple which is
43
+ // currently set at $maxtuple.
44
+
45
+ #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
46
+ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47
+
48
+ // scripts/fuse_gtest.py depends on gtest's own header being #included
49
+ // *unconditionally*. Therefore these #includes cannot be moved
50
+ // inside #if GTEST_HAS_PARAM_TEST.
51
+ #include "gtest/internal/gtest-param-util.h"
52
+ #include "gtest/internal/gtest-port.h"
53
+
54
+ #if GTEST_HAS_PARAM_TEST
55
+
56
+ namespace testing {
57
+
58
+ // Forward declarations of ValuesIn(), which is implemented in
59
+ // include/gtest/gtest-param-test.h.
60
+ template <typename ForwardIterator>
61
+ internal::ParamGenerator<
62
+ typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
63
+ ValuesIn(ForwardIterator begin, ForwardIterator end);
64
+
65
+ template <typename T, size_t N>
66
+ internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
67
+
68
+ template <class Container>
69
+ internal::ParamGenerator<typename Container::value_type> ValuesIn(
70
+ const Container& container);
71
+
72
+ namespace internal {
73
+
74
+ // Used in the Values() function to provide polymorphic capabilities.
75
+ template <typename T1>
76
+ class ValueArray1 {
77
+ public:
78
+ explicit ValueArray1(T1 v1) : v1_(v1) {}
79
+
80
+ template <typename T>
81
+ operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
82
+
83
+ private:
84
+ // No implementation - assignment is unsupported.
85
+ void operator=(const ValueArray1& other);
86
+
87
+ const T1 v1_;
88
+ };
89
+
90
+ $range i 2..n
91
+ $for i [[
92
+ $range j 1..i
93
+
94
+ template <$for j, [[typename T$j]]>
95
+ class ValueArray$i {
96
+ public:
97
+ ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {}
98
+
99
+ template <typename T>
100
+ operator ParamGenerator<T>() const {
101
+ const T array[] = {$for j, [[v$(j)_]]};
102
+ return ValuesIn(array);
103
+ }
104
+
105
+ private:
106
+ // No implementation - assignment is unsupported.
107
+ void operator=(const ValueArray$i& other);
108
+
109
+ $for j [[
110
+
111
+ const T$j v$(j)_;
112
+ ]]
113
+
114
+ };
115
+
116
+ ]]
117
+
118
+ # if GTEST_HAS_COMBINE
119
+ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
120
+ //
121
+ // Generates values from the Cartesian product of values produced
122
+ // by the argument generators.
123
+ //
124
+ $range i 2..maxtuple
125
+ $for i [[
126
+ $range j 1..i
127
+ $range k 2..i
128
+
129
+ template <$for j, [[typename T$j]]>
130
+ class CartesianProductGenerator$i
131
+ : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > {
132
+ public:
133
+ typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType;
134
+
135
+ CartesianProductGenerator$i($for j, [[const ParamGenerator<T$j>& g$j]])
136
+ : $for j, [[g$(j)_(g$j)]] {}
137
+ virtual ~CartesianProductGenerator$i() {}
138
+
139
+ virtual ParamIteratorInterface<ParamType>* Begin() const {
140
+ return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]);
141
+ }
142
+ virtual ParamIteratorInterface<ParamType>* End() const {
143
+ return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]);
144
+ }
145
+
146
+ private:
147
+ class Iterator : public ParamIteratorInterface<ParamType> {
148
+ public:
149
+ Iterator(const ParamGeneratorInterface<ParamType>* base, $for j, [[
150
+
151
+ const ParamGenerator<T$j>& g$j,
152
+ const typename ParamGenerator<T$j>::iterator& current$(j)]])
153
+ : base_(base),
154
+ $for j, [[
155
+
156
+ begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j)
157
+ ]] {
158
+ ComputeCurrentValue();
159
+ }
160
+ virtual ~Iterator() {}
161
+
162
+ virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
163
+ return base_;
164
+ }
165
+ // Advance should not be called on beyond-of-range iterators
166
+ // so no component iterators must be beyond end of range, either.
167
+ virtual void Advance() {
168
+ assert(!AtEnd());
169
+ ++current$(i)_;
170
+
171
+ $for k [[
172
+ if (current$(i+2-k)_ == end$(i+2-k)_) {
173
+ current$(i+2-k)_ = begin$(i+2-k)_;
174
+ ++current$(i+2-k-1)_;
175
+ }
176
+
177
+ ]]
178
+ ComputeCurrentValue();
179
+ }
180
+ virtual ParamIteratorInterface<ParamType>* Clone() const {
181
+ return new Iterator(*this);
182
+ }
183
+ virtual const ParamType* Current() const { return &current_value_; }
184
+ virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
185
+ // Having the same base generator guarantees that the other
186
+ // iterator is of the same type and we can downcast.
187
+ GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
188
+ << "The program attempted to compare iterators "
189
+ << "from different generators." << std::endl;
190
+ const Iterator* typed_other =
191
+ CheckedDowncastToActualType<const Iterator>(&other);
192
+ // We must report iterators equal if they both point beyond their
193
+ // respective ranges. That can happen in a variety of fashions,
194
+ // so we have to consult AtEnd().
195
+ return (AtEnd() && typed_other->AtEnd()) ||
196
+ ($for j && [[
197
+
198
+ current$(j)_ == typed_other->current$(j)_
199
+ ]]);
200
+ }
201
+
202
+ private:
203
+ Iterator(const Iterator& other)
204
+ : base_(other.base_), $for j, [[
205
+
206
+ begin$(j)_(other.begin$(j)_),
207
+ end$(j)_(other.end$(j)_),
208
+ current$(j)_(other.current$(j)_)
209
+ ]] {
210
+ ComputeCurrentValue();
211
+ }
212
+
213
+ void ComputeCurrentValue() {
214
+ if (!AtEnd())
215
+ current_value_ = ParamType($for j, [[*current$(j)_]]);
216
+ }
217
+ bool AtEnd() const {
218
+ // We must report iterator past the end of the range when either of the
219
+ // component iterators has reached the end of its range.
220
+ return
221
+ $for j || [[
222
+
223
+ current$(j)_ == end$(j)_
224
+ ]];
225
+ }
226
+
227
+ // No implementation - assignment is unsupported.
228
+ void operator=(const Iterator& other);
229
+
230
+ const ParamGeneratorInterface<ParamType>* const base_;
231
+ // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
232
+ // current[i]_ is the actual traversing iterator.
233
+ $for j [[
234
+
235
+ const typename ParamGenerator<T$j>::iterator begin$(j)_;
236
+ const typename ParamGenerator<T$j>::iterator end$(j)_;
237
+ typename ParamGenerator<T$j>::iterator current$(j)_;
238
+ ]]
239
+
240
+ ParamType current_value_;
241
+ }; // class CartesianProductGenerator$i::Iterator
242
+
243
+ // No implementation - assignment is unsupported.
244
+ void operator=(const CartesianProductGenerator$i& other);
245
+
246
+
247
+ $for j [[
248
+ const ParamGenerator<T$j> g$(j)_;
249
+
250
+ ]]
251
+ }; // class CartesianProductGenerator$i
252
+
253
+
254
+ ]]
255
+
256
+ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
257
+ //
258
+ // Helper classes providing Combine() with polymorphic features. They allow
259
+ // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
260
+ // convertible to U.
261
+ //
262
+ $range i 2..maxtuple
263
+ $for i [[
264
+ $range j 1..i
265
+
266
+ template <$for j, [[class Generator$j]]>
267
+ class CartesianProductHolder$i {
268
+ public:
269
+ CartesianProductHolder$i($for j, [[const Generator$j& g$j]])
270
+ : $for j, [[g$(j)_(g$j)]] {}
271
+ template <$for j, [[typename T$j]]>
272
+ operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const {
273
+ return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >(
274
+ new CartesianProductGenerator$i<$for j, [[T$j]]>(
275
+ $for j,[[
276
+
277
+ static_cast<ParamGenerator<T$j> >(g$(j)_)
278
+ ]]));
279
+ }
280
+
281
+ private:
282
+ // No implementation - assignment is unsupported.
283
+ void operator=(const CartesianProductHolder$i& other);
284
+
285
+
286
+ $for j [[
287
+ const Generator$j g$(j)_;
288
+
289
+ ]]
290
+ }; // class CartesianProductHolder$i
291
+
292
+ ]]
293
+
294
+ # endif // GTEST_HAS_COMBINE
295
+
296
+ } // namespace internal
297
+ } // namespace testing
298
+
299
+ #endif // GTEST_HAS_PARAM_TEST
300
+
301
+ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_