parseField = {
function parseField(buffer, ptr) {
const dataView = new DataView(buffer);
const format = parseFormat(dataView, ptr);
const namePtr = dataView.getUint32(ptr + 4, true);
const name = parseNullTerminatedString(dataView, namePtr);
const flags = dataView.getBigInt64(ptr + 16, true);
const nullable = Boolean(flags & 0x00000001n);
return arrow.Field.new(name, format, nullable);
}
function parseFormat(dataView, ptr) {
const formatPtr = dataView.getUint32(ptr, true);
const format = parseNullTerminatedString(dataView, formatPtr);
const formatMapping = {
S: new arrow.Uint16(),
f: new arrow.Float32()
};
return formatMapping[format];
}
function parseNullTerminatedString(dataView, ptr) {
let end = ptr;
while (end < dataView.byteLength && dataView.getUint8(end) !== 0) {
end += 1;
}
return new TextDecoder("utf-8").decode(
new Uint8Array(dataView.buffer, ptr, end - ptr)
);
}
return parseField;
}