mirror of https://github.com/calzoneman/sync.git
36 lines
714 B
JavaScript
36 lines
714 B
JavaScript
const SEED = 0x1234;
|
|
const M = 0xc6a4a793;
|
|
const R = 16;
|
|
|
|
export function murmurHash1(str) {
|
|
const buffer = new Buffer(str, 'utf8');
|
|
var length = buffer.length;
|
|
var h = SEED ^ (length * M);
|
|
|
|
while (length >= 4) {
|
|
var k = buffer.readUInt32LE(buffer.length - length);
|
|
h += k;
|
|
h *= M;
|
|
h ^= h >> 16;
|
|
length -= 4;
|
|
}
|
|
|
|
switch (length) {
|
|
case 3:
|
|
h += buffer[buffer.length - 3] >> 16;
|
|
case 2:
|
|
h += buffer[buffer.length - 2] >> 8;
|
|
case 1:
|
|
h += buffer[buffer.length - 1];
|
|
h *= M;
|
|
h ^= h >> R;
|
|
}
|
|
|
|
h *= M;
|
|
h ^= h >> 10;
|
|
h *= M;
|
|
h ^= h >> 17;
|
|
|
|
return h;
|
|
}
|