summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/hash_tables.h26
1 files changed, 11 insertions, 15 deletions
diff --git a/base/hash_tables.h b/base/hash_tables.h
index 10539d7..fe73ff3 100644
--- a/base/hash_tables.h
+++ b/base/hash_tables.h
@@ -40,16 +40,19 @@
#ifndef BASE_HASH_TABLES_H__
#define BASE_HASH_TABLES_H__
-#ifdef WIN32
+#include "build/build_config.h"
+
+#if defined(COMPILER_MSVC)
#include <hash_map>
#include <hash_set>
namespace base {
using stdext::hash_map;
using stdext::hash_set;
}
-#else
+#elif defined(COMPILER_GCC)
#include <ext/hash_map>
#include <ext/hash_set>
+#include <tr1/functional>
namespace base {
using __gnu_cxx::hash_map;
using __gnu_cxx::hash_set;
@@ -59,52 +62,45 @@ using __gnu_cxx::hash_set;
// be used as keys in STL maps and sets.
namespace __gnu_cxx {
-inline size_t stl_hash_wstring(const wchar_t* s) {
- unsigned long h = 0;
- for ( ; *s; ++s)
- h = 5 * h + *s;
- return size_t(h);
-}
-
template<>
struct hash<wchar_t*> {
size_t operator()(const wchar_t* s) const {
- return stl_hash_wstring(s);
+ return std::tr1::hash<const wchar_t*>()(s);
}
};
template<>
struct hash<const wchar_t*> {
size_t operator()(const wchar_t* s) const {
- return stl_hash_wstring(s);
+ return std::tr1::hash<const wchar_t*>()(s);
}
};
template<>
struct hash<std::wstring> {
size_t operator()(const std::wstring& s) const {
- return stl_hash_wstring(s.c_str());
+ return std::tr1::hash<std::wstring>()(s);
}
};
template<>
struct hash<const std::wstring> {
size_t operator()(const std::wstring& s) const {
- return stl_hash_wstring(s.c_str());
+ return std::tr1::hash<std::wstring>()(s);
}
};
template<>
struct hash<std::string> {
size_t operator()(const std::string& s) const {
- return __stl_hash_string(s.c_str());
+ return std::tr1::hash<std::string>()(s);
}
};
template<>
struct hash<const std::string> {
size_t operator()(const std::string& s) const {
- return __stl_hash_string(s.c_str());
+ return std::tr1::hash<std::string>()(s);
}
};