@graffy/common
Version:
Common libraries that used by various Graffy modules.
43 lines (36 loc) • 1.08 kB
JavaScript
exports.__esModule = true;
exports.encode = encode;
exports.decode = decode;
/*
Order-preserving encoding of 64-bit floating point numbers.
*/
function encode(number) {
var buffer = new ArrayBuffer(8);
var view = new DataView(buffer);
view.setFloat64(0, number);
/* if first bit is set */
if (number < 0) {
view.setUint32(0, ~view.getUint32(0) >>> 0);
view.setUint32(4, ~view.getUint32(4) >>> 0);
} else {
/* non-negative number, just set the leading bit. */
view.setUint8(0, view.getUint8(0) | 0x80);
}
return new Uint8Array(buffer);
}
function decode(u8Arr) {
var buffer = u8Arr.buffer,
byteOffset = u8Arr.byteOffset,
byteLength = u8Arr.byteLength;
var view = new DataView(buffer, byteOffset, byteLength);
var high = view.getUint8(0);
if (high & 0x80) {
// originally a non-negative number. Just set the sign bit back to 0.
view.setUint8(0, high & 0x7f);
} else {
view.setUint32(0, ~view.getUint32(0) >>> 0);
view.setUint32(4, ~view.getUint32(4) >>> 0);
}
return view.getFloat64(0);
}
;