UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

43 lines (36 loc) 1.08 kB
"use strict"; 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); }