KrisLibrary  1.0.0
stl_tr1.h
1 #ifndef UTILS_CROSS_PLATFORM_UNORDERED_MAP_H
2 #define UTILS_CROSS_PLATFORM_UNORDERED_MAP_H
3 
4 //this file helps take care of the cross-platform, cross-compiler differences
5 //in the STL TR1
6 
7 #if defined(_MSC_VER)
8  #include <unordered_set>
9  #include <unordered_map>
10  #if _MSC_VER >= 1700
11  #define USE_TR1_NAMESPACE 0
12  #else
13  #define USE_TR1_NAMESPACE 1
14  #endif
15 #elif defined(__APPLE__)
16  #include <Availability.h>
17  #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
18  #define USE_TR1_NAMESPACE 1
19  #include <tr1/unordered_set>
20  #include <tr1/unordered_map>
21  #else
22  #define USE_TR1_NAMESPACE 0
23  #include <unordered_set>
24  #include <unordered_map>
25  #endif
26 #else
27  #include <tr1/unordered_set>
28  #include <tr1/unordered_map>
29  #define USE_TR1_NAMESPACE 1
30 #endif //defined(_MSC_VER) || defined(__APPLE__)
31 
32 //aliases for the unordered_set, unordered_map, and hash types
33 #if USE_TR1_NAMESPACE
34  #define TR1_NAMESPACE std::tr1
35 #else
36  #define TR1_NAMESPACE std
37 #endif
38 
39 #define UNORDERED_SET_NAMESPACE TR1_NAMESPACE
40 #define UNORDERED_MAP_NAMESPACE TR1_NAMESPACE
41 #define HASH_NAMESPACE TR1_NAMESPACE
42 #define UNORDERED_SET_TEMPLATE TR1_NAMESPACE::unordered_set
43 #define UNORDERED_MAP_TEMPLATE TR1_NAMESPACE::unordered_map
44 #define HASH_TEMPLATE TR1_NAMESPACE::hash
45 
46 //helpers for defining new elements of the tr1 namespace
47 #if USE_TR1_NAMESPACE
48 #define BEGIN_TR1_NAMESPACE namespace std { namespace tr1 {
49 #define END_TR1_NAMESPACE } /* namespace std */ } /* namespace tr1 */
50 #else
51 #define BEGIN_TR1_NAMESPACE namespace std {
52 #define END_TR1_NAMESPACE } /* namespace std */
53 #endif //USE_TR1_NAMESPACE
54 
55 #endif // UTILS_CROSS_PLATFORM_UNORDERED_MAP_H