UNPKG

@jawis/shared-algs

Version:

Data structures for building concurrent programs.

60 lines (59 loc) 1.47 kB
"use strict"; 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;