various fixes made when working with older gcc 3.2.3
[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 0
18   #define dyn_hash_map stdext::hash_map
19 #endif
20   #define dyn_hash_map std::hash_map
21   #define DECLTHROW(x)
22 #elif defined(__GNUC__)
23   #include <functional>
24   #define DECLTHROW(x) throw(x)
25   //***************** GCC ***********************
26    #if (__GNUC__ > 4) || \
27       (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
28       //**************** GCC >= 4.3.0 ***********
29       #include <tr1/unordered_set>
30       #include <tr1/unordered_map>
31       #define dyn_hash_set std::tr1::unordered_set
32       #define dyn_hash_map std::tr1::unordered_map
33    #else
34       //**************** GCC < 4.3.0 ************
35       #include <ext/hash_map>
36       #include <ext/hash_set>
37       #include <string>
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            {
47            const char *cstr = s.c_str();
48              return h(cstr);
49            };
50         };
51       }
52
53    #endif
54 #else
55    #error Unknown compiler
56 #endif
57
58
59 namespace Dyninst
60 {
61    typedef unsigned long Address;   
62    typedef unsigned long Offset;
63
64 #if defined(_MSC_VER)
65    typedef HANDLE PID;
66    typedef HANDLE LWP;
67    typedef HANDLE THR_ID;
68
69 #define NULL_PID     INVALID_HANDLE_VALUE
70 #define NULL_LWP     INVALID_HANDLE_VALUE
71 #define NULL_THR_ID     INVALID_HANDLE_VALUE
72
73 #else
74    typedef int PID;
75    typedef int LWP;
76    typedef int THR_ID;
77
78 #define NULL_PID     -1
79 #define NULL_LWP     -1
80 #define NULL_THR_ID     -1
81 #endif
82 }
83
84 #endif