From 014c645cf3b079e8dca5435e80971fe2114b1cbb Mon Sep 17 00:00:00 2001 From: H0zen Date: Thu, 29 Mar 2018 15:37:44 +0300 Subject: [PATCH] Introducing std::unordered_map/set and enforce C++11 on Linux --- cmake/SetDefinitions.cmake | 2 +- src/framework/Utilities/UnorderedMapSet.h | 159 +--------------------- 2 files changed, 7 insertions(+), 154 deletions(-) diff --git a/cmake/SetDefinitions.cmake b/cmake/SetDefinitions.cmake index a77ab9fa..d7f7a123 100644 --- a/cmake/SetDefinitions.cmake +++ b/cmake/SetDefinitions.cmake @@ -109,7 +109,7 @@ elseif(UNIX) ) if(CMAKE_C_COMPILER MATCHES "gcc" OR CMAKE_C_COMPILER_ID STREQUAL "GNU") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") if(PLATFORM EQUAL 32) set(SSE_FLAGS "-msse2 -mfpmath=sse") diff --git a/src/framework/Utilities/UnorderedMapSet.h b/src/framework/Utilities/UnorderedMapSet.h index aaba9016..b1cf045b 100644 --- a/src/framework/Utilities/UnorderedMapSet.h +++ b/src/framework/Utilities/UnorderedMapSet.h @@ -25,160 +25,13 @@ #ifndef MANGOS_UNORDERED_MAP_H #define MANGOS_UNORDERED_MAP_H -#include "Platform/CompilerDefs.h" -#include "Platform/Define.h" +#include +#include -#if defined(__APPLE__) -#include -#endif +#define UNORDERED_MAP std::unordered_map +#define UNORDERED_SET std::unordered_set -#if COMPILER == COMPILER_CLANG -# if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 -# include -# include -# else -# include -# include -# endif -#elif COMPILER == COMPILER_INTEL -# include -# include -#elif COMPILER == COMPILER_GNU && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 3) -# include -# include -#elif COMPILER == COMPILER_GNU && __GNUC__ >= 3 && (__GNUC__ < 4 || __GNUC__ == 4 && __GNUC_MINOR__ < 3) -# include -# include -#elif COMPILER == COMPILER_MICROSOFT && (_MSC_VER > 1500 || _MSC_VER == 1500 && _HAS_TR1) // VC9.0 SP1 and later -# include -# include -#else -# include -# include -#endif - -#ifdef _STLPORT_VERSION -# define UNORDERED_MAP std::hash_map -# define UNORDERED_SET std::hash_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -using std::hash_map; -using std::hash_set; -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_SET std::unordered_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_SET std::tr1::unordered_set -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define UNORDERED_MAP stdext::hash_map -# define UNORDERED_SET stdext::hash_set -# define HASH_NAMESPACE_START namespace stdext { -# define HASH_NAMESPACE_END } -using stdext::hash_map; -using stdext::hash_set; - -#if !_HAS_TRADITIONAL_STL - -// can be not used by some platforms, so provide fake forward -HASH_NAMESPACE_START - -template -class hash -{ - public: - size_t operator()(K const&); -}; - -HASH_NAMESPACE_END - -#endif - -#elif COMPILER == COMPILER_INTEL -# define UNORDERED_MAP std::hash_map -# define UNORDERED_SET std::hash_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -using std::hash_map; -using std::hash_set; -#elif COMPILER == COMPILER_CLANG && defined(__FreeBSD__) -# include -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_SET std::unordered_set -# if __FreeBSD_version >= 1001000 -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -# else -# define HASH_NAMESPACE_START namespace std { namespace __1 { -# define HASH_NAMESPACE_END } } -# endif -#elif COMPILER == COMPILER_CLANG -# if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_SET std::unordered_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -# else -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_SET std::tr1::unordered_set -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -# endif -#elif COMPILER == COMPILER_GNU && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 3) -# if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_SET std::unordered_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -# else -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_SET std::tr1::unordered_set -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -# endif -#elif COMPILER == COMPILER_GNU && __GNUC__ >= 3 && (__GNUC__ < 4 || __GNUC__ == 4 && __GNUC_MINOR__ < 3) -# define UNORDERED_MAP __gnu_cxx::hash_map -# define UNORDERED_SET __gnu_cxx::hash_set -# define HASH_NAMESPACE_START namespace __gnu_cxx { -# define HASH_NAMESPACE_END } - -HASH_NAMESPACE_START - -template<> -class hash -{ - public: - size_t operator()(const unsigned long long& __x) const { return (size_t)__x; } -}; - -template -class hash -{ - public: - size_t operator()(T* const& __x) const { return (size_t)__x; } -}; - -template<> struct hash -{ - size_t operator()(const std::string& __x) const - { - return hash()(__x.c_str()); - } -}; - -HASH_NAMESPACE_END - -#else -# define UNORDERED_MAP std::hash_map -# define UNORDERED_SET std::hash_set -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -using std::hash_map; -using std::hash_set; -#endif +#define HASH_NAMESPACE_START namespace std { +#define HASH_NAMESPACE_END } #endif