12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 'use strict';
- var GetIntrinsic = require('get-intrinsic');
- var $TypeError = GetIntrinsic('%TypeError%');
- var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
- var callBound = require('call-bind/callBound');
- var $charAt = callBound('String.prototype.charAt');
- var $reverse = callBound('Array.prototype.reverse');
- var $slice = callBound('Array.prototype.slice');
- var bytesAsFloat32 = require('../helpers/bytesAsFloat32');
- var bytesAsFloat64 = require('../helpers/bytesAsFloat64');
- var bytesAsInteger = require('../helpers/bytesAsInteger');
- var defaultEndianness = require('../helpers/defaultEndianness');
- var isInteger = require('../helpers/isInteger');
- var IsDetachedBuffer = require('./IsDetachedBuffer');
- var isArrayBuffer = require('is-array-buffer');
- var safeConcat = require('safe-array-concat');
- var table49 = {
- __proto__: null,
- $Int8: 1,
- $Uint8: 1,
- $Uint8C: 1,
- $Int16: 2,
- $Uint16: 2,
- $Int32: 4,
- $Uint32: 4,
- $Float32: 4,
- $Float64: 8
- };
- var isUnsignedElementType = function isUnsignedElementType(type) { return $charAt(type, 0) === 'U'; };
- module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type) {
- if (!isArrayBuffer(arrayBuffer)) {
- throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer');
- }
- if (!isInteger(byteIndex)) {
- throw new $TypeError('Assertion failed: `byteIndex` must be an integer');
- }
- if (typeof type !== 'string') {
- throw new $TypeError('Assertion failed: `type` must be a string');
- }
- if (arguments.length > 3 && typeof arguments[3] !== 'boolean') {
- throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
- }
- if (IsDetachedBuffer(arrayBuffer)) {
- throw new $TypeError('Assertion failed: ArrayBuffer is detached');
- }
-
- if (byteIndex < 0) {
- throw new $TypeError('Assertion failed: `byteIndex` must be non-negative');
- }
-
- var elementSize = table49['$' + type];
- if (!elementSize) {
- throw new $TypeError('Assertion failed: `type` must be one of "Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"');
- }
-
- var rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize);
-
- var isLittleEndian = arguments.length > 3 ? arguments[3] : defaultEndianness === 'little';
- if (!isLittleEndian) {
- $reverse(rawValue);
- }
- var bytes = $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize);
- if (type === 'Float32') {
- return bytesAsFloat32(bytes, true);
- }
- if (type === 'Float64') {
- return bytesAsFloat64(bytes, true);
- }
- return bytesAsInteger(bytes, elementSize, isUnsignedElementType(type), false);
- };
|