38 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 39 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 48 #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) 49 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: 51 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ 52 template <GTEST_10_TYPENAMES_(U)> friend class tuple; \ 57 #define GTEST_0_TUPLE_(T) tuple<> 58 #define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \ 60 #define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \ 62 #define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \ 64 #define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \ 66 #define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \ 68 #define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \ 70 #define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 72 #define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 74 #define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 76 #define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 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, \ 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 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,
117 namespace gtest_internal
121 template <
typename T>
123 template <
typename T>
127 #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type 131 template <
typename T>
133 template <
typename T>
137 #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type 140 template <
int k>
class Get;
144 template <
bool kIndexVal
id,
int kIndex,
class Tuple>
147 template <GTEST_10_TYPENAMES_(T)>
153 template <GTEST_10_TYPENAMES_(T)>
159 template <GTEST_10_TYPENAMES_(T)>
165 template <GTEST_10_TYPENAMES_(T)>
171 template <GTEST_10_TYPENAMES_(T)>
177 template <GTEST_10_TYPENAMES_(T)>
183 template <GTEST_10_TYPENAMES_(T)>
189 template <GTEST_10_TYPENAMES_(T)>
195 template <GTEST_10_TYPENAMES_(T)>
201 template <GTEST_10_TYPENAMES_(T)>
218 template <GTEST_1_TYPENAMES_(T)>
219 class GTEST_1_TUPLE_(T)
228 tuple(
const tuple & t) : f0_(t.
f0_) {}
230 template <GTEST_1_TYPENAMES_(U)>
233 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
235 template <GTEST_1_TYPENAMES_(U)>
243 template <GTEST_1_TYPENAMES_(U)>
253 template <GTEST_2_TYPENAMES_(T)>
254 class GTEST_2_TUPLE_(T)
259 tuple() : f0_(), f1_() {}
264 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_) {}
266 template <GTEST_2_TYPENAMES_(U)>
268 template <
typename U0,
typename U1>
269 tuple(const ::std::pair<U0, U1> & p) : f0_(p.first), f1_(p.second) {}
271 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
273 template <GTEST_2_TYPENAMES_(U)>
278 template <
typename U0,
typename U1>
279 tuple & operator=(const ::std::pair<U0, U1> & p)
288 template <GTEST_2_TYPENAMES_(U)>
300 template <GTEST_3_TYPENAMES_(T)>
301 class GTEST_3_TUPLE_(T)
306 tuple() : f0_(), f1_(), f2_() {}
311 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_) {}
313 template <GTEST_3_TYPENAMES_(U)>
314 tuple(
const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
316 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
318 template <GTEST_3_TYPENAMES_(U)>
326 template <GTEST_3_TYPENAMES_(U)>
340 template <GTEST_4_TYPENAMES_(T)>
341 class GTEST_4_TUPLE_(T)
346 tuple() : f0_(), f1_(), f2_(), f3_() {}
352 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_) {}
354 template <GTEST_4_TYPENAMES_(U)>
355 tuple(
const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
358 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
360 template <GTEST_4_TYPENAMES_(U)>
368 template <GTEST_4_TYPENAMES_(U)>
384 template <GTEST_5_TYPENAMES_(T)>
385 class GTEST_5_TUPLE_(T)
390 tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
396 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_),
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_) {}
403 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
405 template <GTEST_5_TYPENAMES_(U)>
413 template <GTEST_5_TYPENAMES_(U)>
431 template <GTEST_6_TYPENAMES_(T)>
432 class GTEST_6_TUPLE_(T)
437 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
444 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_),
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_) {}
451 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
453 template <GTEST_6_TYPENAMES_(U)>
461 template <GTEST_6_TYPENAMES_(U)>
481 template <GTEST_7_TYPENAMES_(T)>
482 class GTEST_7_TUPLE_(T)
487 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
492 f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
494 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_),
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_) {}
501 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
503 template <GTEST_7_TYPENAMES_(U)>
511 template <GTEST_7_TYPENAMES_(U)>
533 template <GTEST_8_TYPENAMES_(T)>
534 class GTEST_8_TUPLE_(T)
539 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
545 f5_(f5), f6_(f6), f7_(f7) {}
547 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_),
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_) {}
554 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
556 template <GTEST_8_TYPENAMES_(U)>
564 template <GTEST_8_TYPENAMES_(U)>
588 template <GTEST_9_TYPENAMES_(T)>
589 class GTEST_9_TUPLE_(T)
594 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
600 f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
602 tuple(
const tuple & t) : f0_(t.
f0_), f1_(t.
f1_), f2_(t.
f2_), f3_(t.
f3_),
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_) {}
609 tuple & operator=(
const tuple & t) {
return CopyFrom(t); }
611 template <GTEST_9_TYPENAMES_(U)>
619 template <GTEST_9_TYPENAMES_(U)>
645 template <GTEST_10_TYPENAMES_(T)>
651 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
658 f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
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_) {}
663 template <GTEST_10_TYPENAMES_(U)>
665 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
670 template <GTEST_10_TYPENAMES_(U)>
678 template <GTEST_10_TYPENAMES_(U)>
714 template <GTEST_1_TYPENAMES_(T)>
720 template <GTEST_2_TYPENAMES_(T)>
726 template <GTEST_3_TYPENAMES_(T)>
732 template <GTEST_4_TYPENAMES_(T)>
739 template <GTEST_5_TYPENAMES_(T)>
741 const T3 & f3,
const T4 & f4)
746 template <GTEST_6_TYPENAMES_(T)>
748 const T3 & f3,
const T4 & f4,
const T5 & f5)
753 template <GTEST_7_TYPENAMES_(T)>
755 const T3 & f3,
const T4 & f4,
const T5 & f5,
const T6 & f6)
760 template <GTEST_8_TYPENAMES_(T)>
762 const T3 & f3,
const T4 & f4,
const T5 & f5,
const T6 & f6,
const T7 & f7)
767 template <GTEST_9_TYPENAMES_(T)>
769 const T3 & f3,
const T4 & f4,
const T5 & f5,
const T6 & f6,
const T7 & f7,
775 template <GTEST_10_TYPENAMES_(T)>
777 const T3 & f3,
const T4 & f4,
const T5 & f5,
const T6 & f6,
const T7 & f7,
778 const T8 & f8,
const T9 &
f9)
787 template <GTEST_0_TYPENAMES_(T)>
790 static const int value = 0;
793 template <GTEST_1_TYPENAMES_(T)>
796 static const int value = 1;
799 template <GTEST_2_TYPENAMES_(T)>
802 static const int value = 2;
805 template <GTEST_3_TYPENAMES_(T)>
808 static const int value = 3;
811 template <GTEST_4_TYPENAMES_(T)>
814 static const int value = 4;
817 template <GTEST_5_TYPENAMES_(T)>
820 static const int value = 5;
823 template <GTEST_6_TYPENAMES_(T)>
826 static const int value = 6;
829 template <GTEST_7_TYPENAMES_(T)>
832 static const int value = 7;
835 template <GTEST_8_TYPENAMES_(T)>
838 static const int value = 8;
841 template <GTEST_9_TYPENAMES_(T)>
844 static const int value = 9;
847 template <GTEST_10_TYPENAMES_(T)>
850 static const int value = 10;
853 template <
int k,
class Tuple>
857 k < (tuple_size<Tuple>::value), k, Tuple>::
type type;
860 #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type 864 namespace gtest_internal
871 template <
class Tuple>
873 Field(Tuple & t) {
return t.f0_; }
875 template <
class Tuple>
877 ConstField(const Tuple & t) {
return t.f0_; }
884 template <
class Tuple>
886 Field(Tuple & t) {
return t.f1_; }
888 template <
class Tuple>
890 ConstField(const Tuple & t) {
return t.f1_; }
897 template <
class Tuple>
899 Field(Tuple & t) {
return t.f2_; }
901 template <
class Tuple>
903 ConstField(const Tuple & t) {
return t.f2_; }
910 template <
class Tuple>
912 Field(Tuple & t) {
return t.f3_; }
914 template <
class Tuple>
916 ConstField(const Tuple & t) {
return t.f3_; }
923 template <
class Tuple>
925 Field(Tuple & t) {
return t.f4_; }
927 template <
class Tuple>
929 ConstField(const Tuple & t) {
return t.f4_; }
936 template <
class Tuple>
938 Field(Tuple & t) {
return t.f5_; }
940 template <
class Tuple>
942 ConstField(const Tuple & t) {
return t.f5_; }
949 template <
class Tuple>
951 Field(Tuple & t) {
return t.f6_; }
953 template <
class Tuple>
955 ConstField(const Tuple & t) {
return t.f6_; }
962 template <
class Tuple>
964 Field(Tuple & t) {
return t.f7_; }
966 template <
class Tuple>
968 ConstField(const Tuple & t) {
return t.f7_; }
975 template <
class Tuple>
977 Field(Tuple & t) {
return t.f8_; }
979 template <
class Tuple>
981 ConstField(const Tuple & t) {
return t.f8_; }
988 template <
class Tuple>
990 Field(Tuple & t) {
return t.f9_; }
992 template <
class Tuple>
994 ConstField(const Tuple & t) {
return t.f9_; }
999 template <
int k, GTEST_10_TYPENAMES_(T)>
1006 template <
int k, GTEST_10_TYPENAMES_(T)>
1017 namespace gtest_internal
1024 template <
int kSize1,
int kSize2>
1030 template <
class Tuple1,
class Tuple2>
1040 template <
class Tuple1,
class Tuple2>
1050 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
1059 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
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_ 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_ 1093 #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ 1094 #undef GTEST_BY_REF_ 1095 #undef GTEST_ADD_REF_ 1096 #undef GTEST_TUPLE_ELEMENT_ 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
tuple & operator=(const tuple &)
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)
static bool Eq(const Tuple1 &, const Tuple2 &)
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)
tuple & operator=(const tuple &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)
static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) ConstField(const Tuple &t)
static bool Eq(const Tuple1 &t1, const Tuple2 &t2)
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) Field(Tuple &t)
#define GTEST_TUPLE_ELEMENT_(k, Tuple)
tuple(const GTEST_10_TUPLE_(U)&t)
#define GTEST_DECLARE_TUPLE_AS_FRIEND_
static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) Field(Tuple &t)