MCPcopy Create free account
hub / github.com/defold/defold / dmHashBufferNoReverse64

Function dmHashBufferNoReverse64

engine/dlib/src/dlib/hash.cpp:254–304  ·  view source on GitHub ↗

Based on MurmurHash2A but endian neutral

Source from the content-addressed store, hash-verified

252
253// Based on MurmurHash2A but endian neutral
254uint64_t dmHashBufferNoReverse64(const void * key, uint32_t len)
255{
256 const uint64_t m = 0xc6a4a7935bd1e995ULL;
257 const int r = 47;
258 uint64_t l = len;
259
260 const unsigned char * data = (const unsigned char *)key;
261
262 uint64_t h = /*seed*/ 0;
263
264 while(len >= 8)
265 {
266 uint64_t k;
267
268 k = uint64_t(data[0]);
269 k |= uint64_t(data[1]) << 8;
270 k |= uint64_t(data[2]) << 16;
271 k |= uint64_t(data[3]) << 24;
272 k |= uint64_t(data[4]) << 32;
273 k |= uint64_t(data[5]) << 40;
274 k |= uint64_t(data[6]) << 48;
275 k |= uint64_t(data[7]) << 56;
276
277 mmix(h,k);
278
279 data += 8;
280 len -= 8;
281 }
282
283 uint64_t t = 0;
284
285 switch(len)
286 {
287 case 7: t ^= uint64_t(data[6]) << 48;
288 case 6: t ^= uint64_t(data[5]) << 40;
289 case 5: t ^= uint64_t(data[4]) << 32;
290 case 4: t ^= uint64_t(data[3]) << 24;
291 case 3: t ^= uint64_t(data[2]) << 16;
292 case 2: t ^= uint64_t(data[1]) << 8;
293 case 1: t ^= uint64_t(data[0]);
294 };
295
296 mmix(h,t);
297 mmix(h,l);
298
299 h ^= h >> r;
300 h *= m;
301 h ^= h >> r;
302
303 return h;
304}
305
306uint64_t dmHashBuffer64(const void * key, uint32_t len)
307{

Callers 5

dmHashBuffer64Function · 0.85
TEST_FFunction · 0.85
CreateEntryMapFunction · 0.85

Calls

no outgoing calls

Tested by 1

TEST_FFunction · 0.68