pcsim_hash.h

Go to the documentation of this file.
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 /* _PCSIM_HASH_H_ */

Generated on Wed Jul 9 16:34:39 2008 for PCSIM by  doxygen 1.5.5