hash.h

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