|
Revision 5, 0.8 KB
(checked in by nick, 3 years ago)
|
|
|
| Line | |
|---|
| 1 | #include "apachetop.h" |
|---|
| 2 | |
|---|
| 3 | #define THREE_QUARTERS 24 |
|---|
| 4 | #define ONE_EIGHTH 4 |
|---|
| 5 | #define HIGH_BITS (~((unsigned int)(~0) >> ONE_EIGHTH)) |
|---|
| 6 | |
|---|
| 7 | inline unsigned int StringHash(register const char *str) |
|---|
| 8 | { |
|---|
| 9 | register unsigned int val; |
|---|
| 10 | register unsigned int i; |
|---|
| 11 | |
|---|
| 12 | for (val = 0; *str; str++) |
|---|
| 13 | { |
|---|
| 14 | val = (val << ONE_EIGHTH) + *str; |
|---|
| 15 | |
|---|
| 16 | if ((i = val & HIGH_BITS) != 0) |
|---|
| 17 | val = (val ^ (i >> THREE_QUARTERS)) & ~HIGH_BITS; |
|---|
| 18 | } |
|---|
| 19 | return val; |
|---|
| 20 | } |
|---|
| 21 | |
|---|
| 22 | inline unsigned int QuickHash(register const char *str) |
|---|
| 23 | { |
|---|
| 24 | register unsigned int val, tmp; |
|---|
| 25 | |
|---|
| 26 | for(val = 0 ; *str ; str++) |
|---|
| 27 | { |
|---|
| 28 | val = (val << 4) + *str; |
|---|
| 29 | if ((tmp = (val & 0xf0000000))) |
|---|
| 30 | val = (val ^ (tmp >> 24)) ^ tmp; |
|---|
| 31 | } |
|---|
| 32 | return val; |
|---|
| 33 | } |
|---|
| 34 | |
|---|
| 35 | inline unsigned long TTHash(register const char *str) |
|---|
| 36 | { |
|---|
| 37 | unsigned long hash = 5381; |
|---|
| 38 | int c; |
|---|
| 39 | |
|---|
| 40 | while ((c = *str++)) |
|---|
| 41 | hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ |
|---|
| 42 | |
|---|
| 43 | return hash; |
|---|
| 44 | } |
|---|