summaryrefslogtreecommitdiffstats
path: root/include/gtest/internal
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2009-06-24 23:02:50 (GMT)
committerzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2009-06-24 23:02:50 (GMT)
commite6095deec89dcf5237948b3460d84a137622f16c (patch)
treec0e3cbdc428e9461fa43b7f7d28636179ef0917a /include/gtest/internal
parentef29ce3576240e51f289e49b2c4e156b414d6685 (diff)
downloadgoogletest-e6095deec89dcf5237948b3460d84a137622f16c.zip
googletest-e6095deec89dcf5237948b3460d84a137622f16c.tar.gz
googletest-e6095deec89dcf5237948b3460d84a137622f16c.tar.bz2
Makes gtest's tuple implementation work with Symbian 5th edition by bypassing 2 compiler bugs (by Zhanyong Wan); refactors for the event listener API (by Vlad Losev).
Diffstat (limited to 'include/gtest/internal')
-rw-r--r--include/gtest/internal/gtest-tuple.h79
-rw-r--r--include/gtest/internal/gtest-tuple.h.pump25
2 files changed, 70 insertions, 34 deletions
diff --git a/include/gtest/internal/gtest-tuple.h b/include/gtest/internal/gtest-tuple.h
index be23e8e..5ef4920 100644
--- a/include/gtest/internal/gtest-tuple.h
+++ b/include/gtest/internal/gtest-tuple.h
@@ -38,18 +38,38 @@
#include <utility> // For ::std::pair.
+// The compiler used in Symbian 5th Edition (__S60_50__) has a bug
+// that prevents us from declaring the tuple template as a friend (it
+// complains that tuple is redefined). This hack bypasses the bug by
+// declaring the members that should otherwise be private as public.
+#if defined(__SYMBIAN32__) && __S60_50__
+#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
+#else
+#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
+ template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
+ private:
+#endif
+
// GTEST_n_TUPLE_(T) is the type of an n-tuple.
#define GTEST_0_TUPLE_(T) tuple<>
-#define GTEST_1_TUPLE_(T) tuple<T##0>
-#define GTEST_2_TUPLE_(T) tuple<T##0, T##1>
-#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2>
-#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3>
-#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4>
-#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5>
-#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6>
-#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, T##7>
+#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
+ void, void, void>
+#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
+ void, void, void>
+#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
+ void, void, void>
+#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
+ void, void, void>
+#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
+ void, void, void>
+#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
+ void, void, void>
+#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
+ void, void, void>
+#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
+ T##7, void, void>
#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
- T##7, T##8>
+ T##7, T##8, void>
#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
T##7, T##8, T##9>
@@ -162,7 +182,6 @@ template <GTEST_1_TYPENAMES_(T)>
class GTEST_1_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -180,7 +199,8 @@ class GTEST_1_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_1_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -194,7 +214,6 @@ template <GTEST_2_TYPENAMES_(T)>
class GTEST_2_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -221,7 +240,8 @@ class GTEST_2_TUPLE_(T) {
return *this;
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_2_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -237,7 +257,6 @@ template <GTEST_3_TYPENAMES_(T)>
class GTEST_3_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -256,7 +275,8 @@ class GTEST_3_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_3_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -274,7 +294,6 @@ template <GTEST_4_TYPENAMES_(T)>
class GTEST_4_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -295,7 +314,8 @@ class GTEST_4_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_4_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -315,7 +335,6 @@ template <GTEST_5_TYPENAMES_(T)>
class GTEST_5_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -337,7 +356,8 @@ class GTEST_5_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_5_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -359,7 +379,6 @@ template <GTEST_6_TYPENAMES_(T)>
class GTEST_6_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -382,7 +401,8 @@ class GTEST_6_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_6_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -406,7 +426,6 @@ template <GTEST_7_TYPENAMES_(T)>
class GTEST_7_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -429,7 +448,8 @@ class GTEST_7_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_7_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -455,7 +475,6 @@ template <GTEST_8_TYPENAMES_(T)>
class GTEST_8_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -479,7 +498,8 @@ class GTEST_8_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_8_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -507,7 +527,6 @@ template <GTEST_9_TYPENAMES_(T)>
class GTEST_9_TUPLE_(T) {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -531,7 +550,8 @@ class GTEST_9_TUPLE_(T) {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_9_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -561,7 +581,6 @@ template <GTEST_10_TYPENAMES_(T)>
class tuple {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_10_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -586,7 +605,8 @@ class tuple {
return CopyFrom(t);
}
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_10_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
f0_ = t.f0_;
@@ -938,6 +958,7 @@ inline bool operator!=(const GTEST_10_TUPLE_(T)& t,
#undef GTEST_9_TYPENAMES_
#undef GTEST_10_TYPENAMES_
+#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
#undef GTEST_BY_REF_
#undef GTEST_ADD_REF_
#undef GTEST_TUPLE_ELEMENT_
diff --git a/include/gtest/internal/gtest-tuple.h.pump b/include/gtest/internal/gtest-tuple.h.pump
index 33fd6b6..12821d8 100644
--- a/include/gtest/internal/gtest-tuple.h.pump
+++ b/include/gtest/internal/gtest-tuple.h.pump
@@ -39,15 +39,29 @@ $$ This meta comment fixes auto-indentation in Emacs. }}
#include <utility> // For ::std::pair.
+// The compiler used in Symbian 5th Edition (__S60_50__) has a bug
+// that prevents us from declaring the tuple template as a friend (it
+// complains that tuple is redefined). This hack bypasses the bug by
+// declaring the members that should otherwise be private as public.
+#if defined(__SYMBIAN32__) && __S60_50__
+#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
+#else
+#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
+ template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple; \
+ private:
+#endif
+
$range i 0..n-1
$range j 0..n
$range k 1..n
// GTEST_n_TUPLE_(T) is the type of an n-tuple.
+#define GTEST_0_TUPLE_(T) tuple<>
-$for j [[
-$range m 0..j-1
-#define GTEST_$(j)_TUPLE_(T) tuple<$for m, [[T##$m]]>
+$for k [[
+$range m 0..k-1
+$range m2 k..n-1
+#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]>
]]
@@ -125,7 +139,6 @@ template <GTEST_$(k)_TYPENAMES_(T)>
class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] {
public:
template <int k> friend class gtest_internal::Get;
- template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple;
tuple() {}
@@ -160,7 +173,8 @@ $if k == 2 [[
]]
- private:
+ GTEST_DECLARE_TUPLE_AS_FRIEND_
+
template <GTEST_$(k)_TYPENAMES_(U)>
tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) {
@@ -313,6 +327,7 @@ $for j [[
]]
+#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
#undef GTEST_BY_REF_
#undef GTEST_ADD_REF_
#undef GTEST_TUPLE_ELEMENT_