summaryrefslogtreecommitdiff
path: root/include/hash_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/hash_map.h')
-rw-r--r--include/hash_map.h56
1 files changed, 33 insertions, 23 deletions
diff --git a/include/hash_map.h b/include/hash_map.h
index dad08aa93..6e47d292b 100644
--- a/include/hash_map.h
+++ b/include/hash_map.h
@@ -11,35 +11,45 @@
* ---------------------------------------------------
*/
-#ifndef INSPIRCD_HASHMAP_H
-#define INSPIRCD_HASHMAP_H
+ #ifndef INSPIRCD_HASHMAP_H
+ #define INSPIRCD_HASHMAP_H
-/** Where hash_map is varies from compiler to compiler
- * as it is not standard unless we have tr1.
- */
-#ifndef WIN32
- #ifndef HASHMAP_DEPRECATED
- #include <ext/hash_map>
- /** Oddball linux namespace for hash_map */
- #define nspace __gnu_cxx
- #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
- #define END_HASHMAP_NAMESPACE }
+ /** Where hash_map is varies from compiler to compiler
+ * as it is not standard unless we have tr1.
+ */
+ #ifndef WIN32
+ #ifdef HASHMAP_DEPRECATED
+ // GCC4+ has deprecated hash_map and uses tr1. But of course, uses a different include to MSVC. FOR FUCKS SAKE.
+ #include <tr1/unordered_map>
+ #define HAS_TR1_UNORDERED
+ #else
+ #include <ext/hash_map>
+ /** Oddball linux namespace for hash_map */
+ #define nspace __gnu_cxx
+ #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
+ #define END_HASHMAP_NAMESPACE }
+ #endif
#else
- /** Yay, we have tr1! */
- #include <tr1/unordered_map>
- /** Not so oddball linux namespace for hash_map with gcc 4.0 and above */
+ #if _MSC_VER >= 1600
+ // New MSVC has tr1. Just to make things fucked up, though, MSVC and GCC use different includes! FFS.
+ #include <unordered_map>
+ #define HAS_TR1_UNORDERED
+ #define HASHMAP_DEPRECATED
+ #else
+ #define nspace stdext
+ /** Oddball windows namespace for hash_map */
+ using stdext::hash_map;
+ #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
+ #define END_HASHMAP_NAMESPACE }
+ #endif
+ #endif
+
+ // tr1: restoring sanity to our headers. now if only compiler vendors could agree on a FUCKING INCLUDE FILE.
+ #ifdef HAS_TR1_UNORDERED
#define hash_map unordered_map
#define nspace std::tr1
#define BEGIN_HASHMAP_NAMESPACE namespace std { namespace tr1 {
#define END_HASHMAP_NAMESPACE } }
#endif
-#else
- #include <hash_map>
- #define nspace stdext
- /** Oddball windows namespace for hash_map */
- using stdext::hash_map;
- #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
- #define END_HASHMAP_NAMESPACE }
-#endif
#endif