8 changed files with 49 additions and 62 deletions
-
8ChangeLog
-
8include/hash.h
-
2src/Makefile.am
-
30src/hash.c
-
29src/http/header.c
-
16src/http/header/add.c
-
16src/http/header/get.c
-
2src/http/worker/process.c
@ -0,0 +1,8 @@ |
|||
#ifndef __HASH_H__ |
|||
#define __HASH_H__ |
|||
|
|||
unsigned long sdbm(const unsigned char *); |
|||
|
|||
#endif // __HASH_H__ |
|||
|
|||
// vim: set ts=4 sw=4: |
|||
@ -0,0 +1,30 @@ |
|||
#include <ctype.h> |
|||
|
|||
#include "hash.h" |
|||
|
|||
/** |
|||
* SDBM hashing algorithm: |
|||
* |
|||
* this algorithm was created for sdbm (a public-domain reimplementation of |
|||
* ndbm) database library. it was found to do well in scrambling bits, |
|||
* causing better distribution of the keys and fewer splits. it also happens |
|||
* to be a good general hashing function with good distribution. the actual |
|||
* function is hash(i) = hash(i - 1) * 65599 + str[i]; what is included below |
|||
* is the faster version used in gawk. [there is even a faster, duff-device |
|||
* version] the magic constant 65599 was picked out of thin air while |
|||
* experimenting with different constants, and turns out to be a prime. this |
|||
* is one of the algorithms used in berkeley db (see sleepycat) and elsewhere. |
|||
*/ |
|||
unsigned long |
|||
sdbm(const unsigned char * str) |
|||
{ |
|||
unsigned long hash = 0; |
|||
int c; |
|||
|
|||
while ((c = tolower(*str++))) |
|||
hash = c + (hash << 6) + (hash << 16) - hash; |
|||
|
|||
return hash; |
|||
} |
|||
|
|||
// vim: set ts=4 sw=4: |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue