@gmod/bbi
Version:
Parser for BigWig/BigBed files
29 lines • 1.46 kB
JavaScript
;
// from https://github.com/yume-chan/ya-webadb/blob/main/libraries/dataview-bigint-polyfill
// license:MIT
// needed for browsers including safari 14
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBigInt64 = getBigInt64;
exports.getBigUint64 = getBigUint64;
const BigInt32 = BigInt(32);
function getBigInt64(dataView, byteOffset, littleEndian) {
const littleEndianMask = Number(!!littleEndian);
const bigEndianMask = Number(!littleEndian);
return ((BigInt(dataView.getInt32(byteOffset, littleEndian) * bigEndianMask +
dataView.getInt32(byteOffset + 4, littleEndian) * littleEndianMask) <<
BigInt32) |
BigInt(dataView.getUint32(byteOffset, littleEndian) * littleEndianMask +
dataView.getUint32(byteOffset + 4, littleEndian) * bigEndianMask));
}
function getBigUint64(dataView, byteOffset, littleEndian) {
const a = dataView.getUint32(byteOffset, littleEndian);
const b = dataView.getUint32(byteOffset + 4, littleEndian);
const littleEndianMask = Number(!!littleEndian);
const bigEndianMask = Number(!littleEndian);
// This branch-less optimization is 77x faster than normal ternary operator.
// and only 3% slower than native implementation
// https://jsbench.me/p8kyhg1eqv/1
return ((BigInt(a * bigEndianMask + b * littleEndianMask) << BigInt32) |
BigInt(a * littleEndianMask + b * bigEndianMask));
}
//# sourceMappingURL=pure.js.map