Fixes for VS 2008
[dyninst.git] / dynutil / h / dyntypes.h
1
2 #if !defined(DYNTYPES_H)
3 #define DYNTYPES_H
4
5 #if defined(_MSC_VER)
6 #define WIN32_LEAN_AND_MEAN
7 #include <windows.h>
8 #endif
9
10 #ifndef FILE__
11 #define FILE__ strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__
12 #endif
13
14 #if defined (_MSC_VER)
15   //**************** Windows ********************
16   #include <hash_map>
17 #if 1
18   #define dyn_hash_map stdext::hash_map
19 #else
20   #define dyn_hash_map std::hash_map
21 #endif
22   #define DECLTHROW(x)
23 #elif defined(__GNUC__)
24   #include <functional>
25   #define DECLTHROW(x) throw(x)
26   //***************** GCC ***********************
27    #if (__GNUC__ > 4) || \
28       (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
29       //**************** GCC >= 4.3.0 ***********
30       #include <tr1/unordered_set>
31       #include <tr1/unordered_map>
32       #define dyn_hash_set std::tr1::unordered_set
33       #define dyn_hash_map std::tr1::unordered_map
34    #else
35       //**************** GCC < 4.3.0 ************
36       #include <ext/hash_map>
37       #include <ext/hash_set>
38       #define dyn_hash_set __gnu_cxx::hash_set
39       #define dyn_hash_map __gnu_cxx::hash_map    
40       using namespace __gnu_cxx;
41       namespace __gnu_cxx {
42  
43         template<> struct hash<std::string> {
44            hash<char*> h;
45            unsigned operator()(const std::string &s) const {
46              return h(s.c_str());
47            };
48         };
49       }
50
51    #endif
52 #else
53    #error Unknown compiler
54 #endif
55
56
57 namespace Dyninst
58 {
59    typedef unsigned long Address;   
60    typedef unsigned long Offset;
61
62 #if defined(_MSC_VER)
63    typedef HANDLE PID;
64    typedef HANDLE LWP;
65    typedef HANDLE THR_ID;
66
67 #define NULL_PID     INVALID_HANDLE_VALUE
68 #define NULL_LWP     INVALID_HANDLE_VALUE
69 #define NULL_THR_ID     INVALID_HANDLE_VALUE
70
71 #else
72    typedef int PID;
73    typedef int LWP;
74    typedef int THR_ID;
75
76 #define NULL_PID     -1
77 #define NULL_LWP     -1
78 #define NULL_THR_ID     -1
79 #endif
80 }
81
82 #endif