class QRBitBuffer { buffer: number[]; length: number; constructor () { this.buffer = []; this.length = 0; } get (index: number): boolean { const bufIndex = Math.floor(index / 8); return ((this.buffer[bufIndex]! >>> (7 - index % 8)) & 1) === 1; } put (num: number, length: number): void { for (let i = 0; i < length; i++) { this.putBit(((num >>> (length - i - 1)) & 1) === 1); } } getLengthInBits (): number { return this.length; } putBit (bit: boolean): void { const bufIndex = Math.floor(this.length / 8); if (this.buffer.length <= bufIndex) { this.buffer.push(0); } if (bit) { this.buffer[bufIndex]! |= (0x80 >>> (this.length % 8)); } this.length++; } } export default QRBitBuffer;