]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/hash_map.h
Merge pull request #1018 from SaberUK/insp20+hidekills
[user/henk/code/inspircd.git] / include / hash_map.h
index 313b216a78520eba03581fe002290c185519fa01..e789ea66a72875227daebe7a2b88d8dd38d9fb8d 100644 (file)
 
 #ifndef INSPIRCD_HASHMAP_H
 #define INSPIRCD_HASHMAP_H
-
-#include "inspircd_config.h"
-
        /** Where hash_map is varies from compiler to compiler
         * as it is not standard unless we have tr1.
+        *
+        * TODO: in 2.2 if we drop support for libstdc++ older than 3.4.7 and GCC older
+        *       than 4.1 this can be cleaned up massively.
         */
-       #ifndef WIN32
-               #ifdef HASHMAP_DEPRECATED
+       #if !defined _LIBCPP_VERSION && !defined _WIN32
+               #if !defined __GLIBCXX__ || __GLIBCXX__ > 20060309
                        // 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
+                       #define HASHMAP_DEPRECATED
+                       #define hash_map unordered_map
+                       #define nspace std::tr1
+                       #define BEGIN_HASHMAP_NAMESPACE namespace std { namespace tr1 {
+                       #define END_HASHMAP_NAMESPACE } }
                #else
                        #include <ext/hash_map>
                        /** Oddball linux namespace for hash_map */
                        #define END_HASHMAP_NAMESPACE }
                #endif
        #else
-               #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
-                       /** Oddball windows namespace for hash_map */
-                       #include <hash_map>
-                       #define nspace stdext
-                       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
+               #include <unordered_map>
+               #define HAS_TR1_UNORDERED
+               #define HASHMAP_DEPRECATED
                #define hash_map unordered_map
-               #define nspace std::tr1
-               #define BEGIN_HASHMAP_NAMESPACE namespace std { namespace tr1 {
-               #define END_HASHMAP_NAMESPACE } }
+               #define nspace std
+               #define BEGIN_HASHMAP_NAMESPACE namespace std {
+               #define END_HASHMAP_NAMESPACE }
        #endif
 
 #endif