Back

Version 8

5/16/2024
type FrequentieTable = Record<string, number>;
type IntermediaryNode = [string, number, Node[]];
type LeafNode = [string, number];
type Node = IntermediaryNode | LeafNode;
type HuffmanTree = [IntermediaryNode];
type Encoding = number[];
type EncodedData = number[];
type EncodingTable = Record<string, Encoding>;

export class BinaryReader {
protected chunk: number;
protected pos: number;
protected bitPos: number;
protected bitCount: number;

view: DataView;

constructor(arrayBuffer: ArrayBuffer) {
this.view = new DataView(arrayBuffer);
this.pos = 0;
this.bitPos = -1;
this.chunk = 0;
this.bitCount = 0;
}

protected getData(type = "Uint8") {
if (this.view.byteLength > this.pos) {
this.bitPos = -1;

// @ts-ignore
return this.view[`get${type}`](this.pos++);
}

throw new RangeError();
}

Updated: May 16, 2024