diff --git a/src/framework/Utilities/UnorderedMap.h b/src/framework/Utilities/UnorderedMap.h index 4fb2f788c41..d5b0d168bad 100644 --- a/src/framework/Utilities/UnorderedMap.h +++ b/src/framework/Utilities/UnorderedMap.h @@ -35,33 +35,64 @@ #endif #ifdef _STLPORT_VERSION -#define UNORDERED_MAP std::hash_map +# define UNORDERED_MAP std::hash_map +# define HASH_NAMESPACE_START namespace std { +# define HASH_NAMESPACE_END } using std::hash_map; #elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -#define UNORDERED_MAP std::tr1::unordered_map +# define UNORDERED_MAP std::tr1::unordered_map +# define HASH_NAMESPACE_START namespace std { +# define HASH_NAMESPACE_END } #elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -#define UNORDERED_MAP stdext::hash_map +# define UNORDERED_MAP stdext::hash_map +# define HASH_NAMESPACE_START namespace stdext { +# define HASH_NAMESPACE_END } using stdext::hash_map; + +#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_MAP std::hash_map +# define HASH_NAMESPACE_START namespace std { +# define HASH_NAMESPACE_END } using std::hash_map; #elif COMPILER == COMPILER_GNU && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 3) #define UNORDERED_MAP std::tr1::unordered_map +# define HASH_NAMESPACE_START namespace std { namespace tr1 { +# define HASH_NAMESPACE_END } } #elif COMPILER == COMPILER_GNU && __GNUC__ >= 3 -#define UNORDERED_MAP __gnu_cxx::hash_map +# define UNORDERED_MAP __gnu_cxx::hash_map +# define HASH_NAMESPACE_START namespace __gnu_cxx { +# define HASH_NAMESPACE_END } + +HASH_NAMESPACE_START -namespace __gnu_cxx -{ template<> - struct hash + class hash { - size_t operator()(const unsigned long long &__x) const { return (size_t)__x; } + public: + size_t operator()(const unsigned long long &__x) const { return (size_t)__x; } }; template - struct hash + class hash { - size_t operator()(T * const &__x) const { return (size_t)__x; } + public: + size_t operator()(T * const &__x) const { return (size_t)__x; } }; template<> struct hash @@ -71,10 +102,14 @@ namespace __gnu_cxx return hash()(__x.c_str()); } }; -}; +HASH_NAMESPACE_END #else -#define UNORDERED_MAP std::hash_map +# define UNORDERED_MAP std::hash_map +# define HASH_NAMESPACE_START namespace std { +# define HASH_NAMESPACE_END } using std::hash_map; + #endif + #endif diff --git a/src/game/ObjectGuid.h b/src/game/ObjectGuid.h index f21595ce321..5c194012d46 100644 --- a/src/game/ObjectGuid.h +++ b/src/game/ObjectGuid.h @@ -22,6 +22,8 @@ #include "Common.h" #include "ByteBuffer.h" +#include + enum TypeID { TYPEID_OBJECT = 0, @@ -277,4 +279,19 @@ ByteBuffer& operator>> (ByteBuffer& buf, PackedGuidReader const& guid); inline PackedGuid ObjectGuid::WriteAsPacked() const { return PackedGuid(*this); } +HASH_NAMESPACE_START + + template<> + class hash + { + public: + + size_t operator() (ObjectGuid const& key) const + { + return hash()(key.GetRawValue()); + } + }; + +HASH_NAMESPACE_END + #endif diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c164358a990..d701e2087a8 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10365" + #define REVISION_NR "10366" #endif // __REVISION_NR_H__