2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2009 Robin Burchell <robin+git@viroteck.net>
5 * Copyright (C) 2008 Craig Edwards <craigedwards@brainbox.cc>
6 * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
7 * Copyright (C) 2006 Oliver Lupton <oliverlupton@gmail.com>
9 * This file is part of InspIRCd. InspIRCd is free software: you can
10 * redistribute it and/or modify it under the terms of the GNU General Public
11 * License as published by the Free Software Foundation, version 2.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #ifndef INSPIRCD_HASHMAP_H
24 #define INSPIRCD_HASHMAP_H
26 /** Where hash_map is varies from compiler to compiler
27 * as it is not standard unless we have tr1.
29 * TODO: in 2.2 if we drop support for libstdc++ older than 3.4.7 and GCC older
30 * than 4.1 this can be cleaned up massively.
33 #if __GLIBCXX__ > 20060309
34 // GCC4+ has deprecated hash_map and uses tr1. But of course, uses a different include to MSVC. FOR FUCKS SAKE.
35 #include <tr1/unordered_map>
36 #define HAS_TR1_UNORDERED
37 #define HASHMAP_DEPRECATED
39 #include <ext/hash_map>
40 /** Oddball linux namespace for hash_map */
41 #define nspace __gnu_cxx
42 #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
43 #define END_HASHMAP_NAMESPACE }
46 #include <unordered_map>
47 #define HAS_TR1_UNORDERED
48 #define HASHMAP_DEPRECATED
51 // tr1: restoring sanity to our headers. now if only compiler vendors could agree on a FUCKING INCLUDE FILE.
52 #ifdef HAS_TR1_UNORDERED
53 #define hash_map unordered_map
54 #define nspace std::tr1
55 #define BEGIN_HASHMAP_NAMESPACE namespace std { namespace tr1 {
56 #define END_HASHMAP_NAMESPACE } }