resetting manifest requested domain to floor
[platform/upstream/ccache.git] / murmurhashneutral2.c
1 /*
2  * MurmurHashNeutral2, by Austin Appleby. Released to the public domain. See
3  * <http://murmurhash.googlepages.com>.
4  */
5
6 #include "murmurhashneutral2.h"
7
8 unsigned int
9 murmurhashneutral2(const void *key, int len, unsigned int seed)
10 {
11         const unsigned int m = 0x5bd1e995;
12         const int r = 24;
13
14         unsigned int h = seed ^ len;
15
16         const unsigned char *data = (const unsigned char *)key;
17
18         while (len >= 4) {
19                 unsigned int k;
20
21                 k  = data[0];
22                 k |= data[1] << 8;
23                 k |= data[2] << 16;
24                 k |= data[3] << 24;
25
26                 k *= m;
27                 k ^= k >> r;
28                 k *= m;
29
30                 h *= m;
31                 h ^= k;
32
33                 data += 4;
34                 len -= 4;
35         }
36
37         switch (len)
38         {
39         case 3: h ^= data[2] << 16;
40         case 2: h ^= data[1] << 8;
41         case 1: h ^= data[0];
42                 h *= m;
43         };
44
45         h ^= h >> 13;
46         h *= m;
47         h ^= h >> 15;
48
49         return h;
50 }