@gmod/cram
Version:
read CRAM files with pure Javascript
29 lines • 1.32 kB
JavaScript
import CramCodec from "./_base.js";
import { CramBufferOverrunError, CramMalformedError } from "../../errors.js";
export default class ByteArrayStopCodec extends CramCodec {
decode(_slice, _coreDataBlock, blocksByContentId, cursors) {
const { blockContentId } = this.parameters;
const contentBlock = blocksByContentId[blockContentId];
if (!contentBlock) {
throw new CramMalformedError(`no block found with content ID ${blockContentId}`);
}
const cursor = cursors.externalBlocks.getCursor(blockContentId);
return this._decodeByteArray(contentBlock, cursor);
}
_decodeByteArray(contentBlock, cursor) {
const dataBuffer = contentBlock.content;
const { stopByte } = this.parameters;
const startPosition = cursor.bytePosition;
const len = dataBuffer.length;
let stopPosition = startPosition;
while (stopPosition < len && dataBuffer[stopPosition] !== stopByte) {
stopPosition++;
}
if (stopPosition >= len) {
throw new CramBufferOverrunError('byteArrayStop reading beyond length of data buffer?');
}
cursor.bytePosition = stopPosition + 1;
return dataBuffer.subarray(startPosition, stopPosition);
}
}
//# sourceMappingURL=byteArrayStop.js.map