43 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 44 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 272 # include <sys/types.h> 273 # include <sys/stat.h> 274 #endif // !_WIN32_WCE 276 #if defined __APPLE__ 277 # include <AvailabilityMacros.h> 278 # include <TargetConditionals.h> 290 #include "gtest/internal/gtest-port-arch.h" 291 #include "gtest/internal/custom/gtest-port.h" 293 #if !defined(GTEST_DEV_EMAIL_) 294 # define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" 295 # define GTEST_FLAG_PREFIX_ "gtest_" 296 # define GTEST_FLAG_PREFIX_DASH_ "gtest-" 297 # define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" 298 # define GTEST_NAME_ "Google Test" 299 # define GTEST_PROJECT_URL_ "https://github.com/google/googletest/" 300 #endif // !defined(GTEST_DEV_EMAIL_) 302 #if !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 303 # define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest" 304 #endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 309 # define GTEST_GCC_VER_ \ 310 (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) 319 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ 320 __pragma(warning(push)) \ 321 __pragma(warning(disable: warnings)) 322 # define GTEST_DISABLE_MSC_WARNINGS_POP_() \ 323 __pragma(warning(pop)) 326 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) 327 # define GTEST_DISABLE_MSC_WARNINGS_POP_() 333 # define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 334 _Pragma("clang diagnostic push") \ 335 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ 336 _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") 337 #define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ 338 _Pragma("clang diagnostic pop") 340 # define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 341 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) 342 # define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ 343 GTEST_DISABLE_MSC_WARNINGS_POP_() 346 #ifndef GTEST_LANG_CXX11 351 # if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L || _MSC_VER >= 1900 353 # define GTEST_LANG_CXX11 1 355 # define GTEST_LANG_CXX11 0 368 #if GTEST_LANG_CXX11 && \ 369 (!defined(__GLIBCXX__) || ( \ 370 __GLIBCXX__ >= 20110325ul && \ 372 __GLIBCXX__ != 20110416ul && \ 373 __GLIBCXX__ != 20120313ul && \ 374 __GLIBCXX__ != 20110428ul && \ 375 __GLIBCXX__ != 20120702ul)) 376 # define GTEST_STDLIB_CXX11 1 380 #if GTEST_STDLIB_CXX11 381 # define GTEST_HAS_STD_BEGIN_AND_END_ 1 382 # define GTEST_HAS_STD_FORWARD_LIST_ 1 383 # if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) 385 # define GTEST_HAS_STD_FUNCTION_ 1 387 # define GTEST_HAS_STD_INITIALIZER_LIST_ 1 388 # define GTEST_HAS_STD_MOVE_ 1 389 # define GTEST_HAS_STD_UNIQUE_PTR_ 1 390 # define GTEST_HAS_STD_SHARED_PTR_ 1 391 # define GTEST_HAS_UNORDERED_MAP_ 1 392 # define GTEST_HAS_UNORDERED_SET_ 1 398 # define GTEST_HAS_STD_TUPLE_ 1 399 # if defined(__clang__) 402 # if defined(__has_include) && !__has_include(<tuple>) 403 # undef GTEST_HAS_STD_TUPLE_ 405 # elif defined(_MSC_VER) 407 # if defined(_CPPLIB_VER) && _CPPLIB_VER < 520 408 # undef GTEST_HAS_STD_TUPLE_ 410 # elif defined(__GLIBCXX__) 414 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) 415 # undef GTEST_HAS_STD_TUPLE_ 424 # if !GTEST_OS_WINDOWS_MOBILE 429 #if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR) 432 typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
437 typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
444 # include <strings.h> 445 #endif // GTEST_OS_WINDOWS 447 #if GTEST_OS_LINUX_ANDROID 449 # include <android/api-level.h> 453 #ifndef GTEST_HAS_POSIX_RE 454 # if GTEST_OS_LINUX_ANDROID 456 # define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) 458 # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) 465 #elif GTEST_HAS_POSIX_RE 473 # define GTEST_USES_POSIX_RE 1 475 #elif GTEST_OS_WINDOWS 479 # define GTEST_USES_SIMPLE_RE 1 485 # define GTEST_USES_SIMPLE_RE 1 487 #endif // GTEST_USES_PCRE 489 #ifndef GTEST_HAS_EXCEPTIONS 492 # if defined(_MSC_VER) && defined(_CPPUNWIND) 494 # define GTEST_HAS_EXCEPTIONS 1 495 # elif defined(__BORLANDC__) 499 # ifndef _HAS_EXCEPTIONS 500 # define _HAS_EXCEPTIONS 1 501 # endif // _HAS_EXCEPTIONS 502 # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS 503 # elif defined(__clang__) 511 # define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) 512 # elif defined(__GNUC__) && __EXCEPTIONS 514 # define GTEST_HAS_EXCEPTIONS 1 515 # elif defined(__SUNPRO_CC) 519 # define GTEST_HAS_EXCEPTIONS 1 520 # elif defined(__IBMCPP__) && __EXCEPTIONS 522 # define GTEST_HAS_EXCEPTIONS 1 523 # elif defined(__HP_aCC) 526 # define GTEST_HAS_EXCEPTIONS 1 530 # define GTEST_HAS_EXCEPTIONS 0 531 # endif // defined(_MSC_VER) || defined(__BORLANDC__) 532 #endif // GTEST_HAS_EXCEPTIONS 534 #if !defined(GTEST_HAS_STD_STRING) 537 # define GTEST_HAS_STD_STRING 1 538 #elif !GTEST_HAS_STD_STRING 540 # error "::std::string isn't available." 541 #endif // !defined(GTEST_HAS_STD_STRING) 543 #ifndef GTEST_HAS_GLOBAL_STRING 544 # define GTEST_HAS_GLOBAL_STRING 0 545 #endif // GTEST_HAS_GLOBAL_STRING 547 #ifndef GTEST_HAS_STD_WSTRING 556 # define GTEST_HAS_STD_WSTRING \ 557 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) 559 #endif // GTEST_HAS_STD_WSTRING 561 #ifndef GTEST_HAS_GLOBAL_WSTRING 564 # define GTEST_HAS_GLOBAL_WSTRING \ 565 (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) 566 #endif // GTEST_HAS_GLOBAL_WSTRING 569 #ifndef GTEST_HAS_RTTI 575 # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. 576 # define GTEST_HAS_RTTI 1 578 # define GTEST_HAS_RTTI 0 582 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) 589 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ 590 !defined(__EXCEPTIONS) 591 # define GTEST_HAS_RTTI 0 593 # define GTEST_HAS_RTTI 1 594 # endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS 596 # define GTEST_HAS_RTTI 0 597 # endif // __GXX_RTTI 602 # elif defined(__clang__) 604 # define GTEST_HAS_RTTI __has_feature(cxx_rtti) 608 # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) 611 # define GTEST_HAS_RTTI 1 613 # define GTEST_HAS_RTTI 0 619 # define GTEST_HAS_RTTI 1 623 #endif // GTEST_HAS_RTTI 632 #ifndef GTEST_HAS_PTHREAD 638 #define GTEST_HAS_PTHREAD \ 639 (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ 640 GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) 641 #endif // GTEST_HAS_PTHREAD 643 #if GTEST_HAS_PTHREAD 646 # include <pthread.h> 654 #if !defined(GTEST_HAS_HASH_MAP_) 655 # if defined(_MSC_VER) && (_MSC_VER < 1900) 656 # define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available. 657 # define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available. 659 #endif // !defined(GTEST_HAS_HASH_MAP_) 664 #ifndef GTEST_HAS_TR1_TUPLE 665 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) 667 # define GTEST_HAS_TR1_TUPLE 0 668 # elif defined(_MSC_VER) && (_MSC_VER >= 1910) 672 # define GTEST_HAS_TR1_TUPLE 0 673 # elif GTEST_LANG_CXX11 && defined(_LIBCPP_VERSION) 675 # define GTEST_HAS_TR1_TUPLE 0 678 # define GTEST_HAS_TR1_TUPLE 1 680 #endif // GTEST_HAS_TR1_TUPLE 684 #ifndef GTEST_USE_OWN_TR1_TUPLE 686 # if GTEST_OS_SYMBIAN 687 # define GTEST_USE_OWN_TR1_TUPLE 1 701 # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ 702 && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) \ 703 || (_MSC_VER >= 1600 && _MSC_VER < 1900) 704 # define GTEST_ENV_HAS_TR1_TUPLE_ 1 710 # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) 711 # define GTEST_ENV_HAS_STD_TUPLE_ 1 714 # if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ 715 # define GTEST_USE_OWN_TR1_TUPLE 0 717 # define GTEST_USE_OWN_TR1_TUPLE 1 719 # endif // GTEST_OS_SYMBIAN 720 #endif // GTEST_USE_OWN_TR1_TUPLE 724 #if GTEST_HAS_STD_TUPLE_ 726 # define GTEST_TUPLE_NAMESPACE_ ::std 727 #endif // GTEST_HAS_STD_TUPLE_ 731 #if GTEST_HAS_TR1_TUPLE 732 # ifndef GTEST_TUPLE_NAMESPACE_ 733 # define GTEST_TUPLE_NAMESPACE_ ::std::tr1 734 # endif // GTEST_TUPLE_NAMESPACE_ 736 # if GTEST_USE_OWN_TR1_TUPLE 737 # include "gtest/internal/gtest-tuple.h" 738 # elif GTEST_OS_SYMBIAN 745 # ifdef BOOST_HAS_TR1_TUPLE 746 # undef BOOST_HAS_TR1_TUPLE 747 # endif // BOOST_HAS_TR1_TUPLE 751 # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED 754 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) 758 # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 764 # define _TR1_FUNCTIONAL 1 765 # include <tr1/tuple> 766 # undef _TR1_FUNCTIONAL // Allows the user to #include 769 # include <tr1/tuple> 770 # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 773 # elif _MSC_VER >= 1600 776 # else // GTEST_USE_OWN_TR1_TUPLE 777 # include <tr1/tuple> 778 # endif // GTEST_USE_OWN_TR1_TUPLE 780 #endif // GTEST_HAS_TR1_TUPLE 786 #ifndef GTEST_HAS_CLONE 789 # if GTEST_OS_LINUX && !defined(__ia64__) 790 # if GTEST_OS_LINUX_ANDROID 793 # if defined(__LP64__) || \ 794 (defined(__arm__) && __ANDROID_API__ >= 9) || \ 795 (defined(__mips__) && __ANDROID_API__ >= 12) || \ 796 (defined(__i386__) && __ANDROID_API__ >= 17) 797 # define GTEST_HAS_CLONE 1 799 # define GTEST_HAS_CLONE 0 802 # define GTEST_HAS_CLONE 1 805 # define GTEST_HAS_CLONE 0 806 # endif // GTEST_OS_LINUX && !defined(__ia64__) 808 #endif // GTEST_HAS_CLONE 812 #ifndef GTEST_HAS_STREAM_REDIRECTION 815 # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || \ 816 GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT 817 # define GTEST_HAS_STREAM_REDIRECTION 0 819 # define GTEST_HAS_STREAM_REDIRECTION 1 820 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN 821 #endif // GTEST_HAS_STREAM_REDIRECTION 827 #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ 828 (GTEST_OS_MAC && !GTEST_OS_IOS) || \ 829 (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ 830 GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ 831 GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || \ 832 GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) 833 # define GTEST_HAS_DEATH_TEST 1 840 #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ 841 defined(__IBMCPP__) || defined(__HP_aCC) 842 # define GTEST_HAS_TYPED_TEST 1 843 # define GTEST_HAS_TYPED_TEST_P 1 850 #if (GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_) && !defined(__SUNPRO_CC) 851 # define GTEST_HAS_COMBINE 1 855 #define GTEST_WIDE_STRING_USES_UTF16_ \ 856 (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) 860 # define GTEST_CAN_STREAM_RESULTS_ 1 873 #ifdef __INTEL_COMPILER 874 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ 876 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT 890 #if defined(__GNUC__) && !defined(COMPILER_ICC) 891 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 892 #elif defined(__clang__) 893 # if __has_attribute(unused) 894 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 897 #ifndef GTEST_ATTRIBUTE_UNUSED_ 898 # define GTEST_ATTRIBUTE_UNUSED_ 902 # define GTEST_CXX11_EQUALS_DELETE_ = delete 903 #else // GTEST_LANG_CXX11 904 # define GTEST_CXX11_EQUALS_DELETE_ 905 #endif // GTEST_LANG_CXX11 908 #if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC) 909 # if defined(__MINGW_PRINTF_FORMAT) 913 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 914 __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \ 917 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 918 __attribute__((__format__(__printf__, string_index, first_to_check))) 921 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) 927 #define GTEST_DISALLOW_ASSIGN_(type) \ 928 void operator=(type const &) GTEST_CXX11_EQUALS_DELETE_ 932 #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \ 933 type(type const &) GTEST_CXX11_EQUALS_DELETE_; \ 934 GTEST_DISALLOW_ASSIGN_(type) 941 #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) 942 # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) 944 # define GTEST_MUST_USE_RESULT_ 945 #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC 955 # define GTEST_INTENTIONAL_CONST_COND_PUSH_() \ 956 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127) 957 # define GTEST_INTENTIONAL_CONST_COND_POP_() \ 958 GTEST_DISABLE_MSC_WARNINGS_POP_() 963 #ifndef GTEST_HAS_SEH 966 # if defined(_MSC_VER) || defined(__BORLANDC__) 968 # define GTEST_HAS_SEH 1 971 # define GTEST_HAS_SEH 0 974 #define GTEST_IS_THREADSAFE \ 975 (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ \ 976 || (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) \ 977 || GTEST_HAS_PTHREAD) 979 #endif // GTEST_HAS_SEH 987 # if GTEST_LINKED_AS_SHARED_LIBRARY 988 # define GTEST_API_ __declspec(dllimport) 989 # elif GTEST_CREATE_SHARED_LIBRARY 990 # define GTEST_API_ __declspec(dllexport) 992 #elif __GNUC__ >= 4 || defined(__clang__) 993 # define GTEST_API_ __attribute__((visibility ("default"))) 1000 #endif // GTEST_API_ 1002 #ifndef GTEST_DEFAULT_DEATH_TEST_STYLE 1003 # define GTEST_DEFAULT_DEATH_TEST_STYLE "fast" 1004 #endif // GTEST_DEFAULT_DEATH_TEST_STYLE 1008 # define GTEST_NO_INLINE_ __attribute__((noinline)) 1010 # define GTEST_NO_INLINE_ 1014 #if !defined(GTEST_HAS_CXXABI_H_) 1015 # if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) 1016 # define GTEST_HAS_CXXABI_H_ 1 1018 # define GTEST_HAS_CXXABI_H_ 0 1024 #if defined(__clang__) 1025 # if __has_feature(memory_sanitizer) 1026 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \ 1027 __attribute__((no_sanitize_memory)) 1029 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ 1030 # endif // __has_feature(memory_sanitizer) 1032 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ 1036 #if defined(__clang__) 1037 # if __has_feature(address_sanitizer) 1038 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \ 1039 __attribute__((no_sanitize_address)) 1041 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ 1042 # endif // __has_feature(address_sanitizer) 1044 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ 1048 #if defined(__clang__) 1049 # if __has_feature(thread_sanitizer) 1050 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \ 1051 __attribute__((no_sanitize_thread)) 1053 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ 1054 # endif // __has_feature(thread_sanitizer) 1056 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ 1063 #if defined(GTEST_TUPLE_NAMESPACE_) 1067 using GTEST_TUPLE_NAMESPACE_::get;
1068 using GTEST_TUPLE_NAMESPACE_::make_tuple;
1069 using GTEST_TUPLE_NAMESPACE_::tuple;
1070 using GTEST_TUPLE_NAMESPACE_::tuple_size;
1071 using GTEST_TUPLE_NAMESPACE_::tuple_element;
1072 #endif // defined(GTEST_TUPLE_NAMESPACE_) 1074 namespace internal {
1096 #if GTEST_LANG_CXX11 1097 # define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) 1098 #else // !GTEST_LANG_CXX11 1103 # define GTEST_COMPILE_ASSERT_(expr, msg) \ 1104 typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \ 1105 msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ 1106 #endif // !GTEST_LANG_CXX11 1154 template <
typename T1,
typename T2>
1157 template <
typename T>
1159 enum { value =
true };
1163 template <
typename T,
typename U>
1165 enum { value =
false };
1167 template <
typename T>
1169 enum { value =
true };
1173 #define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0])) 1175 #if GTEST_HAS_GLOBAL_STRING 1176 typedef ::string string;
1178 typedef ::std::string string;
1179 #endif // GTEST_HAS_GLOBAL_STRING 1181 #if GTEST_HAS_GLOBAL_WSTRING 1182 typedef ::wstring wstring;
1183 #elif GTEST_HAS_STD_WSTRING 1184 typedef ::std::wstring wstring;
1185 #endif // GTEST_HAS_GLOBAL_WSTRING 1189 GTEST_API_
bool IsTrue(
bool condition);
1195 template <
typename T>
1198 typedef T element_type;
1200 explicit scoped_ptr(T* p = NULL) : ptr_(p) {}
1203 T& operator*()
const {
return *ptr_; }
1204 T* operator->()
const {
return ptr_; }
1205 T*
get()
const {
return ptr_; }
1208 T*
const ptr = ptr_;
1213 void reset(T* p = NULL) {
1215 if (IsTrue(
sizeof(T) > 0)) {
1224 swap(a.ptr_, b.ptr_);
1237 #elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE 1245 RE(
const RE& other) { Init(other.pattern()); }
1248 RE(const ::std::string& regex) { Init(regex.c_str()); }
1250 # if GTEST_HAS_GLOBAL_STRING 1252 RE(const ::string& regex) { Init(regex.c_str()); }
1254 # endif // GTEST_HAS_GLOBAL_STRING 1256 RE(
const char* regex) { Init(regex); }
1260 const char* pattern()
const {
return pattern_; }
1269 static bool FullMatch(const ::std::string& str,
const RE& re) {
1270 return FullMatch(str.c_str(), re);
1272 static bool PartialMatch(const ::std::string& str,
const RE& re) {
1273 return PartialMatch(str.c_str(), re);
1276 # if GTEST_HAS_GLOBAL_STRING 1278 static bool FullMatch(const ::string& str,
const RE& re) {
1279 return FullMatch(str.c_str(), re);
1281 static bool PartialMatch(const ::string& str,
const RE& re) {
1282 return PartialMatch(str.c_str(), re);
1285 # endif // GTEST_HAS_GLOBAL_STRING 1287 static bool FullMatch(
const char* str,
const RE& re);
1288 static bool PartialMatch(
const char* str,
const RE& re);
1291 void Init(
const char* regex);
1296 const char* pattern_;
1299 # if GTEST_USES_POSIX_RE 1301 regex_t full_regex_;
1302 regex_t partial_regex_;
1304 # else // GTEST_USES_SIMPLE_RE 1306 const char* full_pattern_;
1310 GTEST_DISALLOW_ASSIGN_(
RE);
1313 #endif // GTEST_USES_PCRE 1317 GTEST_API_ ::std::string FormatFileLocation(
const char* file,
int line);
1322 GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(
const char* file,
1331 enum GTestLogSeverity {
1343 GTestLog(GTestLogSeverity severity,
const char* file,
int line);
1348 ::std::ostream& GetStream() { return ::std::cerr; }
1351 const GTestLogSeverity severity_;
1353 GTEST_DISALLOW_COPY_AND_ASSIGN_(
GTestLog);
1356 #if !defined(GTEST_LOG_) 1358 # define GTEST_LOG_(severity) \ 1359 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ 1360 __FILE__, __LINE__).GetStream() 1362 inline void LogToStderr() {}
1363 inline void FlushInfoLog() { fflush(NULL); }
1365 #endif // !defined(GTEST_LOG_) 1367 #if !defined(GTEST_CHECK_) 1382 # define GTEST_CHECK_(condition) \ 1383 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1384 if (::testing::internal::IsTrue(condition)) \ 1387 GTEST_LOG_(FATAL) << "Condition " #condition " failed. " 1388 #endif // !defined(GTEST_CHECK_) 1395 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ 1396 if (const int gtest_error = (posix_call)) \ 1397 GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ 1403 template <
typename T>
1405 template <
typename T>
1410 #define GTEST_ADD_REFERENCE_(T) \ 1411 typename ::testing::internal::AddReference<T>::type 1424 template <
typename T>
1426 template <
typename T>
1430 #define GTEST_REFERENCE_TO_CONST_(T) \ 1431 typename ::testing::internal::ConstRef<T>::type 1433 #if GTEST_HAS_STD_MOVE_ 1437 template <
typename T>
1441 #else // GTEST_HAS_STD_MOVE_ 1442 template <
typename T>
1443 const T& move(
const T& t) {
1446 template <
typename T>
1447 GTEST_ADD_REFERENCE_(T) forward(GTEST_ADD_REFERENCE_(T) t) {
return t; }
1449 template <
typename T>
1451 typedef const T& type;
1453 #endif // GTEST_HAS_STD_MOVE_ 1475 template<
typename To>
1476 inline To ImplicitCast_(To x) {
return x; }
1499 template<
typename To,
typename From>
1500 inline To DownCast_(From* f) {
1505 GTEST_INTENTIONAL_CONST_COND_PUSH_()
1507 GTEST_INTENTIONAL_CONST_COND_POP_()
1509 ::testing::internal::ImplicitCast_<From*>(to);
1514 GTEST_CHECK_(f == NULL || dynamic_cast<To>(f) != NULL);
1516 return static_cast<To
>(f);
1524 template <
class Derived,
class Base>
1525 Derived* CheckedDowncastToActualType(Base* base) {
1527 GTEST_CHECK_(
typeid(*base) ==
typeid(Derived));
1530 #if GTEST_HAS_DOWNCAST_ 1531 return ::down_cast<Derived*>(base);
1532 #elif GTEST_HAS_RTTI 1533 return dynamic_cast<Derived*
>(base);
1535 return static_cast<Derived*
>(base);
1539 #if GTEST_HAS_STREAM_REDIRECTION 1547 GTEST_API_
void CaptureStdout();
1548 GTEST_API_ std::string GetCapturedStdout();
1549 GTEST_API_
void CaptureStderr();
1550 GTEST_API_ std::string GetCapturedStderr();
1552 #endif // GTEST_HAS_STREAM_REDIRECTION 1554 GTEST_API_
size_t GetFileSize(FILE* file);
1557 GTEST_API_ std::string ReadEntireFile(FILE* file);
1560 GTEST_API_ std::vector<std::string> GetArgvs();
1562 #if GTEST_HAS_DEATH_TEST 1564 std::vector<std::string> GetInjectableArgvs();
1566 void SetInjectableArgvs(
const std::vector<std::string>* new_argvs);
1567 void SetInjectableArgvs(
const std::vector<std::string>& new_argvs);
1568 #if GTEST_HAS_GLOBAL_STRING 1569 void SetInjectableArgvs(
const std::vector< ::string>& new_argvs);
1570 #endif // GTEST_HAS_GLOBAL_STRING 1571 void ClearInjectableArgvs();
1573 #endif // GTEST_HAS_DEATH_TEST 1576 #if GTEST_IS_THREADSAFE 1577 # if GTEST_HAS_PTHREAD 1581 inline void SleepMilliseconds(
int n) {
1582 const timespec time = {
1586 nanosleep(&time, NULL);
1588 # endif // GTEST_HAS_PTHREAD 1590 # if GTEST_HAS_NOTIFICATION_ 1594 # elif GTEST_HAS_PTHREAD 1601 class Notification {
1603 Notification() : notified_(
false) {
1604 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
1607 pthread_mutex_destroy(&mutex_);
1613 pthread_mutex_lock(&mutex_);
1615 pthread_mutex_unlock(&mutex_);
1620 void WaitForNotification() {
1622 pthread_mutex_lock(&mutex_);
1623 const bool notified = notified_;
1624 pthread_mutex_unlock(&mutex_);
1627 SleepMilliseconds(10);
1632 pthread_mutex_t mutex_;
1635 GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
1638 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 1640 GTEST_API_
void SleepMilliseconds(
int n);
1644 class GTEST_API_ AutoHandle {
1651 typedef void* Handle;
1653 explicit AutoHandle(Handle handle);
1659 void Reset(Handle handle);
1663 bool IsCloseable()
const;
1667 GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle);
1676 class GTEST_API_ Notification {
1680 void WaitForNotification();
1685 GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
1687 # endif // GTEST_HAS_NOTIFICATION_ 1692 # if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW 1699 class ThreadWithParamBase {
1701 virtual ~ThreadWithParamBase() {}
1702 virtual void Run() = 0;
1711 extern "C" inline void* ThreadFuncWithCLinkage(
void* thread) {
1712 static_cast<ThreadWithParamBase*
>(thread)->Run();
1728 template <
typename T>
1729 class ThreadWithParam :
public ThreadWithParamBase {
1731 typedef void UserThreadFunc(T);
1733 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1736 thread_can_start_(thread_can_start),
1738 ThreadWithParamBase*
const base =
this;
1741 GTEST_CHECK_POSIX_SUCCESS_(
1742 pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base));
1744 ~ThreadWithParam() { Join(); }
1748 GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0));
1753 virtual void Run() {
1754 if (thread_can_start_ != NULL)
1755 thread_can_start_->WaitForNotification();
1760 UserThreadFunc*
const func_;
1764 Notification*
const thread_can_start_;
1768 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam);
1770 # endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD || 1773 # if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 1777 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 1793 class GTEST_API_ Mutex {
1795 enum MutexType { kStatic = 0, kDynamic = 1 };
1799 enum StaticConstructorSelector { kStaticMutex = 0 };
1804 explicit Mutex(StaticConstructorSelector ) {}
1819 void ThreadSafeLazyInit();
1823 unsigned int owner_thread_id_;
1828 long critical_section_init_phase_;
1829 GTEST_CRITICAL_SECTION* critical_section_;
1831 GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
1834 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1835 extern ::testing::internal::Mutex mutex 1837 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 1838 ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex) 1848 : mutex_(mutex) { mutex_->Lock(); }
1853 Mutex*
const mutex_;
1862 class ThreadLocalValueHolderBase {
1864 virtual ~ThreadLocalValueHolderBase() {}
1869 class ThreadLocalBase {
1875 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const = 0;
1878 ThreadLocalBase() {}
1879 virtual ~ThreadLocalBase() {}
1882 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocalBase);
1888 class GTEST_API_ ThreadLocalRegistry {
1892 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
1893 const ThreadLocalBase* thread_local_instance);
1896 static void OnThreadLocalDestroyed(
1897 const ThreadLocalBase* thread_local_instance);
1900 class GTEST_API_ ThreadWithParamBase {
1907 virtual ~Runnable() {}
1908 virtual void Run() = 0;
1911 ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start);
1912 virtual ~ThreadWithParamBase();
1919 template <
typename T>
1920 class ThreadWithParam :
public ThreadWithParamBase {
1922 typedef void UserThreadFunc(T);
1924 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1925 : ThreadWithParamBase(
new RunnableImpl(func, param), thread_can_start) {
1927 virtual ~ThreadWithParam() {}
1930 class RunnableImpl :
public Runnable {
1932 RunnableImpl(UserThreadFunc* func, T param)
1936 virtual ~RunnableImpl() {}
1937 virtual void Run() {
1942 UserThreadFunc*
const func_;
1945 GTEST_DISALLOW_COPY_AND_ASSIGN_(RunnableImpl);
1948 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam);
1978 template <
typename T>
1981 ThreadLocal() : default_factory_(
new DefaultValueHolderFactory()) {}
1983 : default_factory_(
new InstanceValueHolderFactory(value)) {}
1985 ~
ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed(
this); }
1987 T* pointer() {
return GetOrCreateValue(); }
1988 const T* pointer()
const {
return GetOrCreateValue(); }
1989 const T&
get()
const {
return *pointer(); }
1990 void set(
const T& value) { *pointer() = value; }
1995 class ValueHolder :
public ThreadLocalValueHolderBase {
1997 ValueHolder() : value_() {}
1998 explicit ValueHolder(
const T& value) : value_(value) {}
2000 T* pointer() {
return &value_; }
2004 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);
2008 T* GetOrCreateValue()
const {
2009 return static_cast<ValueHolder*
>(
2010 ThreadLocalRegistry::GetValueOnCurrentThread(
this))->pointer();
2013 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const {
2014 return default_factory_->MakeNewHolder();
2017 class ValueHolderFactory {
2019 ValueHolderFactory() {}
2020 virtual ~ValueHolderFactory() {}
2021 virtual ValueHolder* MakeNewHolder()
const = 0;
2024 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolderFactory);
2027 class DefaultValueHolderFactory :
public ValueHolderFactory {
2029 DefaultValueHolderFactory() {}
2030 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
2033 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
2036 class InstanceValueHolderFactory :
public ValueHolderFactory {
2038 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
2039 virtual ValueHolder* MakeNewHolder()
const {
2040 return new ValueHolder(value_);
2046 GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory);
2054 # elif GTEST_HAS_PTHREAD 2061 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));
2062 owner_ = pthread_self();
2073 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));
2078 void AssertHeld()
const {
2079 GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
2080 <<
"The current thread is not holding the mutex @" <<
this;
2089 pthread_mutex_t mutex_;
2101 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 2102 extern ::testing::internal::MutexBase mutex 2110 #define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 2111 ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0} 2115 class Mutex :
public MutexBase {
2118 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
2122 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));
2126 GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
2137 : mutex_(mutex) { mutex_->Lock(); }
2142 MutexBase*
const mutex_;
2155 class ThreadLocalValueHolderBase {
2157 virtual ~ThreadLocalValueHolderBase() {}
2162 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
2163 delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
2167 template <
typename T>
2168 class GTEST_API_ ThreadLocal {
2171 : key_(CreateKey()), default_factory_(
new DefaultValueHolderFactory()) {}
2172 explicit ThreadLocal(
const T& value)
2173 : key_(CreateKey()),
2174 default_factory_(
new InstanceValueHolderFactory(value)) {}
2178 DeleteThreadLocalValue(pthread_getspecific(key_));
2182 GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_));
2185 T* pointer() {
return GetOrCreateValue(); }
2186 const T* pointer()
const {
return GetOrCreateValue(); }
2187 const T&
get()
const {
return *pointer(); }
2188 void set(
const T& value) { *pointer() = value; }
2192 class ValueHolder :
public ThreadLocalValueHolderBase {
2194 ValueHolder() : value_() {}
2195 explicit ValueHolder(
const T& value) : value_(value) {}
2197 T* pointer() {
return &value_; }
2201 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);
2204 static pthread_key_t CreateKey() {
2208 GTEST_CHECK_POSIX_SUCCESS_(
2209 pthread_key_create(&key, &DeleteThreadLocalValue));
2213 T* GetOrCreateValue()
const {
2214 ThreadLocalValueHolderBase*
const holder =
2215 static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(key_));
2216 if (holder != NULL) {
2217 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
2220 ValueHolder*
const new_holder = default_factory_->MakeNewHolder();
2221 ThreadLocalValueHolderBase*
const holder_base = new_holder;
2222 GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base));
2223 return new_holder->pointer();
2226 class ValueHolderFactory {
2228 ValueHolderFactory() {}
2229 virtual ~ValueHolderFactory() {}
2230 virtual ValueHolder* MakeNewHolder()
const = 0;
2233 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolderFactory);
2236 class DefaultValueHolderFactory :
public ValueHolderFactory {
2238 DefaultValueHolderFactory() {}
2239 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
2242 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
2245 class InstanceValueHolderFactory :
public ValueHolderFactory {
2247 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
2248 virtual ValueHolder* MakeNewHolder()
const {
2249 return new ValueHolder(value_);
2255 GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory);
2259 const pthread_key_t key_;
2262 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
2265 # endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 2267 #else // GTEST_IS_THREADSAFE 2279 void AssertHeld()
const {}
2282 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 2283 extern ::testing::internal::Mutex mutex 2285 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex 2299 template <
typename T>
2300 class GTEST_API_ ThreadLocal {
2302 ThreadLocal() : value_() {}
2303 explicit ThreadLocal(
const T& value) : value_(value) {}
2304 T* pointer() {
return &value_; }
2305 const T* pointer()
const {
return &value_; }
2306 const T&
get()
const {
return value_; }
2307 void set(
const T& value) { value_ = value; }
2312 #endif // GTEST_IS_THREADSAFE 2316 GTEST_API_
size_t GetThreadCount();
2324 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || \ 2325 (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5130) 2328 # define GTEST_ELLIPSIS_NEEDS_POD_ 1 2330 # define GTEST_CAN_COMPARE_NULL 1 2337 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) 2338 # define GTEST_NEEDS_IS_POINTER_ 1 2341 template <
bool bool_value>
2344 static const bool value = bool_value;
2351 template <
typename T,
typename U>
2354 template <
typename T>
2358 template <
typename T>
2361 template <
typename T>
2364 template <
typename Iterator>
2366 typedef typename Iterator::value_type value_type;
2370 template <
typename T>
2372 typedef T value_type;
2375 template <
typename T>
2377 typedef T value_type;
2380 #if GTEST_OS_WINDOWS 2381 # define GTEST_PATH_SEP_ "\\" 2382 # define GTEST_HAS_ALT_PATH_SEP_ 1 2384 typedef __int64 BiggestInt;
2386 # define GTEST_PATH_SEP_ "/" 2387 # define GTEST_HAS_ALT_PATH_SEP_ 0 2388 typedef long long BiggestInt;
2389 #endif // GTEST_OS_WINDOWS 2398 inline bool IsAlpha(
char ch) {
2399 return isalpha(static_cast<unsigned char>(ch)) != 0;
2401 inline bool IsAlNum(
char ch) {
2402 return isalnum(static_cast<unsigned char>(ch)) != 0;
2404 inline bool IsDigit(
char ch) {
2405 return isdigit(static_cast<unsigned char>(ch)) != 0;
2407 inline bool IsLower(
char ch) {
2408 return islower(static_cast<unsigned char>(ch)) != 0;
2410 inline bool IsSpace(
char ch) {
2411 return isspace(static_cast<unsigned char>(ch)) != 0;
2413 inline bool IsUpper(
char ch) {
2414 return isupper(static_cast<unsigned char>(ch)) != 0;
2416 inline bool IsXDigit(
char ch) {
2417 return isxdigit(static_cast<unsigned char>(ch)) != 0;
2419 inline bool IsXDigit(
wchar_t ch) {
2420 const unsigned char low_byte =
static_cast<unsigned char>(ch);
2421 return ch == low_byte && isxdigit(low_byte) != 0;
2424 inline char ToLower(
char ch) {
2425 return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
2427 inline char ToUpper(
char ch) {
2428 return static_cast<char>(toupper(static_cast<unsigned char>(ch)));
2431 inline std::string StripTrailingSpaces(std::string str) {
2432 std::string::iterator it = str.end();
2433 while (it != str.begin() && IsSpace(*--it))
2448 #if GTEST_OS_WINDOWS 2450 typedef struct _stat StatStruct;
2452 # ifdef __BORLANDC__ 2453 inline int IsATTY(
int fd) {
return isatty(fd); }
2454 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2455 return stricmp(s1, s2);
2457 inline char* StrDup(
const char* src) {
return strdup(src); }
2458 # else // !__BORLANDC__ 2459 # if GTEST_OS_WINDOWS_MOBILE 2460 inline int IsATTY(
int ) {
return 0; }
2462 inline int IsATTY(
int fd) {
return _isatty(fd); }
2463 # endif // GTEST_OS_WINDOWS_MOBILE 2464 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2465 return _stricmp(s1, s2);
2467 inline char* StrDup(
const char* src) {
return _strdup(src); }
2468 # endif // __BORLANDC__ 2470 # if GTEST_OS_WINDOWS_MOBILE 2471 inline int FileNo(FILE* file) {
return reinterpret_cast<int>(_fileno(file)); }
2475 inline int FileNo(FILE* file) {
return _fileno(file); }
2476 inline int Stat(
const char* path, StatStruct* buf) {
return _stat(path, buf); }
2477 inline int RmDir(
const char* dir) {
return _rmdir(dir); }
2478 inline bool IsDir(
const StatStruct& st) {
2479 return (_S_IFDIR & st.st_mode) != 0;
2481 # endif // GTEST_OS_WINDOWS_MOBILE 2485 typedef struct stat StatStruct;
2487 inline int FileNo(FILE* file) {
return fileno(file); }
2488 inline int IsATTY(
int fd) {
return isatty(fd); }
2489 inline int Stat(
const char* path, StatStruct* buf) {
return stat(path, buf); }
2490 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2491 return strcasecmp(s1, s2);
2493 inline char* StrDup(
const char* src) {
return strdup(src); }
2494 inline int RmDir(
const char* dir) {
return rmdir(dir); }
2495 inline bool IsDir(
const StatStruct& st) {
return S_ISDIR(st.st_mode); }
2497 #endif // GTEST_OS_WINDOWS 2501 GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
2503 inline const char* StrNCpy(
char* dest,
const char* src,
size_t n) {
2504 return strncpy(dest, src, n);
2511 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 2512 inline int ChDir(
const char* dir) {
return chdir(dir); }
2514 inline FILE* FOpen(
const char* path,
const char* mode) {
2515 return fopen(path, mode);
2517 #if !GTEST_OS_WINDOWS_MOBILE 2518 inline FILE *FReopen(
const char* path,
const char* mode, FILE* stream) {
2519 return freopen(path, mode, stream);
2521 inline FILE* FDOpen(
int fd,
const char* mode) {
return fdopen(fd, mode); }
2523 inline int FClose(FILE* fp) {
return fclose(fp); }
2524 #if !GTEST_OS_WINDOWS_MOBILE 2525 inline int Read(
int fd,
void* buf,
unsigned int count) {
2526 return static_cast<int>(read(fd, buf, count));
2528 inline int Write(
int fd,
const void* buf,
unsigned int count) {
2529 return static_cast<int>(write(fd, buf, count));
2531 inline int Close(
int fd) {
return close(fd); }
2532 inline const char* StrError(
int errnum) {
return strerror(errnum); }
2534 inline const char* GetEnv(
const char* name) {
2535 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT 2537 static_cast<void>(name);
2539 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 2542 const char*
const env = getenv(name);
2543 return (env != NULL && env[0] !=
'\0') ? env : NULL;
2545 return getenv(name);
2549 GTEST_DISABLE_MSC_DEPRECATED_POP_()
2551 #if GTEST_OS_WINDOWS_MOBILE 2557 inline void Abort() { abort(); }
2558 #endif // GTEST_OS_WINDOWS_MOBILE 2567 #if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE 2569 # define GTEST_SNPRINTF_(buffer, size, format, ...) \ 2570 _snprintf_s(buffer, size, size, format, __VA_ARGS__) 2571 #elif defined(_MSC_VER) 2574 # define GTEST_SNPRINTF_ _snprintf 2576 # define GTEST_SNPRINTF_ snprintf 2586 const BiggestInt kMaxBiggestInt =
2587 ~(
static_cast<BiggestInt
>(1) << (8*
sizeof(BiggestInt) - 1));
2607 template <
size_t size>
2624 typedef unsigned int UInt;
2631 #if GTEST_OS_WINDOWS 2632 typedef __int64 Int;
2633 typedef unsigned __int64 UInt;
2635 typedef long long Int;
2636 typedef unsigned long long UInt;
2637 #endif // GTEST_OS_WINDOWS 2642 typedef TypeWithSize<4>::UInt UInt32;
2644 typedef TypeWithSize<8>::UInt UInt64;
2650 #if !defined(GTEST_FLAG) 2651 # define GTEST_FLAG(name) FLAGS_gtest_##name 2652 #endif // !defined(GTEST_FLAG) 2654 #if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) 2655 # define GTEST_USE_OWN_FLAGFILE_FLAG_ 1 2656 #endif // !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) 2658 #if !defined(GTEST_DECLARE_bool_) 2659 # define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver 2662 # define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) 2663 # define GTEST_DECLARE_int32_(name) \ 2664 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) 2665 # define GTEST_DECLARE_string_(name) \ 2666 GTEST_API_ extern ::std::string GTEST_FLAG(name) 2669 # define GTEST_DEFINE_bool_(name, default_val, doc) \ 2670 GTEST_API_ bool GTEST_FLAG(name) = (default_val) 2671 # define GTEST_DEFINE_int32_(name, default_val, doc) \ 2672 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) 2673 # define GTEST_DEFINE_string_(name, default_val, doc) \ 2674 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) 2676 #endif // !defined(GTEST_DECLARE_bool_) 2679 #if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2680 # define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) 2681 # define GTEST_LOCK_EXCLUDED_(locks) 2682 #endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2690 bool ParseInt32(
const Message& src_text,
const char* str, Int32* value);
2694 bool BoolFromGTestEnv(
const char* flag,
bool default_val);
2695 GTEST_API_ Int32 Int32FromGTestEnv(
const char* flag, Int32 default_val);
2696 std::string OutputFlagAlsoCheckEnvVar();
2697 const char* StringFromGTestEnv(
const char* flag,
const char* default_val);
2702 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ Definition: gtest-death-test.h:43
Definition: gtest-port.h:1450
Definition: gtest-port.h:1100
Definition: gtest-port.h:2300
Definition: gtest-port.h:1425
Definition: gtest-port.h:2359
Definition: gtest-port.h:2608
Definition: gtest-message.h:89
Definition: gtest-port.h:1164
Definition: gtest-port.h:1341
Definition: gtest-port.h:2292
Definition: gtest-port.h:1155
Definition: gtest-port.h:2342
Definition: gtest-port.h:1404
Definition: gtest-port.h:2352
Definition: gtest-port.h:1241
Definition: gtest-port.h:1196
Definition: gtest-port.h:2365