jsonbinpack
Version:
A space-efficient schema-driven binary JSON serialization format based on JSON Schema
36 lines (35 loc) • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DOUBLE_VARINT_TUPLE = void 0;
var zigzag_1 = require("../integer/zigzag");
var varint_1 = require("../integer/varint");
var DOUBLE_VARINT_TUPLE = function (buffer, offset, _options) {
var integralResult = varint_1.varintDecode(buffer, offset);
var pointResult = varint_1.varintDecode(buffer, offset + integralResult.bytes);
var integralValue = zigzag_1.zigzagDecode(integralResult.value);
var integral = integralValue.toString();
var point = integralValue < BigInt(0)
? Number(zigzag_1.zigzagDecode(pointResult.value)) + 1
: Number(zigzag_1.zigzagDecode(pointResult.value));
var bytes = integralResult.bytes + pointResult.bytes;
if (point === 0 || (point === 1 && integralValue < BigInt(0))) {
return {
value: Number(integralValue),
bytes: bytes
};
}
else if (point < 0) {
var zeroes = "0." + '0'.repeat(Math.abs(point) - 1);
return {
value: parseFloat(integralValue < 0
? "-" + zeroes + integral.slice(1)
: "" + zeroes + integral),
bytes: bytes
};
}
return {
value: parseFloat(integral.slice(0, point) + "." + integral.slice(point)),
bytes: bytes
};
};
exports.DOUBLE_VARINT_TUPLE = DOUBLE_VARINT_TUPLE;