Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ngx_murmurhash.c
Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) Austin Appleby
4  */
5 
6 
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9 
10 
11 uint32_t
12 ngx_murmur_hash2(u_char *data, size_t len)
13 {
14  uint32_t h, k;
15 
16  h = 0 ^ len;
17 
18  while (len >= 4) {
19  k = data[0];
20  k |= data[1] << 8;
21  k |= data[2] << 16;
22  k |= data[3] << 24;
23 
24  k *= 0x5bd1e995;
25  k ^= k >> 24;
26  k *= 0x5bd1e995;
27 
28  h *= 0x5bd1e995;
29  h ^= k;
30 
31  data += 4;
32  len -= 4;
33  }
34 
35  switch (len) {
36  case 3:
37  h ^= data[2] << 16;
38  case 2:
39  h ^= data[1] << 8;
40  case 1:
41  h ^= data[0];
42  h *= 0x5bd1e995;
43  }
44 
45  h ^= h >> 13;
46  h *= 0x5bd1e995;
47  h ^= h >> 15;
48 
49  return h;
50 }