xxhash 函数(非标准处理任意字节流的 xxhash)
- 参数
-
| in | 输入数据,可以为 NULL |
| inlen | 输入数据长度 |
| key | 64-bit 秘钥,可以为 NULL |
- 警告
- 若 key 为 NULL,则使用全零秘钥
- 返回
- 64-bit hash 值
在文件 xxhash.c 第 20 行定义.
20 {
21 uint64_t seed = key == NULL ? 0 : key[0];
22 if (in == NULL || inlen == 0) {
24 seed += 0;
25 seed ^= seed >> 33;
27 seed ^= seed >> 29;
29 seed ^= seed >> 32;
30 return seed;
31 }
32
33 const uint64_t* p = in;
34 const uint64_t* const end = in + inlen;
35 uint64_t h64;
36
37 if (inlen >= 4) {
38 const uint64_t* const limit = end - 4;
41 uint64_t v3 = seed + 0;
43
44 do {
48 p++;
49
53 p++;
54
58 p++;
59
63 p++;
64 } while (p <= limit);
65
67
73
79
83 h64 ^= v3;
85
89 h64 ^= v4;
91 } else {
93 }
94
95 h64 += (uint64_t)(inlen *
sizeof(
mp_limb_t));
96
97 while (p < end) {
98 uint64_t k1 = *p;
102 h64 ^= k1;
104 p++;
105 }
106
107 h64 ^= h64 >> 33;
109 h64 ^= h64 >> 29;
111 h64 ^= h64 >> 32;
112
113 return h64;
114}
static uint64_t rotl64(uint64_t x, int b)
引用了 PRIME64_1, PRIME64_2, PRIME64_3, PRIME64_4, PRIME64_5, rotl64(), v1 , 以及 v2.