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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:06:22