MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / GenerateHash

Function GenerateHash

SampleFramework12/v1.00/MurmurHash.cpp:76–151  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

74//-----------------------------------------------------------------------------
75
76Hash GenerateHash(const void* key, const int len, const uint32_t seed)
77{
78 const uint8_t * data = (const uint8_t*)key;
79 const int nblocks = len / 16;
80
81 uint64_t h1 = seed;
82 uint64_t h2 = seed;
83
84 const uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
85 const uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
86
87 //----------
88 // body
89
90 const uint64_t * blocks = (const uint64_t *)(data);
91
92 for(int i = 0; i < nblocks; i++)
93 {
94 uint64_t k1 = getblock(blocks,i*2+0);
95 uint64_t k2 = getblock(blocks,i*2+1);
96
97 k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
98
99 h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;
100
101 k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
102
103 h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;
104 }
105
106 //----------
107 // tail
108
109 const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
110
111 uint64_t k1 = 0;
112 uint64_t k2 = 0;
113
114 switch(len & 15)
115 {
116 case 15: k2 ^= uint64_t(tail[14]) << 48;
117 case 14: k2 ^= uint64_t(tail[13]) << 40;
118 case 13: k2 ^= uint64_t(tail[12]) << 32;
119 case 12: k2 ^= uint64_t(tail[11]) << 24;
120 case 11: k2 ^= uint64_t(tail[10]) << 16;
121 case 10: k2 ^= uint64_t(tail[ 9]) << 8;
122 case 9: k2 ^= uint64_t(tail[ 8]) << 0;
123 k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
124
125 case 8: k1 ^= uint64_t(tail[ 7]) << 56;
126 case 7: k1 ^= uint64_t(tail[ 6]) << 48;
127 case 6: k1 ^= uint64_t(tail[ 5]) << 40;
128 case 5: k1 ^= uint64_t(tail[ 4]) << 32;
129 case 4: k1 ^= uint64_t(tail[ 3]) << 24;
130 case 3: k1 ^= uint64_t(tail[ 2]) << 16;
131 case 2: k1 ^= uint64_t(tail[ 1]) << 8;
132 case 1: k1 ^= uint64_t(tail[ 0]) << 0;
133 k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;

Callers 3

PostProcessMethod · 0.85
MakeShaderCacheNameFunction · 0.85
CompileShaderFunction · 0.85

Calls 2

getblockFunction · 0.85
HashClass · 0.85

Tested by

no test coverage detected