UNPKG

modern-netcdf

Version:
77 lines (72 loc) 2.09 kB
const { str2num, num2bytes, readType } = require('./types'); const { types } = require('./types'); function nonRecord(buffer, variable) { const type = str2num(variable.type); const size = variable.size / num2bytes(type); let data; switch (type) { case types.BYTE: data = new Uint8Array(size); break; case types.SHORT: data = new Int16Array(size); break; case types.INT: data = new Int32Array(size); break; case types.FLOAT: data = new Float32Array(size); break; case types.DOUBLE: data = new Float64Array(size); break; default: throw new Error(`Unsupported type for TypedArray: ${variable.type}`); } for (let i = 0; i < size; i++) { data[i] = readType(buffer, type, 1); } return data; } function record(buffer, variable, recordDimension) { const type = str2num(variable.type); const width = variable.size ? variable.size / num2bytes(type) : 1; const recordCount = recordDimension.length; const totalElements = recordCount * width; let data; switch (type) { case types.BYTE: data = new Uint8Array(totalElements); break; case types.SHORT: data = new Int16Array(totalElements); break; case types.INT: data = new Int32Array(totalElements); break; case types.FLOAT: data = new Float32Array(totalElements); break; case types.DOUBLE: data = new Float64Array(totalElements); break; default: throw new Error(`Unsupported type for TypedArray: ${variable.type}`); } const step = recordDimension.recordStep; if (step === undefined) throw new Error('recordDimension.recordStep is undefined'); for (let r = 0; r < recordCount; r++) { const currentOffset = buffer.offset; const values = readType(buffer, type, width); if (width === 1) { data[r] = values; } else { for (let j = 0; j < width; j++) { data[r * width + j] = values[j]; } } buffer.seek(currentOffset + step); } return data; } module.exports = { nonRecord, record };