stateshot
Version:
💾 Non-aggressive history state management with structure sharing.
40 lines (32 loc) • 1.11 kB
JavaScript
// See https://github.com/garycourt/murmurhash-js
const murmurHash2 = (str, seed = 0) => {
let l = str.length
let h = seed ^ l
let i = 0
let k
while (l >= 4) {
k =
((str.charCodeAt(i) & 0xff)) |
((str.charCodeAt(++i) & 0xff) << 8) |
((str.charCodeAt(++i) & 0xff) << 16) |
((str.charCodeAt(++i) & 0xff) << 24)
k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16))
k ^= k >>> 24
k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16))
h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k
l -= 4
++i
}
/* eslint-disable no-fallthrough */
switch (l) {
case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16
case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8
case 1: h ^= (str.charCodeAt(i) & 0xff)
h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16))
}
h ^= h >>> 13
h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16))
h ^= h >>> 15
return h >>> 0
}
export const hashFunc = murmurHash2