Repository URL to install this package:
Version:
6.0.0-beta.8 ▾
|
"use strict";
/**
* murmurhash2 via https://gist.github.com/raycmorgan/588423
* http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
* https://github.com/threepointone/glamor/blob/master/src/hash.js
*/
// module.exports = function fliphash(str) {
// var hash = 0, len = str.length
// if (len == 0) return 0
// for (i = 0; i < len; i++) {
// char = str.charCodeAt(i)
// hash = ((hash << 5) - hash) + char
// hash = hash & hash // Convert to 32bit integer
// }
// return hash
// }
Object.defineProperty(exports, "__esModule", { value: true });
function doHash(str, seed = '') {
const m = 0x5bd1e995;
const r = 24;
let h = seed ^ str.length;
let length = str.length;
let currentIndex = 0;
while (length >= 4) {
let k = UInt32(str, currentIndex);
k = Umul32(k, m);
k ^= k >>> r;
k = Umul32(k, m);
h = Umul32(h, m);
h ^= k;
currentIndex += 4;
length -= 4;
}
switch (length) {
case 3:
h ^= UInt16(str, currentIndex);
h ^= str.charCodeAt(currentIndex + 2) << 16;
h = Umul32(h, m);
break;
case 2:
h ^= UInt16(str, currentIndex);
h = Umul32(h, m);
break;
case 1:
h ^= str.charCodeAt(currentIndex);
h = Umul32(h, m);
break;
}
h ^= h >>> 13;
h = Umul32(h, m);
h ^= h >>> 15;
return h >>> 0;
}
exports.default = doHash;
function UInt32(str, pos) {
return (str.charCodeAt(pos++) +
(str.charCodeAt(pos++) << 8) +
(str.charCodeAt(pos++) << 16) +
(str.charCodeAt(pos) << 24));
}
function UInt16(str, pos) {
return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8);
}
function Umul32(n, m) {
n = n | 0;
m = m | 0;
const nlo = n & 0xffff;
const nhi = n >>> 16;
const res = (nlo * m + (((nhi * m) & 0xffff) << 16)) | 0;
return res;
}
//# sourceMappingURL=fliphash.js.map