Index: testing/gmock/include/gmock/internal/gmock-internal-utils.h |
diff --git a/testing/gmock/include/gmock/internal/gmock-internal-utils.h b/testing/gmock/include/gmock/internal/gmock-internal-utils.h |
index 0c33fdd00583b58bd5dc04f1552bfd70e1c139ab..69a233804b552d5e1aab1f1fa723ff55bdb9508b 100644 |
--- a/testing/gmock/include/gmock/internal/gmock-internal-utils.h |
+++ b/testing/gmock/include/gmock/internal/gmock-internal-utils.h |
@@ -57,9 +57,6 @@ |
#define GMOCK_ATTRIBUTE_UNUSED_ |
#endif // __GNUC__ |
-class ProtocolMessage; |
-namespace proto2 { class Message; } |
- |
namespace testing { |
namespace internal { |
@@ -69,77 +66,6 @@ namespace internal { |
// "foo_bar_123" are converted to "foo bar 123". |
string ConvertIdentifierNameToWords(const char* id_name); |
-// Defining a variable of type CompileAssertTypesEqual<T1, T2> will cause a |
-// compiler error iff T1 and T2 are different types. |
-template <typename T1, typename T2> |
-struct CompileAssertTypesEqual; |
- |
-template <typename T> |
-struct CompileAssertTypesEqual<T, T> { |
-}; |
- |
-// Removes the reference from a type if it is a reference type, |
-// otherwise leaves it unchanged. This is the same as |
-// tr1::remove_reference, which is not widely available yet. |
-template <typename T> |
-struct RemoveReference { typedef T type; }; // NOLINT |
-template <typename T> |
-struct RemoveReference<T&> { typedef T type; }; // NOLINT |
- |
-// A handy wrapper around RemoveReference that works when the argument |
-// T depends on template parameters. |
-#define GMOCK_REMOVE_REFERENCE_(T) \ |
- typename ::testing::internal::RemoveReference<T>::type |
- |
-// Removes const from a type if it is a const type, otherwise leaves |
-// it unchanged. This is the same as tr1::remove_const, which is not |
-// widely available yet. |
-template <typename T> |
-struct RemoveConst { typedef T type; }; // NOLINT |
-template <typename T> |
-struct RemoveConst<const T> { typedef T type; }; // NOLINT |
- |
-// MSVC 8.0 has a bug which causes the above definition to fail to |
-// remove the const in 'const int[3]'. The following specialization |
-// works around the bug. However, it causes trouble with gcc and thus |
-// needs to be conditionally compiled. |
-#ifdef _MSC_VER |
-template <typename T, size_t N> |
-struct RemoveConst<T[N]> { |
- typedef typename RemoveConst<T>::type type[N]; |
-}; |
-#endif // _MSC_VER |
- |
-// A handy wrapper around RemoveConst that works when the argument |
-// T depends on template parameters. |
-#define GMOCK_REMOVE_CONST_(T) \ |
- typename ::testing::internal::RemoveConst<T>::type |
- |
-// Adds reference to a type if it is not a reference type, |
-// otherwise leaves it unchanged. This is the same as |
-// tr1::add_reference, which is not widely available yet. |
-template <typename T> |
-struct AddReference { typedef T& type; }; // NOLINT |
-template <typename T> |
-struct AddReference<T&> { typedef T& type; }; // NOLINT |
- |
-// A handy wrapper around AddReference that works when the argument T |
-// depends on template parameters. |
-#define GMOCK_ADD_REFERENCE_(T) \ |
- typename ::testing::internal::AddReference<T>::type |
- |
-// Adds a reference to const on top of T as necessary. For example, |
-// it transforms |
-// |
-// char ==> const char& |
-// const char ==> const char& |
-// char& ==> const char& |
-// const char& ==> const char& |
-// |
-// The argument T must depend on some template parameters. |
-#define GMOCK_REFERENCE_TO_CONST_(T) \ |
- GMOCK_ADD_REFERENCE_(const GMOCK_REMOVE_REFERENCE_(T)) |
- |
// PointeeOf<Pointer>::type is the type of a value pointed to by a |
// Pointer, which can be either a smart pointer or a raw pointer. The |
// following default implementation is for the case where Pointer is a |
@@ -174,53 +100,6 @@ struct LinkedPtrLessThan { |
} |
}; |
-// ImplicitlyConvertible<From, To>::value is a compile-time bool |
-// constant that's true iff type From can be implicitly converted to |
-// type To. |
-template <typename From, typename To> |
-class ImplicitlyConvertible { |
- private: |
- // We need the following helper functions only for their types. |
- // They have no implementations. |
- |
- // MakeFrom() is an expression whose type is From. We cannot simply |
- // use From(), as the type From may not have a public default |
- // constructor. |
- static From MakeFrom(); |
- |
- // These two functions are overloaded. Given an expression |
- // Helper(x), the compiler will pick the first version if x can be |
- // implicitly converted to type To; otherwise it will pick the |
- // second version. |
- // |
- // The first version returns a value of size 1, and the second |
- // version returns a value of size 2. Therefore, by checking the |
- // size of Helper(x), which can be done at compile time, we can tell |
- // which version of Helper() is used, and hence whether x can be |
- // implicitly converted to type To. |
- static char Helper(To); |
- static char (&Helper(...))[2]; // NOLINT |
- |
- // We have to put the 'public' section after the 'private' section, |
- // or MSVC refuses to compile the code. |
- public: |
- // MSVC warns about implicitly converting from double to int for |
- // possible loss of data, so we need to temporarily disable the |
- // warning. |
-#ifdef _MSC_VER |
-#pragma warning(push) // Saves the current warning state. |
-#pragma warning(disable:4244) // Temporarily disables warning 4244. |
- static const bool value = |
- sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; |
-#pragma warning(pop) // Restores the warning state. |
-#else |
- static const bool value = |
- sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; |
-#endif // _MSV_VER |
-}; |
-template <typename From, typename To> |
-const bool ImplicitlyConvertible<From, To>::value; |
- |
// Symbian compilation can be done with wchar_t being either a native |
// type or a typedef. Using Google Mock with OpenC without wchar_t |
// should require the definition of _STLP_NO_WCHAR_T. |
@@ -385,32 +264,6 @@ struct LosslessArithmeticConvertible |
: public LosslessArithmeticConvertibleImpl< |
GMOCK_KIND_OF_(From), From, GMOCK_KIND_OF_(To), To> {}; // NOLINT |
-// IsAProtocolMessage<T>::value is a compile-time bool constant that's |
-// true iff T is type ProtocolMessage, proto2::Message, or a subclass |
-// of those. |
-template <typename T> |
-struct IsAProtocolMessage |
- : public bool_constant< |
- ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value || |
- ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> { |
-}; |
- |
-// When the compiler sees expression IsContainerTest<C>(0), the first |
-// overload of IsContainerTest will be picked if C is an STL-style |
-// container class (since C::const_iterator* is a valid type and 0 can |
-// be converted to it), while the second overload will be picked |
-// otherwise (since C::const_iterator will be an invalid type in this |
-// case). Therefore, we can determine whether C is a container class |
-// by checking the type of IsContainerTest<C>(0). The value of the |
-// expression is insignificant. |
-typedef int IsContainer; |
-template <class C> |
-IsContainer IsContainerTest(typename C::const_iterator*) { return 0; } |
- |
-typedef char IsNotContainer; |
-template <class C> |
-IsNotContainer IsContainerTest(...) { return '\0'; } |
- |
// This interface knows how to report a Google Mock failure (either |
// non-fatal or fatal). |
class FailureReporterInterface { |
@@ -514,149 +367,6 @@ inline T Invalid() { |
template <> |
inline void Invalid<void>() {} |
-// Utilities for native arrays. |
- |
-// ArrayEq() compares two k-dimensional native arrays using the |
-// elements' operator==, where k can be any integer >= 0. When k is |
-// 0, ArrayEq() degenerates into comparing a single pair of values. |
- |
-template <typename T, typename U> |
-bool ArrayEq(const T* lhs, size_t size, const U* rhs); |
- |
-// This generic version is used when k is 0. |
-template <typename T, typename U> |
-inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } |
- |
-// This overload is used when k >= 1. |
-template <typename T, typename U, size_t N> |
-inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { |
- return internal::ArrayEq(lhs, N, rhs); |
-} |
- |
-// This helper reduces code bloat. If we instead put its logic inside |
-// the previous ArrayEq() function, arrays with different sizes would |
-// lead to different copies of the template code. |
-template <typename T, typename U> |
-bool ArrayEq(const T* lhs, size_t size, const U* rhs) { |
- for (size_t i = 0; i != size; i++) { |
- if (!internal::ArrayEq(lhs[i], rhs[i])) |
- return false; |
- } |
- return true; |
-} |
- |
-// Finds the first element in the iterator range [begin, end) that |
-// equals elem. Element may be a native array type itself. |
-template <typename Iter, typename Element> |
-Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { |
- for (Iter it = begin; it != end; ++it) { |
- if (internal::ArrayEq(*it, elem)) |
- return it; |
- } |
- return end; |
-} |
- |
-// CopyArray() copies a k-dimensional native array using the elements' |
-// operator=, where k can be any integer >= 0. When k is 0, |
-// CopyArray() degenerates into copying a single value. |
- |
-template <typename T, typename U> |
-void CopyArray(const T* from, size_t size, U* to); |
- |
-// This generic version is used when k is 0. |
-template <typename T, typename U> |
-inline void CopyArray(const T& from, U* to) { *to = from; } |
- |
-// This overload is used when k >= 1. |
-template <typename T, typename U, size_t N> |
-inline void CopyArray(const T(&from)[N], U(*to)[N]) { |
- internal::CopyArray(from, N, *to); |
-} |
- |
-// This helper reduces code bloat. If we instead put its logic inside |
-// the previous CopyArray() function, arrays with different sizes |
-// would lead to different copies of the template code. |
-template <typename T, typename U> |
-void CopyArray(const T* from, size_t size, U* to) { |
- for (size_t i = 0; i != size; i++) { |
- internal::CopyArray(from[i], to + i); |
- } |
-} |
- |
-// The relation between an NativeArray object (see below) and the |
-// native array it represents. |
-enum RelationToSource { |
- kReference, // The NativeArray references the native array. |
- kCopy // The NativeArray makes a copy of the native array and |
- // owns the copy. |
-}; |
- |
-// Adapts a native array to a read-only STL-style container. Instead |
-// of the complete STL container concept, this adaptor only implements |
-// members useful for Google Mock's container matchers. New members |
-// should be added as needed. To simplify the implementation, we only |
-// support Element being a raw type (i.e. having no top-level const or |
-// reference modifier). It's the client's responsibility to satisfy |
-// this requirement. Element can be an array type itself (hence |
-// multi-dimensional arrays are supported). |
-template <typename Element> |
-class NativeArray { |
- public: |
- // STL-style container typedefs. |
- typedef Element value_type; |
- typedef const Element* const_iterator; |
- |
- // Constructs from a native array. |
- NativeArray(const Element* array, size_t count, RelationToSource relation) { |
- Init(array, count, relation); |
- } |
- |
- // Copy constructor. |
- NativeArray(const NativeArray& rhs) { |
- Init(rhs.array_, rhs.size_, rhs.relation_to_source_); |
- } |
- |
- ~NativeArray() { |
- // Ensures that the user doesn't instantiate NativeArray with a |
- // const or reference type. |
- testing::StaticAssertTypeEq<Element, |
- GMOCK_REMOVE_CONST_(GMOCK_REMOVE_REFERENCE_(Element))>(); |
- if (relation_to_source_ == kCopy) |
- delete[] array_; |
- } |
- |
- // STL-style container methods. |
- size_t size() const { return size_; } |
- const_iterator begin() const { return array_; } |
- const_iterator end() const { return array_ + size_; } |
- bool operator==(const NativeArray& rhs) const { |
- return size() == rhs.size() && |
- ArrayEq(begin(), size(), rhs.begin()); |
- } |
- |
- private: |
- // Not implemented as we don't want to support assignment. |
- void operator=(const NativeArray& rhs); |
- |
- // Initializes this object; makes a copy of the input array if |
- // 'relation' is kCopy. |
- void Init(const Element* array, size_t a_size, RelationToSource relation) { |
- if (relation == kReference) { |
- array_ = array; |
- } else { |
- Element* const copy = new Element[a_size]; |
- CopyArray(array, a_size, copy); |
- array_ = copy; |
- } |
- size_ = a_size; |
- relation_to_source_ = relation; |
- } |
- |
- const Element* array_; |
- size_t size_; |
- RelationToSource relation_to_source_; |
-}; |
- |
// Given a raw type (i.e. having no top-level reference or const |
// modifier) RawContainer that's either an STL-style container or a |
// native array, class StlContainerView<RawContainer> has the |
@@ -682,7 +392,7 @@ class StlContainerView { |
static const_reference ConstReference(const RawContainer& container) { |
// Ensures that RawContainer is not a const type. |
testing::StaticAssertTypeEq<RawContainer, |
- GMOCK_REMOVE_CONST_(RawContainer)>(); |
+ GTEST_REMOVE_CONST_(RawContainer)>(); |
return container; |
} |
static type Copy(const RawContainer& container) { return container; } |
@@ -692,7 +402,7 @@ class StlContainerView { |
template <typename Element, size_t N> |
class StlContainerView<Element[N]> { |
public: |
- typedef GMOCK_REMOVE_CONST_(Element) RawElement; |
+ typedef GTEST_REMOVE_CONST_(Element) RawElement; |
typedef internal::NativeArray<RawElement> type; |
// NativeArray<T> can represent a native array either by value or by |
// reference (selected by a constructor argument), so 'const type' |
@@ -737,7 +447,7 @@ class StlContainerView<Element[N]> { |
template <typename ElementPointer, typename Size> |
class StlContainerView< ::std::tr1::tuple<ElementPointer, Size> > { |
public: |
- typedef GMOCK_REMOVE_CONST_( |
+ typedef GTEST_REMOVE_CONST_( |
typename internal::PointeeOf<ElementPointer>::type) RawElement; |
typedef internal::NativeArray<RawElement> type; |
typedef const type const_reference; |