Orxonox  0.0.5 Codename: Arcturus
gtest-tuple.h
Go to the documentation of this file.
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>
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 
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 
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 
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 
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 
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,
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 
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,
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 
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,
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 
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,
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 
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,
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)>
607  return CopyFrom(t);
608  }
609 
611 
612  template <GTEST_10_TYPENAMES_(U)>
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>
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>
760  Field(Tuple& t) { return t.f0_; } // NOLINT
761 
762  template <class Tuple>
764  ConstField(const Tuple& t) { return t.f0_; }
765 };
766 
767 template <>
768 class Get<1> {
769  public:
770  template <class Tuple>
772  Field(Tuple& t) { return t.f1_; } // NOLINT
773 
774  template <class Tuple>
776  ConstField(const Tuple& t) { return t.f1_; }
777 };
778 
779 template <>
780 class Get<2> {
781  public:
782  template <class Tuple>
784  Field(Tuple& t) { return t.f2_; } // NOLINT
785 
786  template <class Tuple>
788  ConstField(const Tuple& t) { return t.f2_; }
789 };
790 
791 template <>
792 class Get<3> {
793  public:
794  template <class Tuple>
796  Field(Tuple& t) { return t.f3_; } // NOLINT
797 
798  template <class Tuple>
800  ConstField(const Tuple& t) { return t.f3_; }
801 };
802 
803 template <>
804 class Get<4> {
805  public:
806  template <class Tuple>
808  Field(Tuple& t) { return t.f4_; } // NOLINT
809 
810  template <class Tuple>
812  ConstField(const Tuple& t) { return t.f4_; }
813 };
814 
815 template <>
816 class Get<5> {
817  public:
818  template <class Tuple>
820  Field(Tuple& t) { return t.f5_; } // NOLINT
821 
822  template <class Tuple>
824  ConstField(const Tuple& t) { return t.f5_; }
825 };
826 
827 template <>
828 class Get<6> {
829  public:
830  template <class Tuple>
832  Field(Tuple& t) { return t.f6_; } // NOLINT
833 
834  template <class Tuple>
836  ConstField(const Tuple& t) { return t.f6_; }
837 };
838 
839 template <>
840 class Get<7> {
841  public:
842  template <class Tuple>
844  Field(Tuple& t) { return t.f7_; } // NOLINT
845 
846  template <class Tuple>
848  ConstField(const Tuple& t) { return t.f7_; }
849 };
850 
851 template <>
852 class Get<8> {
853  public:
854  template <class Tuple>
856  Field(Tuple& t) { return t.f8_; } // NOLINT
857 
858  template <class Tuple>
860  ConstField(const Tuple& t) { return t.f8_; }
861 };
862 
863 template <>
864 class Get<9> {
865  public:
866  template <class Tuple>
868  Field(Tuple& t) { return t.f9_; } // NOLINT
869 
870  template <class Tuple>
872  ConstField(const Tuple& t) { return t.f9_; }
873 };
874 
875 } // namespace gtest_internal
876 
877 template <int k, GTEST_10_TYPENAMES_(T)>
879 get(GTEST_10_TUPLE_(T)& t) {
881 }
882 
883 template <int k, GTEST_10_TYPENAMES_(T)>
885 get(const GTEST_10_TUPLE_(T)& 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>
901 
902 template <>
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>
912  template <class Tuple1, class Tuple2>
913  static bool Eq(const Tuple1& t1, const Tuple2& 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) {
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_
const T1 const T2 const T3 const T4 const T5 const T6 const T7 & f7
Definition: gtest-tuple.h:688
const T1 const T2 const T3 & f3
Definition: gtest-tuple.h:664
tuple & operator=(const tuple &)
Definition: gtest-tuple.h:179
tuple()
Definition: gtest-tuple.h:586
T8 f8_
Definition: gtest-tuple.h:635
const T1 const T2 const T3 const T4 const T5 const T6 const T7 const T8 const T9 & f9
Definition: gtest-tuple.h:702
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:771
T & type
Definition: gtest-tuple.h:127
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:807
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:783
class GTEST_6_TUPLE_(T)
Definition: gtest-tuple.h:380
class GTEST_9_TUPLE_(T)
Definition: gtest-tuple.h:528
tuple(const tuple &t)
Definition: gtest-tuple.h:595
STL namespace.
Definition: gtest-tuple.h:109
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:835
GTEST_DECLARE_TUPLE_AS_FRIEND_ tuple & CopyFrom(const GTEST_10_TUPLE_(U)&t)
Definition: gtest-tuple.h:613
class GTEST_4_TUPLE_(T)
Definition: gtest-tuple.h:295
T0 f0_
Definition: gtest-tuple.h:627
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:843
internal::EqMatcher< T > Eq(T x)
Definition: gmock-matchers.h:2584
Definition: gtest-tuple.h:175
T2 f2_
Definition: gtest-tuple.h:629
Definition: gtest-tuple.h:127
tuple make_tuple()
Definition: gtest-tuple.h:645
class GTEST_2_TUPLE_(T)
Definition: gtest-tuple.h:215
tuple(const tuple &)
Definition: gtest-tuple.h:178
Definition: gtest-tuple.h:744
const T1 const T2 const T3 const T4 & f4
Definition: gtest-tuple.h:670
typedef void(ENET_CALLBACK *ENetPacketFreeCallback)(struct _ENetPacket *)
static bool Eq(const Tuple1 &, const Tuple2 &)
Definition: gtest-tuple.h:905
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:855
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:871
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:819
GTEST_10_TUPLE_(T) make_tuple(const T0 &f0
const T1 const T2 const T3 const T4 const T5 const T6 & f6
Definition: gtest-tuple.h:682
Definition: gtest-tuple.h:117
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:811
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:775
T1 f1_
Definition: gtest-tuple.h:628
GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(const GTEST_10_TUPLE_(T)&t)
Definition: gtest-tuple.h:884
tuple & operator=(const tuple &t)
Definition: gtest-tuple.h:603
bool operator==(const GTEST_10_TUPLE_(T)&t, const GTEST_10_TUPLE_(U)&u)
Definition: gtest-tuple.h:922
Definition: gtest-tuple.h:140
tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9)
Definition: gtest-tuple.h:589
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:759
const T1 const T2 const T3 const T4 const T5 const T6 const T7 const T8 & f8
Definition: gtest-tuple.h:695
Definition: InputPrereqs.h:78
T & type
Definition: gtest-tuple.h:119
class GTEST_5_TUPLE_(T)
Definition: gtest-tuple.h:336
static bool Eq(const Tuple1 &t1, const Tuple2 &t2)
Definition: gtest-tuple.h:913
T9 f9_
Definition: gtest-tuple.h:636
class GTEST_8_TUPLE_(T)
Definition: gtest-tuple.h:476
GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(GTEST_10_TUPLE_(T)&t)
Definition: gtest-tuple.h:878
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:795
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:763
T4 f4_
Definition: gtest-tuple.h:631
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:787
#define GTEST_TUPLE_ELEMENT_(k, Tuple)
Definition: gtest-tuple.h:749
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:859
class GTEST_7_TUPLE_(T)
Definition: gtest-tuple.h:427
Definition: gtest-tuple.h:708
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:847
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:799
class GTEST_1_TUPLE_(T)
Definition: gtest-tuple.h:183
class GTEST_3_TUPLE_(T)
Definition: gtest-tuple.h:258
const T1 const T2 const T3 const T4 const T5 & f5
Definition: gtest-tuple.h:676
bool operator!=(const GTEST_10_TUPLE_(T)&t, const GTEST_10_TUPLE_(U)&u)
Definition: gtest-tuple.h:930
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:867
const T & type
Definition: gtest-tuple.h:117
T5 f5_
Definition: gtest-tuple.h:632
tuple & operator=(const GTEST_10_TUPLE_(U)&t)
Definition: gtest-tuple.h:606
#define GTEST_0_TUPLE_(T)
Definition: gtest-tuple.h:55
const T1 & f1
Definition: gtest-tuple.h:653
#define GTEST_DECLARE_TUPLE_AS_FRIEND_
Definition: gtest-tuple.h:49
T3 f3_
Definition: gtest-tuple.h:630
const T1 const T2 & f2
Definition: gtest-tuple.h:658
PolymorphicMatcher< internal::FieldMatcher< Class, FieldType > > Field(FieldType Class::*field, const FieldMatcher &matcher)
Definition: gmock-matchers.h:2693
Definition: InputPrereqs.h:80
tuple()
Definition: gtest-tuple.h:177
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) ConstField(const Tuple &t)
Definition: gtest-tuple.h:823
tuple(const GTEST_10_TUPLE_(U)&t)
Definition: gtest-tuple.h:599
Definition: gtest-tuple.h:135
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) Field(Tuple &t)
Definition: gtest-tuple.h:831
T6 f6_
Definition: gtest-tuple.h:633
T & type
Definition: gtest-tuple.h:129
T7 f7_
Definition: gtest-tuple.h:634