#ifndef __HASH_HPP #define __HASH_HPP typedef unsigned long hashvalue_t; #define hashwidth 4 inline hashvalue_t shiftHashValue(hashvalue_t h, char nc) { //assumes little-endian return (h>>8)|(hashvalue_t(nc)<<24); } inline hashvalue_t unsafeHashStringValue(const char *p) { return *((hashvalue_t*)p); } //assumes that hashvalue_t is 4 chars wide inline hashvalue_t hashStringValue(const char *p) { if(p[0] && p[1] && p[2] && p[3]) return *((hashvalue_t*)p); else { hashvalue_t t=0; if(p[0]) { t=shiftHashValue(t,p[0]); if(p[1]) { t=shiftHashValue(t,p[1]); if(p[2]) { t=shiftHashValue(t,p[2]); if(p[3]) { t=shiftHashValue(t,p[3]); } else t=shiftHashValue(t,'\0'); } else t=shiftHashValue(t,'\0'); } else t=shiftHashValue(t,'\0'); } else t=shiftHashValue(t,'\0'); return t; } } #endif