1. static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
2. {
3. register ulong hash = 5381;
4.
5. /* variant with the hash unrolled eight times */
6. for (; nKeyLength >= 8; nKeyLength -= 8) {
7. hash = ((hash << 5) + hash) + *arKey++;
8. hash = ((hash << 5) + hash) + *arKey++;
9. hash = ((hash << 5) + hash) + *arKey++;
10. hash = ((hash << 5) + hash) + *arKey++;
11. hash = ((hash << 5) + hash) + *arKey++;
12. hash = ((hash << 5) + hash) + *arKey++;
13. hash = ((hash << 5) + hash) + *arKey++;
14. hash = ((hash << 5) + hash) + *arKey++;
15. }
16. switch (nKeyLength) {
17. case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
18. case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
19. case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
20. case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
21. case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
22. case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
23. case 1: hash = ((hash << 5) + hash) + *arKey++; break;
24. case 0: break;
25. EMPTY_SWITCH_DEFAULT_CASE()
26. }
27. return hash;
28. }
问问题
496 次
2 回答
4
所有哈希表都使用该哈希算法;例如,PHP 中的哈希表用于实现数组和符号表等。
如标题中所指出的,该算法是 DJBX33A(Daniel J. Bernstein,Times 33 with Addition)。
于 2010-11-19T07:52:58.607 回答
1
您可以使用此链接查看此函数的使用位置: http://lxr.php.net/search?q=+zend_inline_hash_func&defs=&refs=&path=&hist=&project= PHP_5_4
看起来有 3 个使用此功能的 php 扩展(包括标准)。
于 2013-03-18T20:49:39.857 回答