aboutsummaryrefslogtreecommitdiff
path: root/node_modules/core-js/modules/$.buffer.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/core-js/modules/$.buffer.js')
-rw-r--r--node_modules/core-js/modules/$.buffer.js288
1 files changed, 288 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/$.buffer.js b/node_modules/core-js/modules/$.buffer.js
new file mode 100644
index 000000000..d1aae58a4
--- /dev/null
+++ b/node_modules/core-js/modules/$.buffer.js
@@ -0,0 +1,288 @@
+'use strict';
+var $ = require('./$')
+ , global = require('./$.global')
+ , $typed = require('./$.typed')
+ , redefineAll = require('./$.redefine-all')
+ , strictNew = require('./$.strict-new')
+ , toInteger = require('./$.to-integer')
+ , toLength = require('./$.to-length')
+ , arrayFill = require('./$.array-fill')
+ , $ArrayBuffer = global.ArrayBuffer
+ , $DataView = global.DataView
+ , Math = global.Math
+ , parseInt = global.parseInt
+ , abs = Math.abs
+ , pow = Math.pow
+ , min = Math.min
+ , floor = Math.floor
+ , log = Math.log
+ , LN2 = Math.LN2
+ , BYTE_LENGTH = 'byteLength';
+
+// pack / unpack based on
+// https://github.com/inexorabletash/polyfill/blob/v0.1.11/typedarray.js#L123-L264
+// TODO: simplify
+var signed = function(value, bits){
+ var s = 32 - bits;
+ return value << s >> s;
+};
+var unsigned = function(value, bits){
+ var s = 32 - bits;
+ return value << s >>> s;
+};
+var roundToEven = function(n){
+ var w = floor(n)
+ , f = n - w;
+ return f < .5 ? w : f > .5 ? w + 1 : w % 2 ? w + 1 : w;
+};
+var packI8 = function(n){
+ return [n & 0xff];
+};
+var unpackI8 = function(bytes){
+ return signed(bytes[0], 8);
+};
+var packU8 = function(n){
+ return [n & 0xff];
+};
+var unpackU8 = function(bytes){
+ return unsigned(bytes[0], 8);
+};
+var packI16 = function(n){
+ return [n & 0xff, n >> 8 & 0xff];
+};
+var unpackI16 = function(bytes){
+ return signed(bytes[1] << 8 | bytes[0], 16);
+};
+var packU16 = function(n){
+ return [n & 0xff, n >> 8 & 0xff];
+};
+var unpackU16 = function(bytes){
+ return unsigned(bytes[1] << 8 | bytes[0], 16);
+};
+var packI32 = function(n){
+ return [n & 0xff, n >> 8 & 0xff, n >> 16 & 0xff, n >> 24 & 0xff];
+};
+var unpackI32 = function(bytes){
+ return signed(bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0], 32);
+};
+var packU32 = function(n){
+ return [n & 0xff, n >> 8 & 0xff, n >> 16 & 0xff, n >> 24 & 0xff];
+};
+var unpackU32 = function(bytes){
+ return unsigned(bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0], 32);
+};
+var packIEEE754 = function(v, ebits, fbits) {
+ var bias = (1 << ebits - 1) - 1
+ , s, e, f, i, bits, str, bytes;
+ // Compute sign, exponent, fraction
+ if (v !== v) {
+ // NaN
+ // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
+ e = (1 << ebits) - 1;
+ f = pow(2, fbits - 1);
+ s = 0;
+ } else if(v === Infinity || v === -Infinity){
+ e = (1 << ebits) - 1;
+ f = 0;
+ s = v < 0 ? 1 : 0;
+ } else if(v === 0){
+ e = 0;
+ f = 0;
+ s = 1 / v === -Infinity ? 1 : 0;
+ } else {
+ s = v < 0;
+ v = abs(v);
+ if(v >= pow(2, 1 - bias)){
+ e = min(floor(log(v) / LN2), 1023);
+ var significand = v / pow(2, e);
+ if(significand < 1){
+ e -= 1;
+ significand *= 2;
+ }
+ if(significand >= 2){
+ e += 1;
+ significand /= 2;
+ }
+ f = roundToEven(significand * pow(2, fbits));
+ if(f / pow(2, fbits) >= 2){
+ e = e + 1;
+ f = 1;
+ }
+ if(e > bias){
+ // Overflow
+ e = (1 << ebits) - 1;
+ f = 0;
+ } else {
+ // Normalized
+ e = e + bias;
+ f = f - pow(2, fbits);
+ }
+ } else {
+ // Denormalized
+ e = 0;
+ f = roundToEven(v / pow(2, 1 - bias - fbits));
+ }
+ }
+ // Pack sign, exponent, fraction
+ bits = [];
+ for(i = fbits; i; i -= 1){
+ bits.push(f % 2 ? 1 : 0);
+ f = floor(f / 2);
+ }
+ for(i = ebits; i; i -= 1){
+ bits.push(e % 2 ? 1 : 0);
+ e = floor(e / 2);
+ }
+ bits.push(s ? 1 : 0);
+ bits.reverse();
+ str = bits.join('');
+ // Bits to bytes
+ bytes = [];
+ while(str.length){
+ bytes.unshift(parseInt(str.slice(0, 8), 2));
+ str = str.slice(8);
+ }
+ return bytes;
+};
+var unpackIEEE754 = function(bytes, ebits, fbits){
+ var bits = []
+ , i, j, b, str, bias, s, e, f;
+ for(i = 0; i < bytes.length; ++i)for(b = bytes[i], j = 8; j; --j){
+ bits.push(b % 2 ? 1 : 0);
+ b = b >> 1;
+ }
+ bits.reverse();
+ str = bits.join('');
+ // Unpack sign, exponent, fraction
+ bias = (1 << ebits - 1) - 1;
+ s = parseInt(str.slice(0, 1), 2) ? -1 : 1;
+ e = parseInt(str.slice(1, 1 + ebits), 2);
+ f = parseInt(str.slice(1 + ebits), 2);
+ // Produce number
+ if(e === (1 << ebits) - 1)return f !== 0 ? NaN : s * Infinity;
+ // Normalized
+ else if(e > 0)return s * pow(2, e - bias) * (1 + f / pow(2, fbits));
+ // Denormalized
+ else if(f !== 0)return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));
+ return s < 0 ? -0 : 0;
+};
+var unpackF64 = function(b){
+ return unpackIEEE754(b, 11, 52);
+};
+var packF64 = function(v){
+ return packIEEE754(v, 11, 52);
+};
+var unpackF32 = function(b){
+ return unpackIEEE754(b, 8, 23);
+};
+var packF32 = function(v){
+ return packIEEE754(v, 8, 23);
+};
+
+var addGetter = function(C, key, internal){
+ $.setDesc(C.prototype, key, {get: function(){ return this[internal]; }});
+};
+
+var get = function(view, bytes, index, conversion, isLittleEndian){
+ var numIndex = +index
+ , intIndex = toInteger(numIndex);
+ if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view._l)throw RangeError();
+ var store = view._b._b
+ , start = intIndex + view._o
+ , pack = store.slice(start, start + bytes);
+ isLittleEndian || pack.reverse();
+ return conversion(pack);
+};
+var set = function(view, bytes, index, conversion, value, isLittleEndian){
+ var numIndex = +index
+ , intIndex = toInteger(numIndex);
+ if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view._l)throw RangeError();
+ var store = view._b._b
+ , start = intIndex + view._o
+ , pack = conversion(+value);
+ isLittleEndian || pack.reverse();
+ for(var i = 0; i < bytes; i++)store[start + i] = pack[i];
+};
+
+if(!$typed.ABV){
+ $ArrayBuffer = function ArrayBuffer(length){
+ strictNew(this, $ArrayBuffer, 'ArrayBuffer');
+ var numberLength = +length
+ , byteLength = toLength(numberLength);
+ if(numberLength != byteLength)throw RangeError();
+ this._b = arrayFill.call(Array(byteLength), 0);
+ this._l = byteLength;
+ };
+ addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
+
+ $DataView = function DataView(buffer, byteOffset, byteLength){
+ strictNew(this, $DataView, 'DataView');
+ if(!(buffer instanceof $ArrayBuffer))throw TypeError();
+ var bufferLength = buffer._l
+ , offset = toInteger(byteOffset);
+ if(offset < 0 || offset > bufferLength)throw RangeError();
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
+ if(offset + byteLength > bufferLength)throw RangeError();
+ this._b = buffer;
+ this._o = offset;
+ this._l = byteLength;
+ };
+ addGetter($DataView, 'buffer', '_b');
+ addGetter($DataView, BYTE_LENGTH, '_l');
+ addGetter($DataView, 'byteOffset', '_o');
+ redefineAll($DataView.prototype, {
+ getInt8: function getInt8(byteOffset){
+ return get(this, 1, byteOffset, unpackI8);
+ },
+ getUint8: function getUint8(byteOffset){
+ return get(this, 1, byteOffset, unpackU8);
+ },
+ getInt16: function getInt16(byteOffset /*, littleEndian */){
+ return get(this, 2, byteOffset, unpackI16, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ getUint16: function getUint16(byteOffset /*, littleEndian */){
+ return get(this, 2, byteOffset, unpackU16, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ getInt32: function getInt32(byteOffset /*, littleEndian */){
+ return get(this, 4, byteOffset, unpackI32, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ getUint32: function getUint32(byteOffset /*, littleEndian */){
+ return get(this, 4, byteOffset, unpackU32, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ getFloat32: function getFloat32(byteOffset /*, littleEndian */){
+ return get(this, 4, byteOffset, unpackF32, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ getFloat64: function getFloat64(byteOffset /*, littleEndian */){
+ return get(this, 8, byteOffset, unpackF64, arguments.length > 1 ? arguments[1] : undefined);
+ },
+ setInt8: function setInt8(byteOffset, value){
+ return set(this, 1, byteOffset, packI8, value);
+ },
+ setUint8: function setUint8(byteOffset, value){
+ return set(this, 1, byteOffset, packU8, value);
+ },
+ setInt16: function setInt16(byteOffset, value /*, littleEndian */){
+ return set(this, 2, byteOffset, packI16, value, arguments.length > 2 ? arguments[2] : undefined);
+ },
+ setUint16: function setUint16(byteOffset, value /*, littleEndian */){
+ return set(this, 2, byteOffset, packU16, value, arguments.length > 2 ? arguments[2] : undefined);
+ },
+ setInt32: function setInt32(byteOffset, value /*, littleEndian */){
+ return set(this, 4, byteOffset, packI32, value, arguments.length > 2 ? arguments[2] : undefined);
+ },
+ setUint32: function setUint32(byteOffset, value /*, littleEndian */){
+ return set(this, 4, byteOffset, packU32, value, arguments.length > 2 ? arguments[2] : undefined);
+ },
+ setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){
+ return set(this, 4, byteOffset, packF32, value, arguments.length > 2 ? arguments[2] : undefined);
+ },
+ setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){
+ return set(this, 8, byteOffset, packF64, value, arguments.length > 2 ? arguments[2] : undefined);
+ }
+ });
+}
+require('./$.hide')($DataView.prototype, $typed.VIEW, true);
+module.exports = {
+ ArrayBuffer: $ArrayBuffer,
+ DataView: $DataView
+}; \ No newline at end of file