UNPKG

modern-netcdf

Version:
108 lines (101 loc) 2.33 kB
const types = { BYTE: 1, CHAR: 2, SHORT: 3, INT: 4, FLOAT: 5, DOUBLE: 6, }; function num2str(type) { switch (Number(type)) { case types.BYTE: return 'byte'; case types.CHAR: return 'char'; case types.SHORT: return 'short'; case types.INT: return 'int'; case types.FLOAT: return 'float'; case types.DOUBLE: return 'double'; default: return 'undefined'; } } function str2num(type) { switch (String(type)) { case 'byte': return types.BYTE; case 'char': return types.CHAR; case 'short': return types.SHORT; case 'int': return types.INT; case 'float': return types.FLOAT; case 'double': return types.DOUBLE; default: return -1; } } function num2bytes(type) { switch (Number(type)) { case types.BYTE: case types.CHAR: return 1; case types.SHORT: return 2; case types.INT: case types.FLOAT: return 4; case types.DOUBLE: return 8; default: return -1; } } function readNumber(size, bufferReader) { if (size !== 1) { const numbers = new Array(size); for (let i = 0; i < size; i++) { numbers[i] = bufferReader(); } return numbers; } return bufferReader(); } function readType(buffer, type, size) { switch (type) { case types.BYTE: return size === 1 ? buffer.readByte() : Array.from(buffer.readBytes(size)); case types.CHAR: return trimNull(buffer.readChars(size)); case types.SHORT: return size === 1 ? buffer.readInt16() : readNumber(size, buffer.readInt16.bind(buffer)); case types.INT: return size === 1 ? buffer.readInt32() : readNumber(size, buffer.readInt32.bind(buffer)); case types.FLOAT: return size === 1 ? buffer.readFloat32() : readNumber(size, buffer.readFloat32.bind(buffer)); case types.DOUBLE: return size === 1 ? buffer.readFloat64() : readNumber(size, buffer.readFloat64.bind(buffer)); default: throw new Error(`Non valid type ${type}`); } } function trimNull(value) { if (typeof value === 'string' && value.charCodeAt(value.length - 1) === 0) { return value.substring(0, value.length - 1); } return value; } module.exports = { types, num2str, str2num, num2bytes, readType, };