UNPKG

@hqtsm/crc

Version:

CRC functions with a parameterized engine optimized for both speed and size

113 lines 3.67 kB
"use strict"; /** * @module * * The core CRC functions and types. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.crc = crc; function crc(size, poly, refi, xori, refo, xoro) { let t; let s; let i8 = size - size; let i0 = i8++; let i1 = i8++; let i255 = (i1 << (i8 <<= i8)) - i1; let h = i1 << size - i1; let m = h - i1 << i1 | i1; let n = i0 === 0; let reflect = (data, width) => { let r = data & i1; while (--width) { r = r << i1 | (data >>= i1) & i1; } return (n ? r >>> 0 : r); }; let table = () => { let r = size < i8 ? i8 - size : i0; let l = size - i8 + r; let a = h << r; let x = poly << r; let t = [i0]; let c; for (let i = i255; i;) { c = (refi ? reflect(i, 8) : i) << l; for (let j = 8; j--;) { c = c & a ? c << i1 ^ x : c << i1; } c >>= r; c = refi ? reflect(c, size) : (c & m); t[i--] = n ? c >>> 0 : c; } return t; }; return { size, poly, refi, xori, refo, xoro, reflect, table, init: refi ? () => reflect(xori, size) : () => xori, update: refi ? (n ? (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[(crc ^ data[i++]) & i255] ^ crc >>> i8); } return crc >>> 0; } : (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[Number(crc & i255) ^ data[i++] & 255] ^ crc >> i8); } return crc; }) : ((s = size - i8) > 0 ? (n ? (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[(crc >>> s ^ data[i++]) & i255] ^ crc << i8 & m); } return crc >>> 0; } : (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[Number(crc >> s & i255) ^ data[i++] & 255] ^ crc << i8 & m); } return crc; }) : ((s = -s, n) ? (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[(crc << s ^ data[i++]) & i255]); } return crc; } : (crc, data) => { t ??= table(); for (let i = 0, l = data.length; i < l;) { crc = (t[Number(crc << s & i255) ^ data[i++] & 255]); } return crc; })), finalize: refo === refi ? (n ? (crc) => (crc ^ xoro) >>> 0 : (crc) => (crc ^ xoro)) : (n ? (crc) => (reflect(crc, size) ^ xoro) >>> 0 : (crc) => (reflect(crc, size) ^ xoro)), }; } //# sourceMappingURL=crc.js.map