serverless-spy
Version:
CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.
108 lines (83 loc) • 1.77 kB
JavaScript
/* 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
}
};