@gmod/cram
Version:
read CRAM files with pure Javascript
30 lines • 1.12 kB
JavaScript
import CramCodec from "./_base.js";
import { getBits } from "./getBits.js";
import { CramUnimplementedError } from "../../errors.js";
export default class SubexpCodec extends CramCodec {
constructor(parameters, dataType) {
super(parameters, dataType);
if (this.dataType !== 'int') {
throw new CramUnimplementedError(`${this.dataType} decoding not yet implemented by SUBEXP codec`);
}
}
decode(_slice, coreDataBlock, _blocksByContentId, cursors) {
let numLeadingOnes = 0;
while (getBits(coreDataBlock.content, cursors.coreBlock, 1)) {
numLeadingOnes = numLeadingOnes + 1;
}
let b;
let n;
if (numLeadingOnes === 0) {
b = this.parameters.K;
n = getBits(coreDataBlock.content, cursors.coreBlock, b);
}
else {
b = numLeadingOnes + this.parameters.K - 1;
const bits = getBits(coreDataBlock.content, cursors.coreBlock, b);
n = (1 << b) | bits;
}
return n - this.parameters.offset;
}
}
//# sourceMappingURL=subexp.js.map