Projektstart
This commit is contained in:
107
backend/node_modules/mnemonist/utils/hash-tables.js
generated
vendored
Normal file
107
backend/node_modules/mnemonist/utils/hash-tables.js
generated
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
/* eslint no-constant-condition: 0 */
|
||||
/**
|
||||
* Mnemonist Hashtable Helpers
|
||||
* ============================
|
||||
*
|
||||
* Miscellaneous helpers helper function dealing with hashtables.
|
||||
*/
|
||||
function jenkinsInt32(a) {
|
||||
|
||||
a = (a + 0x7ed55d16) + (a << 12);
|
||||
a = (a ^ 0xc761c23c) ^ (a >> 19);
|
||||
a = (a + 0x165667b1) + (a << 5);
|
||||
a = (a + 0xd3a2646c) ^ (a << 9);
|
||||
a = (a + 0xfd7046c5) + (a << 3);
|
||||
a = (a ^ 0xb55a4f09) ^ (a >> 16);
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
function linearProbingGet(hash, keys, values, key) {
|
||||
var n = keys.length,
|
||||
j = hash(key) & (n - 1),
|
||||
i = j;
|
||||
|
||||
var c;
|
||||
|
||||
while (true) {
|
||||
c = keys[i];
|
||||
|
||||
if (c === key)
|
||||
return values[i];
|
||||
|
||||
else if (c === 0)
|
||||
return;
|
||||
|
||||
// Handling wrapping around
|
||||
i += 1;
|
||||
i %= n;
|
||||
|
||||
// Full turn
|
||||
if (i === j)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function linearProbingHas(hash, keys, key) {
|
||||
var n = keys.length,
|
||||
j = hash(key) & (n - 1),
|
||||
i = j;
|
||||
|
||||
var c;
|
||||
|
||||
while (true) {
|
||||
c = keys[i];
|
||||
|
||||
if (c === key)
|
||||
return true;
|
||||
|
||||
else if (c === 0)
|
||||
return false;
|
||||
|
||||
// Handling wrapping around
|
||||
i += 1;
|
||||
i %= n;
|
||||
|
||||
// Full turn
|
||||
if (i === j)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function linearProbingSet(hash, keys, values, key, value) {
|
||||
var n = keys.length,
|
||||
j = hash(key) & (n - 1),
|
||||
i = j;
|
||||
|
||||
var c;
|
||||
|
||||
while (true) {
|
||||
c = keys[i];
|
||||
|
||||
if (c === 0 || c === key)
|
||||
break;
|
||||
|
||||
// Handling wrapping around
|
||||
i += 1;
|
||||
i %= n;
|
||||
|
||||
// Full turn
|
||||
if (i === j)
|
||||
throw new Error('mnemonist/utils/hash-tables.linearProbingSet: table is full.');
|
||||
}
|
||||
|
||||
keys[i] = key;
|
||||
values[i] = value;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
hashes: {
|
||||
jenkinsInt32: jenkinsInt32
|
||||
},
|
||||
linearProbing: {
|
||||
get: linearProbingGet,
|
||||
has: linearProbingHas,
|
||||
set: linearProbingSet
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user