WvStreams
wvhash.cc
00001 #include "wvhash.h"
00002 
00003 // Note: this hash function is case-insensitive since it ignores the
00004 // bit in ASCII that defines case.  You may want to take advantage of this.
00005 unsigned int WvHash(const char *s)
00006 {
00007     unsigned hash = 0, slide, andval;
00008     if (!s) return 0;
00009     
00010     slide = sizeof(hash)*8 - 5;
00011     andval = 0x1F << slide;
00012     
00013     while (*s)
00014         hash = (hash<<4) ^ (*(s++) & 0x1F) ^ ((hash & andval) >> slide);
00015     
00016     return hash;
00017 }
00018 
00019 unsigned WvHash(WvStringParm s)
00020 {
00021     return !s ? 0 : WvHash((const char *)s);
00022 }
00023 
00024 // FIXME: does this suck?
00025 unsigned WvHash(const int &i)
00026 {
00027     return i;
00028 }
00029 
00030 
00031 unsigned WvHash(const void *p)
00032 {
00033     return reinterpret_cast<unsigned long>(p);
00034 }
00035