diff --git a/src/datatypes/numeric.js b/src/datatypes/numeric.js index 1cf50d5..045cb64 100644 --- a/src/datatypes/numeric.js +++ b/src/datatypes/numeric.js @@ -1,113 +1,3 @@ -module.exports = { - 'byte': [readByte, writeByte, 1], - 'ubyte': [readUByte, writeUByte, 1], - 'short': [readShort, writeShort, 2], - 'ushort': [readUShort, writeUShort, 2], - 'int': [readInt, writeInt, 4], - 'long': [readLong, writeLong, 8], - 'float': [readFloat, writeFloat, 4], - 'double': [readDouble, writeDouble, 8] -}; - -function readByte(buffer, offset) { - if(offset + 1 > buffer.length) return null; - var value = buffer.readInt8(offset); - return { - value: value, - size: 1, - }; -} - -function writeByte(value, buffer, offset) { - buffer.writeInt8(value, offset); - return offset + 1; -} - -function readUByte(buffer, offset) { - if(offset + 1 > buffer.length) return null; - var value = buffer.readUInt8(offset); - return { - value: value, - size: 1, - }; -} - -function writeUByte(value, buffer, offset) { - buffer.writeUInt8(value, offset); - return offset + 1; -} - -function readFloat(buffer, offset) { - if(offset + 4 > buffer.length) return null; - var value = buffer.readFloatBE(offset); - return { - value: value, - size: 4, - }; -} - -function writeFloat(value, buffer, offset) { - buffer.writeFloatBE(value, offset); - return offset + 4; -} - -function readDouble(buffer, offset) { - if(offset + 8 > buffer.length) return null; - var value = buffer.readDoubleBE(offset); - return { - value: value, - size: 8, - }; -} - -function writeDouble(value, buffer, offset) { - buffer.writeDoubleBE(value, offset); - return offset + 8; -} - - -function readShort(buffer, offset) { - if(offset + 2 > buffer.length) return null; - var value = buffer.readInt16BE(offset); - return { - value: value, - size: 2, - }; -} -function writeShort(value, buffer, offset) { - buffer.writeInt16BE(value, offset); - return offset + 2; -} - -function readUShort(buffer, offset) { - if(offset + 2 > buffer.length) return null; - var value = buffer.readUInt16BE(offset); - return { - value: value, - size: 2, - }; -} - -function writeUShort(value, buffer, offset) { - buffer.writeUInt16BE(value, offset); - return offset + 2; -} - -function readInt(buffer, offset) { - if(offset + 4 > buffer.length) return null; - var value = buffer.readInt32BE(offset); - return { - value: value, - size: 4, - }; -} - -function writeInt(value, buffer, offset) { - buffer.writeInt32BE(value, offset); - return offset + 4; -} - - function readLong(buffer, offset) { if(offset + 8 > buffer.length) return null; return { @@ -122,6 +12,39 @@ function writeLong(value, buffer, offset) { return offset + 8; } +function generateFunctions(bufferReader,bufferWriter,size) +{ + var reader=function(buffer, offset) + { + if(offset + size > buffer.length) return null; + var value = buffer[bufferReader](offset); + return { + value: value, + size: size + }; + }; + var writer=function(value, buffer, offset) { + buffer[bufferWriter](value, offset); + return offset + size; + }; + return [reader, writer, size]; +} + +var nums= { + 'byte': ["readInt8", "writeInt8", 1], + 'ubyte': ["readUInt8", "writeUInt8", 1], + 'short': ["readInt16BE", "writeInt16BE", 2], + 'ushort': ["readUInt16BE", "writeUInt16BE", 2], + 'int': ["readInt32BE", "writeInt32BE", 4], + 'float': ["readFloatBE", "writeFloatBE", 4], + 'double': ["readDoubleBE", "writeDoubleBE", 8] +}; + +var types=Object.keys(nums).reduce(function(types,num){ + types[num]=generateFunctions(nums[num][0], nums[num][1], nums[num][2]); + return types; +},{}); +types["long"]=[readLong, writeLong, 8]; - +module.exports = types;