
static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength) |
{ |
register ulong hash = 5381; |
|
/* variant with the hash unrolled eight times */ |
for (; nKeyLength >= 8; nKeyLength -= 8) { |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
hash = ((hash << 5) + hash) + *arKey++; |
} |
switch (nKeyLength) { |
case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */ |
case 1: hash = ((hash << 5) + hash) + *arKey++; break; |
case 0: break; |
EMPTY_SWITCH_DEFAULT_CASE() |
} |
return hash; |
} |
hashing function used in Perl 5.005: |
# Return the hashed value of a string: $hash = perlhash("key") |
# (Defined by the PERL_HASH macro in hv.h) |
sub perlhash |
{ |
$hash = 0; |
foreach (split //, shift) { |
$hash = $hash*33 + ord($_); |
} |
return $hash; |
} |



