| 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;
|
|
|