--- /dev/null
+"use strict";\r
+\r
+module.exports = factory(factory);\r
+\r
+/**\r
+ * Reads / writes floats / doubles from / to buffers.\r
+ * @name util.float\r
+ * @namespace\r
+ */\r
+\r
+/**\r
+ * Writes a 32 bit float to a buffer using little endian byte order.\r
+ * @name util.float.writeFloatLE\r
+ * @function\r
+ * @param {number} val Value to write\r
+ * @param {Uint8Array} buf Target buffer\r
+ * @param {number} pos Target buffer offset\r
+ * @returns {undefined}\r
+ */\r
+\r
+/**\r
+ * Writes a 32 bit float to a buffer using big endian byte order.\r
+ * @name util.float.writeFloatBE\r
+ * @function\r
+ * @param {number} val Value to write\r
+ * @param {Uint8Array} buf Target buffer\r
+ * @param {number} pos Target buffer offset\r
+ * @returns {undefined}\r
+ */\r
+\r
+/**\r
+ * Reads a 32 bit float from a buffer using little endian byte order.\r
+ * @name util.float.readFloatLE\r
+ * @function\r
+ * @param {Uint8Array} buf Source buffer\r
+ * @param {number} pos Source buffer offset\r
+ * @returns {number} Value read\r
+ */\r
+\r
+/**\r
+ * Reads a 32 bit float from a buffer using big endian byte order.\r
+ * @name util.float.readFloatBE\r
+ * @function\r
+ * @param {Uint8Array} buf Source buffer\r
+ * @param {number} pos Source buffer offset\r
+ * @returns {number} Value read\r
+ */\r
+\r
+/**\r
+ * Writes a 64 bit double to a buffer using little endian byte order.\r
+ * @name util.float.writeDoubleLE\r
+ * @function\r
+ * @param {number} val Value to write\r
+ * @param {Uint8Array} buf Target buffer\r
+ * @param {number} pos Target buffer offset\r
+ * @returns {undefined}\r
+ */\r
+\r
+/**\r
+ * Writes a 64 bit double to a buffer using big endian byte order.\r
+ * @name util.float.writeDoubleBE\r
+ * @function\r
+ * @param {number} val Value to write\r
+ * @param {Uint8Array} buf Target buffer\r
+ * @param {number} pos Target buffer offset\r
+ * @returns {undefined}\r
+ */\r
+\r
+/**\r
+ * Reads a 64 bit double from a buffer using little endian byte order.\r
+ * @name util.float.readDoubleLE\r
+ * @function\r
+ * @param {Uint8Array} buf Source buffer\r
+ * @param {number} pos Source buffer offset\r
+ * @returns {number} Value read\r
+ */\r
+\r
+/**\r
+ * Reads a 64 bit double from a buffer using big endian byte order.\r
+ * @name util.float.readDoubleBE\r
+ * @function\r
+ * @param {Uint8Array} buf Source buffer\r
+ * @param {number} pos Source buffer offset\r
+ * @returns {number} Value read\r
+ */\r
+\r
+// Factory function for the purpose of node-based testing in modified global environments\r
+function factory(exports) {\r
+\r
+ // float: typed array\r
+ if (typeof Float32Array !== "undefined") (function() {\r
+\r
+ var f32 = new Float32Array([ -0 ]),\r
+ f8b = new Uint8Array(f32.buffer),\r
+ le = f8b[3] === 128;\r
+\r
+ function writeFloat_f32_cpy(val, buf, pos) {\r
+ f32[0] = val;\r
+ buf[pos ] = f8b[0];\r
+ buf[pos + 1] = f8b[1];\r
+ buf[pos + 2] = f8b[2];\r
+ buf[pos + 3] = f8b[3];\r
+ }\r
+\r
+ function writeFloat_f32_rev(val, buf, pos) {\r
+ f32[0] = val;\r
+ buf[pos ] = f8b[3];\r
+ buf[pos + 1] = f8b[2];\r
+ buf[pos + 2] = f8b[1];\r
+ buf[pos + 3] = f8b[0];\r
+ }\r
+\r
+ /* istanbul ignore next */\r
+ exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r
+ /* istanbul ignore next */\r
+ exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r
+\r
+ function readFloat_f32_cpy(buf, pos) {\r
+ f8b[0] = buf[pos ];\r
+ f8b[1] = buf[pos + 1];\r
+ f8b[2] = buf[pos + 2];\r
+ f8b[3] = buf[pos + 3];\r
+ return f32[0];\r
+ }\r
+\r
+ function readFloat_f32_rev(buf, pos) {\r
+ f8b[3] = buf[pos ];\r
+ f8b[2] = buf[pos + 1];\r
+ f8b[1] = buf[pos + 2];\r
+ f8b[0] = buf[pos + 3];\r
+ return f32[0];\r
+ }\r
+\r
+ /* istanbul ignore next */\r
+ exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r
+ /* istanbul ignore next */\r
+ exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r
+\r
+ // float: ieee754\r
+ })(); else (function() {\r
+\r
+ function writeFloat_ieee754(writeUint, val, buf, pos) {\r
+ var sign = val < 0 ? 1 : 0;\r
+ if (sign)\r
+ val = -val;\r
+ if (val === 0)\r
+ writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r
+ else if (isNaN(val))\r
+ writeUint(2143289344, buf, pos);\r
+ else if (val > 3.4028234663852886e+38) // +-Infinity\r
+ writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r
+ else if (val < 1.1754943508222875e-38) // denormal\r
+ writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r
+ else {\r
+ var exponent = Math.floor(Math.log(val) / Math.LN2),\r
+ mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r
+ writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r
+ }\r
+ }\r
+\r
+ exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r
+ exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r
+\r
+ function readFloat_ieee754(readUint, buf, pos) {\r
+ var uint = readUint(buf, pos),\r
+ sign = (uint >> 31) * 2 + 1,\r
+ exponent = uint >>> 23 & 255,\r
+ mantissa = uint & 8388607;\r
+ return exponent === 255\r
+ ? mantissa\r
+ ? NaN\r
+ : sign * Infinity\r
+ : exponent === 0 // denormal\r
+ ? sign * 1.401298464324817e-45 * mantissa\r
+ : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r
+ }\r
+\r
+ exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r
+ exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r
+\r
+ })();\r
+\r
+ // double: typed array\r
+ if (typeof Float64Array !== "undefined") (function() {\r
+\r
+ var f64 = new Float64Array([-0]),\r
+ f8b = new Uint8Array(f64.buffer),\r
+ le = f8b[7] === 128;\r
+\r
+ function writeDouble_f64_cpy(val, buf, pos) {\r
+ f64[0] = val;\r
+ buf[pos ] = f8b[0];\r
+ buf[pos + 1] = f8b[1];\r
+ buf[pos + 2] = f8b[2];\r
+ buf[pos + 3] = f8b[3];\r
+ buf[pos + 4] = f8b[4];\r
+ buf[pos + 5] = f8b[5];\r
+ buf[pos + 6] = f8b[6];\r
+ buf[pos + 7] = f8b[7];\r
+ }\r
+\r
+ function writeDouble_f64_rev(val, buf, pos) {\r
+ f64[0] = val;\r
+ buf[pos ] = f8b[7];\r
+ buf[pos + 1] = f8b[6];\r
+ buf[pos + 2] = f8b[5];\r
+ buf[pos + 3] = f8b[4];\r
+ buf[pos + 4] = f8b[3];\r
+ buf[pos + 5] = f8b[2];\r
+ buf[pos + 6] = f8b[1];\r
+ buf[pos + 7] = f8b[0];\r
+ }\r
+\r
+ /* istanbul ignore next */\r
+ exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r
+ /* istanbul ignore next */\r
+ exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r
+\r
+ function readDouble_f64_cpy(buf, pos) {\r
+ f8b[0] = buf[pos ];\r
+ f8b[1] = buf[pos + 1];\r
+ f8b[2] = buf[pos + 2];\r
+ f8b[3] = buf[pos + 3];\r
+ f8b[4] = buf[pos + 4];\r
+ f8b[5] = buf[pos + 5];\r
+ f8b[6] = buf[pos + 6];\r
+ f8b[7] = buf[pos + 7];\r
+ return f64[0];\r
+ }\r
+\r
+ function readDouble_f64_rev(buf, pos) {\r
+ f8b[7] = buf[pos ];\r
+ f8b[6] = buf[pos + 1];\r
+ f8b[5] = buf[pos + 2];\r
+ f8b[4] = buf[pos + 3];\r
+ f8b[3] = buf[pos + 4];\r
+ f8b[2] = buf[pos + 5];\r
+ f8b[1] = buf[pos + 6];\r
+ f8b[0] = buf[pos + 7];\r
+ return f64[0];\r
+ }\r
+\r
+ /* istanbul ignore next */\r
+ exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r
+ /* istanbul ignore next */\r
+ exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r
+\r
+ // double: ieee754\r
+ })(); else (function() {\r
+\r
+ function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r
+ var sign = val < 0 ? 1 : 0;\r
+ if (sign)\r
+ val = -val;\r
+ if (val === 0) {\r
+ writeUint(0, buf, pos + off0);\r
+ writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r
+ } else if (isNaN(val)) {\r
+ writeUint(0, buf, pos + off0);\r
+ writeUint(2146959360, buf, pos + off1);\r
+ } else if (val > 1.7976931348623157e+308) { // +-Infinity\r
+ writeUint(0, buf, pos + off0);\r
+ writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r
+ } else {\r
+ var mantissa;\r
+ if (val < 2.2250738585072014e-308) { // denormal\r
+ mantissa = val / 5e-324;\r
+ writeUint(mantissa >>> 0, buf, pos + off0);\r
+ writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r
+ } else {\r
+ var exponent = Math.floor(Math.log(val) / Math.LN2);\r
+ if (exponent === 1024)\r
+ exponent = 1023;\r
+ mantissa = val * Math.pow(2, -exponent);\r
+ writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r
+ writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r
+ }\r
+ }\r
+ }\r
+\r
+ exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r
+ exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r
+\r
+ function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r
+ var lo = readUint(buf, pos + off0),\r
+ hi = readUint(buf, pos + off1);\r
+ var sign = (hi >> 31) * 2 + 1,\r
+ exponent = hi >>> 20 & 2047,\r
+ mantissa = 4294967296 * (hi & 1048575) + lo;\r
+ return exponent === 2047\r
+ ? mantissa\r
+ ? NaN\r
+ : sign * Infinity\r
+ : exponent === 0 // denormal\r
+ ? sign * 5e-324 * mantissa\r
+ : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r
+ }\r
+\r
+ exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r
+ exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r
+\r
+ })();\r
+\r
+ return exports;\r
+}\r
+\r
+// uint helpers\r
+\r
+function writeUintLE(val, buf, pos) {\r
+ buf[pos ] = val & 255;\r
+ buf[pos + 1] = val >>> 8 & 255;\r
+ buf[pos + 2] = val >>> 16 & 255;\r
+ buf[pos + 3] = val >>> 24;\r
+}\r
+\r
+function writeUintBE(val, buf, pos) {\r
+ buf[pos ] = val >>> 24;\r
+ buf[pos + 1] = val >>> 16 & 255;\r
+ buf[pos + 2] = val >>> 8 & 255;\r
+ buf[pos + 3] = val & 255;\r
+}\r
+\r
+function readUintLE(buf, pos) {\r
+ return (buf[pos ]\r
+ | buf[pos + 1] << 8\r
+ | buf[pos + 2] << 16\r
+ | buf[pos + 3] << 24) >>> 0;\r
+}\r
+\r
+function readUintBE(buf, pos) {\r
+ return (buf[pos ] << 24\r
+ | buf[pos + 1] << 16\r
+ | buf[pos + 2] << 8\r
+ | buf[pos + 3]) >>> 0;\r
+}\r