@jawis/shared-algs
Version:
Data structures for building concurrent programs.
60 lines (59 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.equal = exports.align32 = exports.readNumber = exports.writeNumber = void 0;
const _jab_1 = require("^jab");
/**
*
* - Writes little endian, because that's easiest.
* - Checks that the number isn't truncated.
*/
const writeNumber = (target, offset, value, numBytes, errorMessage = "Not enough space for value.") => {
let tmp = value;
for (let i = 0; i < numBytes; i++) {
target[offset + i] = tmp & 0xff;
tmp = tmp >> 8;
}
(0, _jab_1.assert)(tmp === 0, errorMessage, {
value,
tmp,
numBytes,
});
};
exports.writeNumber = writeNumber;
/**
*
*/
const readNumber = (source, offset, numBytes) => {
let value = 0;
let shift = 0;
for (let i = 0; i < numBytes; i++) {
value += (0, _jab_1.def)(source[offset + i] << shift);
shift += 8;
}
return value;
};
exports.readNumber = readNumber;
/**
* Round up to divisible by four.
*
* @source https://www.npmjs.com/package/sharedmap
*/
function align32(v) {
return (v & 0xffffffffffffc) + (v & 0x3 ? 0x4 : 0);
}
exports.align32 = align32;
/**
* todo: should be able to use 'equal' library.
*/
const equal = (a, b) => {
if (a.length !== b.length) {
return false;
}
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
};
exports.equal = equal;