1189251Ssam/* 2189251SsamCopyright (C) 1990, 2000, 2002 Free Software Foundation 3189251Ssam written by Doug Lea <dl@rocky.oswego.edu> 4189251Ssam*/ 5252726Srpaulo 6252726Srpaulo#include <hash.h> 7189251Ssam 8189251Ssam/* 9189251Ssam Some useful hash function. 10189251Ssam It's not a particularly good hash function (<< 5 would be better than << 4), 11189251Ssam but people believe in it because it comes from Dragon book. 12189251Ssam*/ 13189251Ssam 14189251Ssamunsigned int 15189251Ssamhashpjw (const unsigned char *x, unsigned int len) // From Dragon book, p436 16189251Ssam{ 17189251Ssam unsigned int h = 0; 18214734Srpaulo unsigned int g; 19189251Ssam 20189251Ssam for (; len > 0; len--) 21214734Srpaulo { 22214734Srpaulo h = (h << 4) + *x++; 23189251Ssam if ((g = h & 0xf0000000) != 0) 24189251Ssam h = (h ^ (g >> 24)) ^ g; 25189251Ssam } 26189251Ssam return h; 27189251Ssam} 28189251Ssam