@iotize/tap
Version:
IoTize Device client for Javascript
48 lines • 3.72 kB
JavaScript
import { TapStreamReader, TapStreamWriter } from '@iotize/tap/client/impl';
import { readFieldLength, writeFieldLength, } from './tlv-mapped-json-compressor';
export function getRequiredByteLengthToEncodeInteger(input, signed) {
const bits = Math.ceil(Math.log2(Math.abs(input) + 1)) + (signed ? 1 : 0);
return Math.ceil(bits / 8);
}
export class TLVMappedJsonIntegerCompressor {
constructor(signed) {
this.signed = signed;
}
encode(input, stream = new TapStreamWriter()) {
let bytesLength;
if (input === 0) {
bytesLength = 1;
}
else {
bytesLength = getRequiredByteLengthToEncodeInteger(input, this.signed);
if (bytesLength <= 0) {
throw new Error('Invalid byte length ' + bytesLength);
}
}
if (bytesLength === 3) {
bytesLength = 4;
}
writeFieldLength(stream, bytesLength);
if (this.signed) {
stream.writeS(input, bytesLength);
}
else {
stream.writeU(input, bytesLength);
}
return stream.toBytes;
}
decode(streamOrBuffer) {
const stream = TapStreamReader.create(streamOrBuffer);
const length = readFieldLength(stream);
if (length === 0) {
return 0;
}
if (this.signed) {
return stream.readS(length);
}
else {
return stream.readU(length);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGx2LW1hcHBlZC1qc29uLWludGVnZXItY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXh0cmEvZGJpb3Qvc3JjL2xpYi9qc29uLWNvbXByZXNzb3IvdGx2LW1hcHBlZC1qc29uLWludGVnZXItY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0UsT0FBTyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsR0FDakIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLFVBQVUsb0NBQW9DLENBQ2xELEtBQWEsRUFDYixNQUFlO0lBRWYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLE9BQU8sOEJBQThCO0lBR3pDLFlBQW9CLE1BQWU7UUFBZixXQUFNLEdBQU4sTUFBTSxDQUFTO0lBQUcsQ0FBQztJQUV2QyxNQUFNLENBQ0osS0FBYSxFQUNiLFNBQTBCLElBQUksZUFBZSxFQUFFO1FBRS9DLElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ2pCO2FBQU07WUFDTCxXQUFXLEdBQUcsb0NBQW9DLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RSxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUNELElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ2pCO1FBQ0QsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQTRDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQW1CLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztDQUNGIn0=