17 lines
380 B
C
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;
|
|
}
|