Code merges
This commit is contained in:
		@@ -41,7 +41,6 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <ostream>  // NOLINT
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include "gmock/internal/gmock-generated-internal-utils.h"
 | 
			
		||||
#include "gmock/internal/gmock-port.h"
 | 
			
		||||
#include "gtest/gtest.h"
 | 
			
		||||
@@ -49,11 +48,15 @@
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// Joins a vector of strings as if they are fields of a tuple; returns
 | 
			
		||||
// the joined string.
 | 
			
		||||
GTEST_API_ std::string JoinAsTuple(const Strings& fields);
 | 
			
		||||
 | 
			
		||||
// Converts an identifier name to a space-separated list of lower-case
 | 
			
		||||
// words.  Each maximum substring of the form [A-Za-z][a-z]*|\d+ is
 | 
			
		||||
// treated as one word.  For example, both "FooBar123" and
 | 
			
		||||
// "foo_bar_123" are converted to "foo bar 123".
 | 
			
		||||
GTEST_API_ string ConvertIdentifierNameToWords(const char* id_name);
 | 
			
		||||
GTEST_API_ std::string ConvertIdentifierNameToWords(const char* id_name);
 | 
			
		||||
 | 
			
		||||
// 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
 | 
			
		||||
@@ -503,8 +506,38 @@ struct RemoveConstFromKey<std::pair<const K, V> > {
 | 
			
		||||
template <bool kValue>
 | 
			
		||||
struct BooleanConstant {};
 | 
			
		||||
 | 
			
		||||
// Emit an assertion failure due to incorrect DoDefault() usage. Out-of-lined to
 | 
			
		||||
// reduce code size.
 | 
			
		||||
void IllegalDoDefault(const char* file, int line);
 | 
			
		||||
 | 
			
		||||
#if GTEST_LANG_CXX11
 | 
			
		||||
// Helper types for Apply() below.
 | 
			
		||||
template <size_t... Is> struct int_pack { typedef int_pack type; };
 | 
			
		||||
 | 
			
		||||
template <class Pack, size_t I> struct append;
 | 
			
		||||
template <size_t... Is, size_t I>
 | 
			
		||||
struct append<int_pack<Is...>, I> : int_pack<Is..., I> {};
 | 
			
		||||
 | 
			
		||||
template <size_t C>
 | 
			
		||||
struct make_int_pack : append<typename make_int_pack<C - 1>::type, C - 1> {};
 | 
			
		||||
template <> struct make_int_pack<0> : int_pack<> {};
 | 
			
		||||
 | 
			
		||||
template <typename F, typename Tuple, size_t... Idx>
 | 
			
		||||
auto ApplyImpl(F&& f, Tuple&& args, int_pack<Idx...>) -> decltype(
 | 
			
		||||
    std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...)) {
 | 
			
		||||
  return std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Apply the function to a tuple of arguments.
 | 
			
		||||
template <typename F, typename Tuple>
 | 
			
		||||
auto Apply(F&& f, Tuple&& args)
 | 
			
		||||
    -> decltype(ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
			
		||||
                          make_int_pack<std::tuple_size<Tuple>::value>())) {
 | 
			
		||||
  return ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
			
		||||
                   make_int_pack<std::tuple_size<Tuple>::value>());
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user