|
|
@ -23,40 +23,13 @@ |
|
|
|
|
|
|
|
|
#include <stdlib.h> |
|
|
#include <stdlib.h> |
|
|
#include <string.h> |
|
|
#include <string.h> |
|
|
#include <ctype.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "hash.h" |
|
|
#include "class.h" |
|
|
#include "class.h" |
|
|
#include "interface/class.h" |
|
|
#include "interface/class.h" |
|
|
|
|
|
|
|
|
#include "http/header.h" |
|
|
#include "http/header.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. |
|
|
|
|
|
*/ |
|
|
|
|
|
static |
|
|
|
|
|
inline |
|
|
|
|
|
unsigned long |
|
|
|
|
|
sdbm(unsigned char * str) |
|
|
|
|
|
{ |
|
|
|
|
|
unsigned long hash = 0; |
|
|
|
|
|
int c; |
|
|
|
|
|
|
|
|
|
|
|
while ((c = tolower(*str++))) |
|
|
|
|
|
hash = c + (hash << 6) + (hash << 16) - hash; |
|
|
|
|
|
|
|
|
|
|
|
return hash; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
static |
|
|
void |
|
|
void |
|
|
ctor(void * _this, va_list * params) { |
|
|
ctor(void * _this, va_list * params) { |
|
|
|