@hqtsm/dataview
Version:
DataView utilities
72 lines • 1.94 kB
JavaScript
;
/**
* @module
*
* 24-bit integer operations.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getInt24 = getInt24;
exports.getUint24 = getUint24;
exports.setInt24 = setInt24;
exports.setUint24 = setUint24;
/**
* Get 24-bit signed integer.
*
* @param dataView Data view.
* @param byteOffset Byte offset.
* @param littleEndian Little endian.
* @returns Integer value.
*/
function getInt24(dataView, byteOffset, littleEndian = false) {
return getUint24(dataView, byteOffset, littleEndian) << 8 >> 8;
}
/**
* Get 24-bit unsigned integer.
*
* @param dataView Data view.
* @param byteOffset Byte offset.
* @param littleEndian Little endian.
* @returns Integer value.
*/
function getUint24(dataView, byteOffset, littleEndian = false) {
const b = dataView.getUint8((byteOffset |= 0) + 2);
const a = dataView.getUint16(byteOffset, littleEndian);
return littleEndian ? a | b << 16 : a << 8 | b;
}
/**
* Set 24-bit signed integer.
*
* @param dataView Data view.
* @param byteOffset Byte offset.
* @param value Integer value.
* @param littleEndian Little endian.
*/
function setInt24(dataView, byteOffset, value, littleEndian = false) {
setUint24(dataView, byteOffset, value, littleEndian);
}
/**
* Set 24-bit unsigned integer.
*
* @param dataView Data view.
* @param byteOffset Byte offset.
* @param value Integer value.
* @param littleEndian Little endian.
*/
function setUint24(dataView, byteOffset, value, littleEndian = false) {
let a, b = value & 65280;
if (littleEndian) {
b |= value >> 16 & 255;
a = value & 255;
}
else {
b |= value & 255;
a = value >> 16 & 255;
}
if ((byteOffset |= 0) < 0) {
// Trigger native OOB exception.
dataView.setUint8(byteOffset, a);
}
dataView.setUint16(byteOffset + 1, b);
dataView.setUint8(byteOffset, a);
}
//# sourceMappingURL=24.js.map