|
'use strict'; |
|
|
|
var GetIntrinsic = require('get-intrinsic'); |
|
|
|
var $TypeError = GetIntrinsic('%TypeError%'); |
|
|
|
var hasOwnProperty = require('./HasOwnProperty'); |
|
var ToInt16 = require('./ToInt16'); |
|
var ToInt32 = require('./ToInt32'); |
|
var ToInt8 = require('./ToInt8'); |
|
var ToUint16 = require('./ToUint16'); |
|
var ToUint32 = require('./ToUint32'); |
|
var ToUint8 = require('./ToUint8'); |
|
var ToUint8Clamp = require('./ToUint8Clamp'); |
|
var Type = require('./Type'); |
|
|
|
var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); |
|
var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); |
|
var integerToNBytes = require('../helpers/integerToNBytes'); |
|
|
|
var keys = require('object-keys'); |
|
|
|
|
|
var TypeToSizes = { |
|
__proto__: null, |
|
Int8: 1, |
|
Uint8: 1, |
|
Uint8C: 1, |
|
Int16: 2, |
|
Uint16: 2, |
|
Int32: 4, |
|
Uint32: 4, |
|
Float32: 4, |
|
Float64: 8 |
|
}; |
|
|
|
var TypeToAO = { |
|
__proto__: null, |
|
Int8: ToInt8, |
|
Uint8: ToUint8, |
|
Uint8C: ToUint8Clamp, |
|
Int16: ToInt16, |
|
Uint16: ToUint16, |
|
Int32: ToInt32, |
|
Uint32: ToUint32 |
|
}; |
|
|
|
|
|
|
|
module.exports = function NumberToRawBytes(type, value, isLittleEndian) { |
|
if (typeof type !== 'string' || !hasOwnProperty(TypeToSizes, type)) { |
|
throw new $TypeError('Assertion failed: `type` must be a TypedArray element type: ' + keys(TypeToSizes)); |
|
} |
|
if (Type(value) !== 'Number') { |
|
throw new $TypeError('Assertion failed: `value` must be a Number'); |
|
} |
|
if (Type(isLittleEndian) !== 'Boolean') { |
|
throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); |
|
} |
|
|
|
if (type === 'Float32') { |
|
return valueToFloat32Bytes(value, isLittleEndian); |
|
} else if (type === 'Float64') { |
|
return valueToFloat64Bytes(value, isLittleEndian); |
|
} |
|
|
|
var n = TypeToSizes[type]; |
|
|
|
var convOp = TypeToAO[type]; |
|
|
|
var intValue = convOp(value); |
|
|
|
return integerToNBytes(intValue, n, isLittleEndian); |
|
}; |
|
|