Files
libucore/src/hash64int.c
T
2013-03-06 22:22:04 +01:00

17 lines
380 B
C

#include <stdint.h>
#include "ucore/hash.h"
uint64_t
uc_hash64shift(uint64_t key)
{
key = (~key) + (key << 21); // key = (key << 21) - key - 1;
key = key ^ (key >> 24);
key = (key + (key << 3)) + (key << 8); // key * 265
key = key ^ (key >> 14);
key = (key + (key << 2)) + (key << 4); // key * 21
key = key ^ (key >> 28);
key = key + (key << 31);
return key;
}