00001 #ifndef _PCSIM_HASH_H_
00002 #define _PCSIM_HASH_H_
00003
00004 #include <boost/functional/hash.hpp>
00005
00006
00007 #ifdef HAVE_STL_PORT
00008
00009 #include <hash_map>
00010 using std::hash_map;
00011
00012 #include <hash_set>
00013 using std::hash_set;
00014
00015 #else
00016
00018
00019 #if defined(__GNUC__)
00020
00021 #include <ext/hash_map>
00022 using __gnu_cxx::hash_map;
00023
00024 #include <ext/hash_set>
00025 using __gnu_cxx::hash_set;
00026
00027 namespace PCSIM
00028 {
00029
00030 template<class T>
00031 class hash : public boost::hash<T>
00032 {
00033 };
00034
00035 }
00036
00038
00039 #elif defined(_MSC_VER)
00040
00041 #include <hash_map>
00042 using stdext::hash_map;
00043
00044 #include <hash_set>
00045 using stdext::hash_set;
00046
00047 namespace PCSIM
00048 {
00049
00050 template<class T>
00051 class hash : public stdext::hash_compare<T>
00052 {
00053 public:
00054
00055 size_t operator() (const T& s) const
00056 {
00057 return hv(s);
00058 }
00059
00060 bool operator() (const T& s1, const T& s2) const
00061 {
00062 return s1 < s2;
00063 }
00064
00065 private:
00066 boost::hash< T > hasher;
00067 std::size_t hv(T const& str) const
00068 {
00069 return hasher(str);
00070 }
00071
00072 };
00073
00074 }
00075
00076 #else
00077
00078 #error NO SUITABLE HASH_MAP and HASH_SET
00079
00080 #endif
00081
00082 #endif
00083
00084 #endif