00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_COMMON_HASH_H
00008 #define BALL_COMMON_HASH_H
00009
00010 #ifndef BALL_COMMON_H
00011 # include <BALL/common.h>
00012 #endif
00013
00014 #ifndef BALL_DATATYPE_STRING_H
00015 # include <BALL/DATATYPE/string.h>
00016 #endif
00017
00018 namespace BALL
00019 {
00027 template <typename T>
00028 class HashFunction
00029 {
00030 public:
00031
00032 HashIndex operator () (const T& t) const
00033 {
00034 return Hash(t);
00035 }
00036 };
00037
00041
00044 BALL_EXPORT extern HashIndex hashPointer(void *const ptr);
00045
00048 BALL_EXPORT extern HashIndex hashString(const char* str);
00049
00052 BALL_EXPORT extern HashIndex hashPJWString(const char* str);
00053
00056 BALL_EXPORT extern HashIndex hashElfString(const char* str);
00057
00066 template <typename T>
00067 inline HashIndex Hash(const T& key)
00068 {
00069 return static_cast<HashIndex>((PointerSizeUInt)key);
00070 }
00071
00076 BALL_EXPORT inline HashIndex Hash(const string& s)
00077 {
00078 return hashString(s.c_str());
00079 }
00080
00085 BALL_EXPORT inline HashIndex Hash(const String& s)
00086 {
00087 return hashString(s.c_str());
00088 }
00089
00093 BALL_EXPORT inline HashIndex Hash(void *const& ptr)
00094 {
00095 return hashPointer(ptr);
00096 }
00097
00099
00101
00106 BALL_EXPORT HashIndex getNextPrime(HashIndex l);
00107
00109
00110 }
00111
00112 #endif // BALL_COMMON_HASH_H