cppjieba_rb 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +26 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +81 -0
  8. data/Rakefile +20 -0
  9. data/cppjieba_rb.gemspec +50 -0
  10. data/ext/cppjieba/.gitignore +17 -0
  11. data/ext/cppjieba/.travis.yml +22 -0
  12. data/ext/cppjieba/CMakeLists.txt +28 -0
  13. data/ext/cppjieba/ChangeLog.md +236 -0
  14. data/ext/cppjieba/README.md +285 -0
  15. data/ext/cppjieba/README_EN.md +111 -0
  16. data/ext/cppjieba/appveyor.yml +32 -0
  17. data/ext/cppjieba/deps/CMakeLists.txt +1 -0
  18. data/ext/cppjieba/deps/gtest/CMakeLists.txt +5 -0
  19. data/ext/cppjieba/deps/gtest/include/gtest/gtest-death-test.h +283 -0
  20. data/ext/cppjieba/deps/gtest/include/gtest/gtest-message.h +230 -0
  21. data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h +1421 -0
  22. data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h.pump +487 -0
  23. data/ext/cppjieba/deps/gtest/include/gtest/gtest-printers.h +796 -0
  24. data/ext/cppjieba/deps/gtest/include/gtest/gtest-spi.h +232 -0
  25. data/ext/cppjieba/deps/gtest/include/gtest/gtest-test-part.h +176 -0
  26. data/ext/cppjieba/deps/gtest/include/gtest/gtest-typed-test.h +259 -0
  27. data/ext/cppjieba/deps/gtest/include/gtest/gtest.h +2155 -0
  28. data/ext/cppjieba/deps/gtest/include/gtest/gtest_pred_impl.h +358 -0
  29. data/ext/cppjieba/deps/gtest/include/gtest/gtest_prod.h +58 -0
  30. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-death-test-internal.h +308 -0
  31. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-filepath.h +210 -0
  32. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-internal.h +1226 -0
  33. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-linked_ptr.h +233 -0
  34. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h +4822 -0
  35. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  36. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util.h +619 -0
  37. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-port.h +1788 -0
  38. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-string.h +350 -0
  39. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h +968 -0
  40. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h.pump +336 -0
  41. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h +3330 -0
  42. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h.pump +296 -0
  43. data/ext/cppjieba/deps/gtest/src/.deps/.dirstamp +0 -0
  44. data/ext/cppjieba/deps/gtest/src/.deps/gtest-all.Plo +681 -0
  45. data/ext/cppjieba/deps/gtest/src/.deps/gtest_main.Plo +509 -0
  46. data/ext/cppjieba/deps/gtest/src/.dirstamp +0 -0
  47. data/ext/cppjieba/deps/gtest/src/gtest-all.cc +48 -0
  48. data/ext/cppjieba/deps/gtest/src/gtest-death-test.cc +1234 -0
  49. data/ext/cppjieba/deps/gtest/src/gtest-filepath.cc +380 -0
  50. data/ext/cppjieba/deps/gtest/src/gtest-internal-inl.h +1038 -0
  51. data/ext/cppjieba/deps/gtest/src/gtest-port.cc +746 -0
  52. data/ext/cppjieba/deps/gtest/src/gtest-printers.cc +356 -0
  53. data/ext/cppjieba/deps/gtest/src/gtest-test-part.cc +110 -0
  54. data/ext/cppjieba/deps/gtest/src/gtest-typed-test.cc +110 -0
  55. data/ext/cppjieba/deps/gtest/src/gtest.cc +4898 -0
  56. data/ext/cppjieba/deps/gtest/src/gtest_main.cc +39 -0
  57. data/ext/cppjieba/deps/limonp/ArgvContext.hpp +70 -0
  58. data/ext/cppjieba/deps/limonp/BlockingQueue.hpp +49 -0
  59. data/ext/cppjieba/deps/limonp/BoundedBlockingQueue.hpp +67 -0
  60. data/ext/cppjieba/deps/limonp/BoundedQueue.hpp +65 -0
  61. data/ext/cppjieba/deps/limonp/Closure.hpp +206 -0
  62. data/ext/cppjieba/deps/limonp/Colors.hpp +31 -0
  63. data/ext/cppjieba/deps/limonp/Condition.hpp +38 -0
  64. data/ext/cppjieba/deps/limonp/Config.hpp +103 -0
  65. data/ext/cppjieba/deps/limonp/FileLock.hpp +74 -0
  66. data/ext/cppjieba/deps/limonp/ForcePublic.hpp +7 -0
  67. data/ext/cppjieba/deps/limonp/LocalVector.hpp +139 -0
  68. data/ext/cppjieba/deps/limonp/Logging.hpp +76 -0
  69. data/ext/cppjieba/deps/limonp/Md5.hpp +411 -0
  70. data/ext/cppjieba/deps/limonp/MutexLock.hpp +51 -0
  71. data/ext/cppjieba/deps/limonp/NonCopyable.hpp +21 -0
  72. data/ext/cppjieba/deps/limonp/StdExtension.hpp +159 -0
  73. data/ext/cppjieba/deps/limonp/StringUtil.hpp +365 -0
  74. data/ext/cppjieba/deps/limonp/Thread.hpp +44 -0
  75. data/ext/cppjieba/deps/limonp/ThreadPool.hpp +86 -0
  76. data/ext/cppjieba/dict/README.md +31 -0
  77. data/ext/cppjieba/dict/hmm_model.utf8 +34 -0
  78. data/ext/cppjieba/dict/idf.utf8 +258826 -0
  79. data/ext/cppjieba/dict/jieba.dict.utf8 +348982 -0
  80. data/ext/cppjieba/dict/pos_dict/char_state_tab.utf8 +6653 -0
  81. data/ext/cppjieba/dict/pos_dict/prob_emit.utf8 +166 -0
  82. data/ext/cppjieba/dict/pos_dict/prob_start.utf8 +259 -0
  83. data/ext/cppjieba/dict/pos_dict/prob_trans.utf8 +5222 -0
  84. data/ext/cppjieba/dict/stop_words.utf8 +1534 -0
  85. data/ext/cppjieba/dict/user.dict.utf8 +4 -0
  86. data/ext/cppjieba/include/cppjieba/DictTrie.hpp +227 -0
  87. data/ext/cppjieba/include/cppjieba/FullSegment.hpp +93 -0
  88. data/ext/cppjieba/include/cppjieba/HMMModel.hpp +129 -0
  89. data/ext/cppjieba/include/cppjieba/HMMSegment.hpp +190 -0
  90. data/ext/cppjieba/include/cppjieba/Jieba.hpp +108 -0
  91. data/ext/cppjieba/include/cppjieba/KeywordExtractor.hpp +153 -0
  92. data/ext/cppjieba/include/cppjieba/MPSegment.hpp +137 -0
  93. data/ext/cppjieba/include/cppjieba/MixSegment.hpp +109 -0
  94. data/ext/cppjieba/include/cppjieba/PosTagger.hpp +77 -0
  95. data/ext/cppjieba/include/cppjieba/PreFilter.hpp +54 -0
  96. data/ext/cppjieba/include/cppjieba/QuerySegment.hpp +90 -0
  97. data/ext/cppjieba/include/cppjieba/SegmentBase.hpp +46 -0
  98. data/ext/cppjieba/include/cppjieba/SegmentTagged.hpp +23 -0
  99. data/ext/cppjieba/include/cppjieba/TextRankExtractor.hpp +190 -0
  100. data/ext/cppjieba/include/cppjieba/Trie.hpp +174 -0
  101. data/ext/cppjieba/include/cppjieba/Unicode.hpp +215 -0
  102. data/ext/cppjieba/test/CMakeLists.txt +5 -0
  103. data/ext/cppjieba/test/demo.cpp +80 -0
  104. data/ext/cppjieba/test/load_test.cpp +54 -0
  105. data/ext/cppjieba/test/testdata/curl.res +1 -0
  106. data/ext/cppjieba/test/testdata/extra_dict/jieba.dict.small.utf8 +109750 -0
  107. data/ext/cppjieba/test/testdata/gbk_dict/hmm_model.gbk +34 -0
  108. data/ext/cppjieba/test/testdata/gbk_dict/jieba.dict.gbk +348982 -0
  109. data/ext/cppjieba/test/testdata/jieba.dict.0.1.utf8 +93 -0
  110. data/ext/cppjieba/test/testdata/jieba.dict.0.utf8 +93 -0
  111. data/ext/cppjieba/test/testdata/jieba.dict.1.utf8 +67 -0
  112. data/ext/cppjieba/test/testdata/jieba.dict.2.utf8 +64 -0
  113. data/ext/cppjieba/test/testdata/load_test.urls +2 -0
  114. data/ext/cppjieba/test/testdata/review.100 +100 -0
  115. data/ext/cppjieba/test/testdata/review.100.res +200 -0
  116. data/ext/cppjieba/test/testdata/server.conf +19 -0
  117. data/ext/cppjieba/test/testdata/testlines.gbk +9 -0
  118. data/ext/cppjieba/test/testdata/testlines.utf8 +8 -0
  119. data/ext/cppjieba/test/testdata/userdict.2.utf8 +1 -0
  120. data/ext/cppjieba/test/testdata/userdict.english +2 -0
  121. data/ext/cppjieba/test/testdata/userdict.utf8 +8 -0
  122. data/ext/cppjieba/test/testdata/weicheng.utf8 +247 -0
  123. data/ext/cppjieba/test/unittest/CMakeLists.txt +24 -0
  124. data/ext/cppjieba/test/unittest/gtest_main.cpp +39 -0
  125. data/ext/cppjieba/test/unittest/jieba_test.cpp +133 -0
  126. data/ext/cppjieba/test/unittest/keyword_extractor_test.cpp +79 -0
  127. data/ext/cppjieba/test/unittest/pos_tagger_test.cpp +41 -0
  128. data/ext/cppjieba/test/unittest/pre_filter_test.cpp +43 -0
  129. data/ext/cppjieba/test/unittest/segments_test.cpp +256 -0
  130. data/ext/cppjieba/test/unittest/textrank_test.cpp +86 -0
  131. data/ext/cppjieba/test/unittest/trie_test.cpp +177 -0
  132. data/ext/cppjieba/test/unittest/unicode_test.cpp +43 -0
  133. data/ext/cppjieba_rb/cppjieba_rb.c +10 -0
  134. data/ext/cppjieba_rb/extconf.rb +26 -0
  135. data/ext/cppjieba_rb/internal.cc +148 -0
  136. data/lib/cppjieba_rb/segment.rb +20 -0
  137. data/lib/cppjieba_rb/version.rb +3 -0
  138. data/lib/cppjieba_rb.rb +34 -0
  139. data/test/test_keyword.rb +17 -0
  140. data/test/test_segment.rb +24 -0
  141. data/test/test_tagging.rb +19 -0
  142. metadata +244 -0
@@ -0,0 +1,968 @@
1
+ // This file was GENERATED by a script. DO NOT EDIT BY HAND!!!
2
+
3
+ // Copyright 2009 Google Inc.
4
+ // All Rights Reserved.
5
+ //
6
+ // Redistribution and use in source and binary forms, with or without
7
+ // modification, are permitted provided that the following conditions are
8
+ // met:
9
+ //
10
+ // * Redistributions of source code must retain the above copyright
11
+ // notice, this list of conditions and the following disclaimer.
12
+ // * Redistributions in binary form must reproduce the above
13
+ // copyright notice, this list of conditions and the following disclaimer
14
+ // in the documentation and/or other materials provided with the
15
+ // distribution.
16
+ // * Neither the name of Google Inc. nor the names of its
17
+ // contributors may be used to endorse or promote products derived from
18
+ // this software without specific prior written permission.
19
+ //
20
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ //
32
+ // Author: wan@google.com (Zhanyong Wan)
33
+
34
+ // Implements a subset of TR1 tuple needed by Google Test and Google Mock.
35
+
36
+ #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
37
+ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
38
+
39
+ #include <utility> // For ::std::pair.
40
+
41
+ // The compiler used in Symbian has a bug that prevents us from declaring the
42
+ // tuple template as a friend (it complains that tuple is redefined). This
43
+ // hack bypasses the bug by declaring the members that should otherwise be
44
+ // private as public.
45
+ // Sun Studio versions < 12 also have the above bug.
46
+ #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
47
+ # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
48
+ #else
49
+ # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
50
+ template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
51
+ private:
52
+ #endif
53
+
54
+ // GTEST_n_TUPLE_(T) is the type of an n-tuple.
55
+ #define GTEST_0_TUPLE_(T) tuple<>
56
+ #define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
57
+ void, void, void>
58
+ #define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
59
+ void, void, void>
60
+ #define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
61
+ void, void, void>
62
+ #define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
63
+ void, void, void>
64
+ #define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
65
+ void, void, void>
66
+ #define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
67
+ void, void, void>
68
+ #define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
69
+ void, void, void>
70
+ #define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
71
+ T##7, void, void>
72
+ #define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
73
+ T##7, T##8, void>
74
+ #define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
75
+ T##7, T##8, T##9>
76
+
77
+ // GTEST_n_TYPENAMES_(T) declares a list of n typenames.
78
+ #define GTEST_0_TYPENAMES_(T)
79
+ #define GTEST_1_TYPENAMES_(T) typename T##0
80
+ #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
81
+ #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
82
+ #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
83
+ typename T##3
84
+ #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
85
+ typename T##3, typename T##4
86
+ #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
87
+ typename T##3, typename T##4, typename T##5
88
+ #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
89
+ typename T##3, typename T##4, typename T##5, typename T##6
90
+ #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
91
+ typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
92
+ #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
93
+ typename T##3, typename T##4, typename T##5, typename T##6, \
94
+ typename T##7, typename T##8
95
+ #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
96
+ typename T##3, typename T##4, typename T##5, typename T##6, \
97
+ typename T##7, typename T##8, typename T##9
98
+
99
+ // In theory, defining stuff in the ::std namespace is undefined
100
+ // behavior. We can do this as we are playing the role of a standard
101
+ // library vendor.
102
+ namespace std {
103
+ namespace tr1 {
104
+
105
+ template <typename T0 = void, typename T1 = void, typename T2 = void,
106
+ typename T3 = void, typename T4 = void, typename T5 = void,
107
+ typename T6 = void, typename T7 = void, typename T8 = void,
108
+ typename T9 = void>
109
+ class tuple;
110
+
111
+ // Anything in namespace gtest_internal is Google Test's INTERNAL
112
+ // IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
113
+ namespace gtest_internal {
114
+
115
+ // ByRef<T>::type is T if T is a reference; otherwise it's const T&.
116
+ template <typename T>
117
+ struct ByRef { typedef const T& type; }; // NOLINT
118
+ template <typename T>
119
+ struct ByRef<T&> { typedef T& type; }; // NOLINT
120
+
121
+ // A handy wrapper for ByRef.
122
+ #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
123
+
124
+ // AddRef<T>::type is T if T is a reference; otherwise it's T&. This
125
+ // is the same as tr1::add_reference<T>::type.
126
+ template <typename T>
127
+ struct AddRef { typedef T& type; }; // NOLINT
128
+ template <typename T>
129
+ struct AddRef<T&> { typedef T& type; }; // NOLINT
130
+
131
+ // A handy wrapper for AddRef.
132
+ #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
133
+
134
+ // A helper for implementing get<k>().
135
+ template <int k> class Get;
136
+
137
+ // A helper for implementing tuple_element<k, T>. kIndexValid is true
138
+ // iff k < the number of fields in tuple type T.
139
+ template <bool kIndexValid, int kIndex, class Tuple>
140
+ struct TupleElement;
141
+
142
+ template <GTEST_10_TYPENAMES_(T)>
143
+ struct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
144
+
145
+ template <GTEST_10_TYPENAMES_(T)>
146
+ struct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
147
+
148
+ template <GTEST_10_TYPENAMES_(T)>
149
+ struct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
150
+
151
+ template <GTEST_10_TYPENAMES_(T)>
152
+ struct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
153
+
154
+ template <GTEST_10_TYPENAMES_(T)>
155
+ struct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
156
+
157
+ template <GTEST_10_TYPENAMES_(T)>
158
+ struct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
159
+
160
+ template <GTEST_10_TYPENAMES_(T)>
161
+ struct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
162
+
163
+ template <GTEST_10_TYPENAMES_(T)>
164
+ struct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
165
+
166
+ template <GTEST_10_TYPENAMES_(T)>
167
+ struct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
168
+
169
+ template <GTEST_10_TYPENAMES_(T)>
170
+ struct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
171
+
172
+ } // namespace gtest_internal
173
+
174
+ template <>
175
+ class tuple<> {
176
+ public:
177
+ tuple() {}
178
+ tuple(const tuple& /* t */) {}
179
+ tuple& operator=(const tuple& /* t */) { return *this; }
180
+ };
181
+
182
+ template <GTEST_1_TYPENAMES_(T)>
183
+ class GTEST_1_TUPLE_(T) {
184
+ public:
185
+ template <int k> friend class gtest_internal::Get;
186
+
187
+ tuple() : f0_() {}
188
+
189
+ explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
190
+
191
+ tuple(const tuple& t) : f0_(t.f0_) {}
192
+
193
+ template <GTEST_1_TYPENAMES_(U)>
194
+ tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
195
+
196
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
197
+
198
+ template <GTEST_1_TYPENAMES_(U)>
199
+ tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
200
+ return CopyFrom(t);
201
+ }
202
+
203
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
204
+
205
+ template <GTEST_1_TYPENAMES_(U)>
206
+ tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
207
+ f0_ = t.f0_;
208
+ return *this;
209
+ }
210
+
211
+ T0 f0_;
212
+ };
213
+
214
+ template <GTEST_2_TYPENAMES_(T)>
215
+ class GTEST_2_TUPLE_(T) {
216
+ public:
217
+ template <int k> friend class gtest_internal::Get;
218
+
219
+ tuple() : f0_(), f1_() {}
220
+
221
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
222
+ f1_(f1) {}
223
+
224
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
225
+
226
+ template <GTEST_2_TYPENAMES_(U)>
227
+ tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
228
+ template <typename U0, typename U1>
229
+ tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
230
+
231
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
232
+
233
+ template <GTEST_2_TYPENAMES_(U)>
234
+ tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
235
+ return CopyFrom(t);
236
+ }
237
+ template <typename U0, typename U1>
238
+ tuple& operator=(const ::std::pair<U0, U1>& p) {
239
+ f0_ = p.first;
240
+ f1_ = p.second;
241
+ return *this;
242
+ }
243
+
244
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
245
+
246
+ template <GTEST_2_TYPENAMES_(U)>
247
+ tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
248
+ f0_ = t.f0_;
249
+ f1_ = t.f1_;
250
+ return *this;
251
+ }
252
+
253
+ T0 f0_;
254
+ T1 f1_;
255
+ };
256
+
257
+ template <GTEST_3_TYPENAMES_(T)>
258
+ class GTEST_3_TUPLE_(T) {
259
+ public:
260
+ template <int k> friend class gtest_internal::Get;
261
+
262
+ tuple() : f0_(), f1_(), f2_() {}
263
+
264
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
265
+ GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
266
+
267
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
268
+
269
+ template <GTEST_3_TYPENAMES_(U)>
270
+ tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
271
+
272
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
273
+
274
+ template <GTEST_3_TYPENAMES_(U)>
275
+ tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
276
+ return CopyFrom(t);
277
+ }
278
+
279
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
280
+
281
+ template <GTEST_3_TYPENAMES_(U)>
282
+ tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
283
+ f0_ = t.f0_;
284
+ f1_ = t.f1_;
285
+ f2_ = t.f2_;
286
+ return *this;
287
+ }
288
+
289
+ T0 f0_;
290
+ T1 f1_;
291
+ T2 f2_;
292
+ };
293
+
294
+ template <GTEST_4_TYPENAMES_(T)>
295
+ class GTEST_4_TUPLE_(T) {
296
+ public:
297
+ template <int k> friend class gtest_internal::Get;
298
+
299
+ tuple() : f0_(), f1_(), f2_(), f3_() {}
300
+
301
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
302
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
303
+ f3_(f3) {}
304
+
305
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
306
+
307
+ template <GTEST_4_TYPENAMES_(U)>
308
+ tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
309
+ f3_(t.f3_) {}
310
+
311
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
312
+
313
+ template <GTEST_4_TYPENAMES_(U)>
314
+ tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
315
+ return CopyFrom(t);
316
+ }
317
+
318
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
319
+
320
+ template <GTEST_4_TYPENAMES_(U)>
321
+ tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
322
+ f0_ = t.f0_;
323
+ f1_ = t.f1_;
324
+ f2_ = t.f2_;
325
+ f3_ = t.f3_;
326
+ return *this;
327
+ }
328
+
329
+ T0 f0_;
330
+ T1 f1_;
331
+ T2 f2_;
332
+ T3 f3_;
333
+ };
334
+
335
+ template <GTEST_5_TYPENAMES_(T)>
336
+ class GTEST_5_TUPLE_(T) {
337
+ public:
338
+ template <int k> friend class gtest_internal::Get;
339
+
340
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
341
+
342
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
343
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
344
+ GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
345
+
346
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
347
+ f4_(t.f4_) {}
348
+
349
+ template <GTEST_5_TYPENAMES_(U)>
350
+ tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
351
+ f3_(t.f3_), f4_(t.f4_) {}
352
+
353
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
354
+
355
+ template <GTEST_5_TYPENAMES_(U)>
356
+ tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
357
+ return CopyFrom(t);
358
+ }
359
+
360
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
361
+
362
+ template <GTEST_5_TYPENAMES_(U)>
363
+ tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
364
+ f0_ = t.f0_;
365
+ f1_ = t.f1_;
366
+ f2_ = t.f2_;
367
+ f3_ = t.f3_;
368
+ f4_ = t.f4_;
369
+ return *this;
370
+ }
371
+
372
+ T0 f0_;
373
+ T1 f1_;
374
+ T2 f2_;
375
+ T3 f3_;
376
+ T4 f4_;
377
+ };
378
+
379
+ template <GTEST_6_TYPENAMES_(T)>
380
+ class GTEST_6_TUPLE_(T) {
381
+ public:
382
+ template <int k> friend class gtest_internal::Get;
383
+
384
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
385
+
386
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
387
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
388
+ GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
389
+ f5_(f5) {}
390
+
391
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
392
+ f4_(t.f4_), f5_(t.f5_) {}
393
+
394
+ template <GTEST_6_TYPENAMES_(U)>
395
+ tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
396
+ f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
397
+
398
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
399
+
400
+ template <GTEST_6_TYPENAMES_(U)>
401
+ tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
402
+ return CopyFrom(t);
403
+ }
404
+
405
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
406
+
407
+ template <GTEST_6_TYPENAMES_(U)>
408
+ tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
409
+ f0_ = t.f0_;
410
+ f1_ = t.f1_;
411
+ f2_ = t.f2_;
412
+ f3_ = t.f3_;
413
+ f4_ = t.f4_;
414
+ f5_ = t.f5_;
415
+ return *this;
416
+ }
417
+
418
+ T0 f0_;
419
+ T1 f1_;
420
+ T2 f2_;
421
+ T3 f3_;
422
+ T4 f4_;
423
+ T5 f5_;
424
+ };
425
+
426
+ template <GTEST_7_TYPENAMES_(T)>
427
+ class GTEST_7_TUPLE_(T) {
428
+ public:
429
+ template <int k> friend class gtest_internal::Get;
430
+
431
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
432
+
433
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
434
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
435
+ GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
436
+ f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
437
+
438
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
439
+ f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
440
+
441
+ template <GTEST_7_TYPENAMES_(U)>
442
+ tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
443
+ f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
444
+
445
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
446
+
447
+ template <GTEST_7_TYPENAMES_(U)>
448
+ tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
449
+ return CopyFrom(t);
450
+ }
451
+
452
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
453
+
454
+ template <GTEST_7_TYPENAMES_(U)>
455
+ tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
456
+ f0_ = t.f0_;
457
+ f1_ = t.f1_;
458
+ f2_ = t.f2_;
459
+ f3_ = t.f3_;
460
+ f4_ = t.f4_;
461
+ f5_ = t.f5_;
462
+ f6_ = t.f6_;
463
+ return *this;
464
+ }
465
+
466
+ T0 f0_;
467
+ T1 f1_;
468
+ T2 f2_;
469
+ T3 f3_;
470
+ T4 f4_;
471
+ T5 f5_;
472
+ T6 f6_;
473
+ };
474
+
475
+ template <GTEST_8_TYPENAMES_(T)>
476
+ class GTEST_8_TUPLE_(T) {
477
+ public:
478
+ template <int k> friend class gtest_internal::Get;
479
+
480
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
481
+
482
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
483
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
484
+ GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
485
+ GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
486
+ f5_(f5), f6_(f6), f7_(f7) {}
487
+
488
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
489
+ f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
490
+
491
+ template <GTEST_8_TYPENAMES_(U)>
492
+ tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
493
+ f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
494
+
495
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
496
+
497
+ template <GTEST_8_TYPENAMES_(U)>
498
+ tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
499
+ return CopyFrom(t);
500
+ }
501
+
502
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
503
+
504
+ template <GTEST_8_TYPENAMES_(U)>
505
+ tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
506
+ f0_ = t.f0_;
507
+ f1_ = t.f1_;
508
+ f2_ = t.f2_;
509
+ f3_ = t.f3_;
510
+ f4_ = t.f4_;
511
+ f5_ = t.f5_;
512
+ f6_ = t.f6_;
513
+ f7_ = t.f7_;
514
+ return *this;
515
+ }
516
+
517
+ T0 f0_;
518
+ T1 f1_;
519
+ T2 f2_;
520
+ T3 f3_;
521
+ T4 f4_;
522
+ T5 f5_;
523
+ T6 f6_;
524
+ T7 f7_;
525
+ };
526
+
527
+ template <GTEST_9_TYPENAMES_(T)>
528
+ class GTEST_9_TUPLE_(T) {
529
+ public:
530
+ template <int k> friend class gtest_internal::Get;
531
+
532
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
533
+
534
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
535
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
536
+ GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
537
+ GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
538
+ f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
539
+
540
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
541
+ f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
542
+
543
+ template <GTEST_9_TYPENAMES_(U)>
544
+ tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
545
+ f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
546
+
547
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
548
+
549
+ template <GTEST_9_TYPENAMES_(U)>
550
+ tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
551
+ return CopyFrom(t);
552
+ }
553
+
554
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
555
+
556
+ template <GTEST_9_TYPENAMES_(U)>
557
+ tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
558
+ f0_ = t.f0_;
559
+ f1_ = t.f1_;
560
+ f2_ = t.f2_;
561
+ f3_ = t.f3_;
562
+ f4_ = t.f4_;
563
+ f5_ = t.f5_;
564
+ f6_ = t.f6_;
565
+ f7_ = t.f7_;
566
+ f8_ = t.f8_;
567
+ return *this;
568
+ }
569
+
570
+ T0 f0_;
571
+ T1 f1_;
572
+ T2 f2_;
573
+ T3 f3_;
574
+ T4 f4_;
575
+ T5 f5_;
576
+ T6 f6_;
577
+ T7 f7_;
578
+ T8 f8_;
579
+ };
580
+
581
+ template <GTEST_10_TYPENAMES_(T)>
582
+ class tuple {
583
+ public:
584
+ template <int k> friend class gtest_internal::Get;
585
+
586
+ tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
587
+ f9_() {}
588
+
589
+ explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
590
+ GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
591
+ GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
592
+ GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
593
+ f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
594
+
595
+ tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
596
+ f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
597
+
598
+ template <GTEST_10_TYPENAMES_(U)>
599
+ tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
600
+ f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
601
+ f9_(t.f9_) {}
602
+
603
+ tuple& operator=(const tuple& t) { return CopyFrom(t); }
604
+
605
+ template <GTEST_10_TYPENAMES_(U)>
606
+ tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
607
+ return CopyFrom(t);
608
+ }
609
+
610
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
611
+
612
+ template <GTEST_10_TYPENAMES_(U)>
613
+ tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
614
+ f0_ = t.f0_;
615
+ f1_ = t.f1_;
616
+ f2_ = t.f2_;
617
+ f3_ = t.f3_;
618
+ f4_ = t.f4_;
619
+ f5_ = t.f5_;
620
+ f6_ = t.f6_;
621
+ f7_ = t.f7_;
622
+ f8_ = t.f8_;
623
+ f9_ = t.f9_;
624
+ return *this;
625
+ }
626
+
627
+ T0 f0_;
628
+ T1 f1_;
629
+ T2 f2_;
630
+ T3 f3_;
631
+ T4 f4_;
632
+ T5 f5_;
633
+ T6 f6_;
634
+ T7 f7_;
635
+ T8 f8_;
636
+ T9 f9_;
637
+ };
638
+
639
+ // 6.1.3.2 Tuple creation functions.
640
+
641
+ // Known limitations: we don't support passing an
642
+ // std::tr1::reference_wrapper<T> to make_tuple(). And we don't
643
+ // implement tie().
644
+
645
+ inline tuple<> make_tuple() { return tuple<>(); }
646
+
647
+ template <GTEST_1_TYPENAMES_(T)>
648
+ inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
649
+ return GTEST_1_TUPLE_(T)(f0);
650
+ }
651
+
652
+ template <GTEST_2_TYPENAMES_(T)>
653
+ inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
654
+ return GTEST_2_TUPLE_(T)(f0, f1);
655
+ }
656
+
657
+ template <GTEST_3_TYPENAMES_(T)>
658
+ inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
659
+ return GTEST_3_TUPLE_(T)(f0, f1, f2);
660
+ }
661
+
662
+ template <GTEST_4_TYPENAMES_(T)>
663
+ inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
664
+ const T3& f3) {
665
+ return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
666
+ }
667
+
668
+ template <GTEST_5_TYPENAMES_(T)>
669
+ inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
670
+ const T3& f3, const T4& f4) {
671
+ return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
672
+ }
673
+
674
+ template <GTEST_6_TYPENAMES_(T)>
675
+ inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
676
+ const T3& f3, const T4& f4, const T5& f5) {
677
+ return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
678
+ }
679
+
680
+ template <GTEST_7_TYPENAMES_(T)>
681
+ inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
682
+ const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
683
+ return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
684
+ }
685
+
686
+ template <GTEST_8_TYPENAMES_(T)>
687
+ inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
688
+ const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
689
+ return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
690
+ }
691
+
692
+ template <GTEST_9_TYPENAMES_(T)>
693
+ inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
694
+ const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
695
+ const T8& f8) {
696
+ return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
697
+ }
698
+
699
+ template <GTEST_10_TYPENAMES_(T)>
700
+ inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
701
+ const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
702
+ const T8& f8, const T9& f9) {
703
+ return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
704
+ }
705
+
706
+ // 6.1.3.3 Tuple helper classes.
707
+
708
+ template <typename Tuple> struct tuple_size;
709
+
710
+ template <GTEST_0_TYPENAMES_(T)>
711
+ struct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
712
+
713
+ template <GTEST_1_TYPENAMES_(T)>
714
+ struct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
715
+
716
+ template <GTEST_2_TYPENAMES_(T)>
717
+ struct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
718
+
719
+ template <GTEST_3_TYPENAMES_(T)>
720
+ struct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
721
+
722
+ template <GTEST_4_TYPENAMES_(T)>
723
+ struct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
724
+
725
+ template <GTEST_5_TYPENAMES_(T)>
726
+ struct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
727
+
728
+ template <GTEST_6_TYPENAMES_(T)>
729
+ struct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
730
+
731
+ template <GTEST_7_TYPENAMES_(T)>
732
+ struct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
733
+
734
+ template <GTEST_8_TYPENAMES_(T)>
735
+ struct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
736
+
737
+ template <GTEST_9_TYPENAMES_(T)>
738
+ struct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
739
+
740
+ template <GTEST_10_TYPENAMES_(T)>
741
+ struct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
742
+
743
+ template <int k, class Tuple>
744
+ struct tuple_element {
745
+ typedef typename gtest_internal::TupleElement<
746
+ k < (tuple_size<Tuple>::value), k, Tuple>::type type;
747
+ };
748
+
749
+ #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
750
+
751
+ // 6.1.3.4 Element access.
752
+
753
+ namespace gtest_internal {
754
+
755
+ template <>
756
+ class Get<0> {
757
+ public:
758
+ template <class Tuple>
759
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
760
+ Field(Tuple& t) { return t.f0_; } // NOLINT
761
+
762
+ template <class Tuple>
763
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
764
+ ConstField(const Tuple& t) { return t.f0_; }
765
+ };
766
+
767
+ template <>
768
+ class Get<1> {
769
+ public:
770
+ template <class Tuple>
771
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
772
+ Field(Tuple& t) { return t.f1_; } // NOLINT
773
+
774
+ template <class Tuple>
775
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
776
+ ConstField(const Tuple& t) { return t.f1_; }
777
+ };
778
+
779
+ template <>
780
+ class Get<2> {
781
+ public:
782
+ template <class Tuple>
783
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
784
+ Field(Tuple& t) { return t.f2_; } // NOLINT
785
+
786
+ template <class Tuple>
787
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
788
+ ConstField(const Tuple& t) { return t.f2_; }
789
+ };
790
+
791
+ template <>
792
+ class Get<3> {
793
+ public:
794
+ template <class Tuple>
795
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
796
+ Field(Tuple& t) { return t.f3_; } // NOLINT
797
+
798
+ template <class Tuple>
799
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
800
+ ConstField(const Tuple& t) { return t.f3_; }
801
+ };
802
+
803
+ template <>
804
+ class Get<4> {
805
+ public:
806
+ template <class Tuple>
807
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
808
+ Field(Tuple& t) { return t.f4_; } // NOLINT
809
+
810
+ template <class Tuple>
811
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
812
+ ConstField(const Tuple& t) { return t.f4_; }
813
+ };
814
+
815
+ template <>
816
+ class Get<5> {
817
+ public:
818
+ template <class Tuple>
819
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
820
+ Field(Tuple& t) { return t.f5_; } // NOLINT
821
+
822
+ template <class Tuple>
823
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
824
+ ConstField(const Tuple& t) { return t.f5_; }
825
+ };
826
+
827
+ template <>
828
+ class Get<6> {
829
+ public:
830
+ template <class Tuple>
831
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
832
+ Field(Tuple& t) { return t.f6_; } // NOLINT
833
+
834
+ template <class Tuple>
835
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
836
+ ConstField(const Tuple& t) { return t.f6_; }
837
+ };
838
+
839
+ template <>
840
+ class Get<7> {
841
+ public:
842
+ template <class Tuple>
843
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
844
+ Field(Tuple& t) { return t.f7_; } // NOLINT
845
+
846
+ template <class Tuple>
847
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
848
+ ConstField(const Tuple& t) { return t.f7_; }
849
+ };
850
+
851
+ template <>
852
+ class Get<8> {
853
+ public:
854
+ template <class Tuple>
855
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
856
+ Field(Tuple& t) { return t.f8_; } // NOLINT
857
+
858
+ template <class Tuple>
859
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
860
+ ConstField(const Tuple& t) { return t.f8_; }
861
+ };
862
+
863
+ template <>
864
+ class Get<9> {
865
+ public:
866
+ template <class Tuple>
867
+ static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
868
+ Field(Tuple& t) { return t.f9_; } // NOLINT
869
+
870
+ template <class Tuple>
871
+ static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
872
+ ConstField(const Tuple& t) { return t.f9_; }
873
+ };
874
+
875
+ } // namespace gtest_internal
876
+
877
+ template <int k, GTEST_10_TYPENAMES_(T)>
878
+ GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
879
+ get(GTEST_10_TUPLE_(T)& t) {
880
+ return gtest_internal::Get<k>::Field(t);
881
+ }
882
+
883
+ template <int k, GTEST_10_TYPENAMES_(T)>
884
+ GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
885
+ get(const GTEST_10_TUPLE_(T)& t) {
886
+ return gtest_internal::Get<k>::ConstField(t);
887
+ }
888
+
889
+ // 6.1.3.5 Relational operators
890
+
891
+ // We only implement == and !=, as we don't have a need for the rest yet.
892
+
893
+ namespace gtest_internal {
894
+
895
+ // SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
896
+ // first k fields of t1 equals the first k fields of t2.
897
+ // SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
898
+ // k1 != k2.
899
+ template <int kSize1, int kSize2>
900
+ struct SameSizeTuplePrefixComparator;
901
+
902
+ template <>
903
+ struct SameSizeTuplePrefixComparator<0, 0> {
904
+ template <class Tuple1, class Tuple2>
905
+ static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
906
+ return true;
907
+ }
908
+ };
909
+
910
+ template <int k>
911
+ struct SameSizeTuplePrefixComparator<k, k> {
912
+ template <class Tuple1, class Tuple2>
913
+ static bool Eq(const Tuple1& t1, const Tuple2& t2) {
914
+ return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
915
+ ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
916
+ }
917
+ };
918
+
919
+ } // namespace gtest_internal
920
+
921
+ template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
922
+ inline bool operator==(const GTEST_10_TUPLE_(T)& t,
923
+ const GTEST_10_TUPLE_(U)& u) {
924
+ return gtest_internal::SameSizeTuplePrefixComparator<
925
+ tuple_size<GTEST_10_TUPLE_(T)>::value,
926
+ tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
927
+ }
928
+
929
+ template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
930
+ inline bool operator!=(const GTEST_10_TUPLE_(T)& t,
931
+ const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
932
+
933
+ // 6.1.4 Pairs.
934
+ // Unimplemented.
935
+
936
+ } // namespace tr1
937
+ } // namespace std
938
+
939
+ #undef GTEST_0_TUPLE_
940
+ #undef GTEST_1_TUPLE_
941
+ #undef GTEST_2_TUPLE_
942
+ #undef GTEST_3_TUPLE_
943
+ #undef GTEST_4_TUPLE_
944
+ #undef GTEST_5_TUPLE_
945
+ #undef GTEST_6_TUPLE_
946
+ #undef GTEST_7_TUPLE_
947
+ #undef GTEST_8_TUPLE_
948
+ #undef GTEST_9_TUPLE_
949
+ #undef GTEST_10_TUPLE_
950
+
951
+ #undef GTEST_0_TYPENAMES_
952
+ #undef GTEST_1_TYPENAMES_
953
+ #undef GTEST_2_TYPENAMES_
954
+ #undef GTEST_3_TYPENAMES_
955
+ #undef GTEST_4_TYPENAMES_
956
+ #undef GTEST_5_TYPENAMES_
957
+ #undef GTEST_6_TYPENAMES_
958
+ #undef GTEST_7_TYPENAMES_
959
+ #undef GTEST_8_TYPENAMES_
960
+ #undef GTEST_9_TYPENAMES_
961
+ #undef GTEST_10_TYPENAMES_
962
+
963
+ #undef GTEST_DECLARE_TUPLE_AS_FRIEND_
964
+ #undef GTEST_BY_REF_
965
+ #undef GTEST_ADD_REF_
966
+ #undef GTEST_TUPLE_ELEMENT_
967
+
968
+ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_