Path: blob/master/node_modules/@protobufjs/float/index.js
1126 views
"use strict";12module.exports = factory(factory);34/**5* Reads / writes floats / doubles from / to buffers.6* @name util.float7* @namespace8*/910/**11* Writes a 32 bit float to a buffer using little endian byte order.12* @name util.float.writeFloatLE13* @function14* @param {number} val Value to write15* @param {Uint8Array} buf Target buffer16* @param {number} pos Target buffer offset17* @returns {undefined}18*/1920/**21* Writes a 32 bit float to a buffer using big endian byte order.22* @name util.float.writeFloatBE23* @function24* @param {number} val Value to write25* @param {Uint8Array} buf Target buffer26* @param {number} pos Target buffer offset27* @returns {undefined}28*/2930/**31* Reads a 32 bit float from a buffer using little endian byte order.32* @name util.float.readFloatLE33* @function34* @param {Uint8Array} buf Source buffer35* @param {number} pos Source buffer offset36* @returns {number} Value read37*/3839/**40* Reads a 32 bit float from a buffer using big endian byte order.41* @name util.float.readFloatBE42* @function43* @param {Uint8Array} buf Source buffer44* @param {number} pos Source buffer offset45* @returns {number} Value read46*/4748/**49* Writes a 64 bit double to a buffer using little endian byte order.50* @name util.float.writeDoubleLE51* @function52* @param {number} val Value to write53* @param {Uint8Array} buf Target buffer54* @param {number} pos Target buffer offset55* @returns {undefined}56*/5758/**59* Writes a 64 bit double to a buffer using big endian byte order.60* @name util.float.writeDoubleBE61* @function62* @param {number} val Value to write63* @param {Uint8Array} buf Target buffer64* @param {number} pos Target buffer offset65* @returns {undefined}66*/6768/**69* Reads a 64 bit double from a buffer using little endian byte order.70* @name util.float.readDoubleLE71* @function72* @param {Uint8Array} buf Source buffer73* @param {number} pos Source buffer offset74* @returns {number} Value read75*/7677/**78* Reads a 64 bit double from a buffer using big endian byte order.79* @name util.float.readDoubleBE80* @function81* @param {Uint8Array} buf Source buffer82* @param {number} pos Source buffer offset83* @returns {number} Value read84*/8586// Factory function for the purpose of node-based testing in modified global environments87function factory(exports) {8889// float: typed array90if (typeof Float32Array !== "undefined") (function() {9192var f32 = new Float32Array([ -0 ]),93f8b = new Uint8Array(f32.buffer),94le = f8b[3] === 128;9596function writeFloat_f32_cpy(val, buf, pos) {97f32[0] = val;98buf[pos ] = f8b[0];99buf[pos + 1] = f8b[1];100buf[pos + 2] = f8b[2];101buf[pos + 3] = f8b[3];102}103104function writeFloat_f32_rev(val, buf, pos) {105f32[0] = val;106buf[pos ] = f8b[3];107buf[pos + 1] = f8b[2];108buf[pos + 2] = f8b[1];109buf[pos + 3] = f8b[0];110}111112/* istanbul ignore next */113exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;114/* istanbul ignore next */115exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;116117function readFloat_f32_cpy(buf, pos) {118f8b[0] = buf[pos ];119f8b[1] = buf[pos + 1];120f8b[2] = buf[pos + 2];121f8b[3] = buf[pos + 3];122return f32[0];123}124125function readFloat_f32_rev(buf, pos) {126f8b[3] = buf[pos ];127f8b[2] = buf[pos + 1];128f8b[1] = buf[pos + 2];129f8b[0] = buf[pos + 3];130return f32[0];131}132133/* istanbul ignore next */134exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;135/* istanbul ignore next */136exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;137138// float: ieee754139})(); else (function() {140141function writeFloat_ieee754(writeUint, val, buf, pos) {142var sign = val < 0 ? 1 : 0;143if (sign)144val = -val;145if (val === 0)146writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);147else if (isNaN(val))148writeUint(2143289344, buf, pos);149else if (val > 3.4028234663852886e+38) // +-Infinity150writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);151else if (val < 1.1754943508222875e-38) // denormal152writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);153else {154var exponent = Math.floor(Math.log(val) / Math.LN2),155mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;156writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);157}158}159160exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);161exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);162163function readFloat_ieee754(readUint, buf, pos) {164var uint = readUint(buf, pos),165sign = (uint >> 31) * 2 + 1,166exponent = uint >>> 23 & 255,167mantissa = uint & 8388607;168return exponent === 255169? mantissa170? NaN171: sign * Infinity172: exponent === 0 // denormal173? sign * 1.401298464324817e-45 * mantissa174: sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);175}176177exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);178exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);179180})();181182// double: typed array183if (typeof Float64Array !== "undefined") (function() {184185var f64 = new Float64Array([-0]),186f8b = new Uint8Array(f64.buffer),187le = f8b[7] === 128;188189function writeDouble_f64_cpy(val, buf, pos) {190f64[0] = val;191buf[pos ] = f8b[0];192buf[pos + 1] = f8b[1];193buf[pos + 2] = f8b[2];194buf[pos + 3] = f8b[3];195buf[pos + 4] = f8b[4];196buf[pos + 5] = f8b[5];197buf[pos + 6] = f8b[6];198buf[pos + 7] = f8b[7];199}200201function writeDouble_f64_rev(val, buf, pos) {202f64[0] = val;203buf[pos ] = f8b[7];204buf[pos + 1] = f8b[6];205buf[pos + 2] = f8b[5];206buf[pos + 3] = f8b[4];207buf[pos + 4] = f8b[3];208buf[pos + 5] = f8b[2];209buf[pos + 6] = f8b[1];210buf[pos + 7] = f8b[0];211}212213/* istanbul ignore next */214exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;215/* istanbul ignore next */216exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;217218function readDouble_f64_cpy(buf, pos) {219f8b[0] = buf[pos ];220f8b[1] = buf[pos + 1];221f8b[2] = buf[pos + 2];222f8b[3] = buf[pos + 3];223f8b[4] = buf[pos + 4];224f8b[5] = buf[pos + 5];225f8b[6] = buf[pos + 6];226f8b[7] = buf[pos + 7];227return f64[0];228}229230function readDouble_f64_rev(buf, pos) {231f8b[7] = buf[pos ];232f8b[6] = buf[pos + 1];233f8b[5] = buf[pos + 2];234f8b[4] = buf[pos + 3];235f8b[3] = buf[pos + 4];236f8b[2] = buf[pos + 5];237f8b[1] = buf[pos + 6];238f8b[0] = buf[pos + 7];239return f64[0];240}241242/* istanbul ignore next */243exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;244/* istanbul ignore next */245exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;246247// double: ieee754248})(); else (function() {249250function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {251var sign = val < 0 ? 1 : 0;252if (sign)253val = -val;254if (val === 0) {255writeUint(0, buf, pos + off0);256writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);257} else if (isNaN(val)) {258writeUint(0, buf, pos + off0);259writeUint(2146959360, buf, pos + off1);260} else if (val > 1.7976931348623157e+308) { // +-Infinity261writeUint(0, buf, pos + off0);262writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);263} else {264var mantissa;265if (val < 2.2250738585072014e-308) { // denormal266mantissa = val / 5e-324;267writeUint(mantissa >>> 0, buf, pos + off0);268writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);269} else {270var exponent = Math.floor(Math.log(val) / Math.LN2);271if (exponent === 1024)272exponent = 1023;273mantissa = val * Math.pow(2, -exponent);274writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);275writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);276}277}278}279280exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);281exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);282283function readDouble_ieee754(readUint, off0, off1, buf, pos) {284var lo = readUint(buf, pos + off0),285hi = readUint(buf, pos + off1);286var sign = (hi >> 31) * 2 + 1,287exponent = hi >>> 20 & 2047,288mantissa = 4294967296 * (hi & 1048575) + lo;289return exponent === 2047290? mantissa291? NaN292: sign * Infinity293: exponent === 0 // denormal294? sign * 5e-324 * mantissa295: sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);296}297298exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);299exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);300301})();302303return exports;304}305306// uint helpers307308function writeUintLE(val, buf, pos) {309buf[pos ] = val & 255;310buf[pos + 1] = val >>> 8 & 255;311buf[pos + 2] = val >>> 16 & 255;312buf[pos + 3] = val >>> 24;313}314315function writeUintBE(val, buf, pos) {316buf[pos ] = val >>> 24;317buf[pos + 1] = val >>> 16 & 255;318buf[pos + 2] = val >>> 8 & 255;319buf[pos + 3] = val & 255;320}321322function readUintLE(buf, pos) {323return (buf[pos ]324| buf[pos + 1] << 8325| buf[pos + 2] << 16326| buf[pos + 3] << 24) >>> 0;327}328329function readUintBE(buf, pos) {330return (buf[pos ] << 24331| buf[pos + 1] << 16332| buf[pos + 2] << 8333| buf[pos + 3]) >>> 0;334}335336337