UNPKG

stateshot

Version:

💾 Non-aggressive history state management with structure sharing.

40 lines (32 loc) • 1.11 kB
// 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