00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: hash.h,v 1.23 2005/12/23 17:01:39 amoll Exp $ 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 } // namespace BALL 00111 00112 #endif // BALL_COMMON_HASH_H