WvStreams
|
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