@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
1 lines • 9.15 kB
Source Map (JSON)
{"version":3,"sources":["../../../../../src/classes/ribbon/codecs/utils/bits.ts"],"sourcesContent":["const MAX_BITS = Number.MAX_SAFE_INTEGER.toString(2).length;\n\nexport class Bits {\n public buffer: Buffer;\n private _length: number;\n private _offset: number;\n\n constructor(t: number | Buffer) {\n if (typeof t === \"number\") {\n this.buffer = Buffer.alloc(Math.ceil(t / 8));\n } else if (t instanceof Buffer) {\n this.buffer = t;\n } else {\n throw new TypeError(\n \"Initialize by specifying a bit-length or referencing a Buffer\"\n );\n }\n this._length = this.buffer.length * 8;\n this._offset = 0;\n }\n\n static alloc(t: number, r?: number, n?: number): Bits {\n return new Bits(Buffer.alloc(t, r ?? 0, n as BufferEncoding | undefined));\n }\n\n static from(t: any, r?: number, n?: number): Bits {\n return new Bits(Buffer.from(t, r, n));\n }\n\n get eof(): boolean {\n return this._offset === this._length;\n }\n\n get length(): number {\n return this._length;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n set offset(t: number) {\n if (t < 0) {\n throw new RangeError(\"Cannot set offset below 0\");\n }\n if (t > this._length) {\n throw new RangeError(\n `Cannot set offset to ${t}, buffer length is ${this._length}`\n );\n }\n this._offset = Math.floor(t);\n }\n\n get remaining(): number {\n return this._length - this._offset;\n }\n\n clear(t: number = 0): this {\n this.buffer.fill(t);\n this._offset = 0;\n return this;\n }\n\n clearBit(t: number): this {\n this.insert(0, 1, t);\n return this;\n }\n\n flipBit(t: number): number {\n const result = this.peek(1, t) ^ 1;\n this.modifyBit(result, t);\n return result;\n }\n\n getBit(t: number): number {\n return this.peek(1, t);\n }\n\n insert(val: number, bits: number = 1, pos?: number): number {\n let r = typeof pos === \"number\" ? pos | 0 : this._offset;\n if (r + bits > this._length) {\n throw new RangeError(\n `Cannot write ${bits} bits, only ${this.remaining} bit(s) left`\n );\n }\n if (bits > MAX_BITS) {\n throw new RangeError(`Cannot write ${bits} bits, max is ${MAX_BITS}`);\n }\n let i = bits;\n while (i > 0) {\n const byteIndex = r >> 3;\n const bitIndex = r & 7;\n const o = Math.min(8 - bitIndex, i);\n const mask = (1 << o) - 1;\n const shift = 8 - o - bitIndex;\n const u = ((val >>> (i - o)) & mask) << shift;\n this.buffer[byteIndex] = (this.buffer[byteIndex] & ~(mask << shift)) | u;\n r += o;\n i -= o;\n }\n return r;\n }\n\n modifyBit(val: number, pos: number): number {\n this.insert(val, 1, pos);\n return val;\n }\n\n peek(bits: number = 1, pos?: number): number {\n let e = typeof pos === \"number\" ? pos | 0 : this._offset;\n if (e + bits > this._length) {\n throw new RangeError(\n `Cannot read ${bits} bits, only ${this.remaining} bit(s) left`\n );\n }\n if (bits > MAX_BITS) {\n throw new RangeError(\n `Reading ${bits} bits would overflow result, max is ${MAX_BITS}`\n );\n }\n const bitOffset = e & 7;\n const i = Math.min(8 - bitOffset, bits);\n const mask = (1 << i) - 1;\n let s = (this.buffer[e >> 3] >> (8 - i - bitOffset)) & mask;\n e += i;\n let remainingBits = bits - i;\n while (remainingBits >= 8) {\n s <<= 8;\n s |= this.buffer[e >> 3];\n e += 8;\n remainingBits -= 8;\n }\n if (remainingBits > 0) {\n const shift = 8 - remainingBits;\n s <<= remainingBits;\n s |= (this.buffer[e >> 3] >> shift) & (255 >> shift);\n }\n return s;\n }\n\n read(bits: number = 1): number {\n const val = this.peek(bits, this._offset);\n this._offset += bits;\n return val;\n }\n\n seek(t: number, mode: number = 1): this {\n switch (mode) {\n case 2:\n this.offset = this._offset + t;\n break;\n case 3:\n this.offset = this.length - t;\n break;\n default:\n this.offset = t;\n }\n return this;\n }\n\n setBit(t: number): this {\n this.insert(1, 1, t);\n return this;\n }\n\n skip(t: number): this {\n return this.seek(t, 2);\n }\n\n testBit(t: number): boolean {\n return !!this.peek(1, t);\n }\n\n toString(encoding: BufferEncoding = \"utf8\"): string {\n return this.buffer.toString(encoding);\n }\n\n write(val: number, bits: number = 1): this {\n this._offset = this.insert(val, bits, this._offset);\n return this;\n }\n}\n"],"names":["MAX_BITS","Number","MAX_SAFE_INTEGER","toString","length","Bits","buffer","_length","_offset","t","Buffer","alloc","Math","ceil","TypeError","r","n","from","eof","offset","RangeError","floor","remaining","clear","fill","clearBit","insert","flipBit","result","peek","modifyBit","getBit","val","bits","pos","i","byteIndex","bitIndex","o","min","mask","shift","u","e","bitOffset","s","remainingBits","read","seek","mode","setBit","skip","testBit","encoding","write"],"mappings":"AAAA,MAAMA,WAAWC,OAAOC,gBAAgB,CAACC,QAAQ,CAAC,GAAGC,MAAM;AAE3D,OAAO,MAAMC;IACJC,OAAe;IACdC,QAAgB;IAChBC,QAAgB;IAExB,YAAYC,CAAkB,CAAE;QAC9B,IAAI,OAAOA,MAAM,UAAU;YACzB,IAAI,CAACH,MAAM,GAAGI,OAAOC,KAAK,CAACC,KAAKC,IAAI,CAACJ,IAAI;QAC3C,OAAO,IAAIA,aAAaC,QAAQ;YAC9B,IAAI,CAACJ,MAAM,GAAGG;QAChB,OAAO;YACL,MAAM,IAAIK,UACR;QAEJ;QACA,IAAI,CAACP,OAAO,GAAG,IAAI,CAACD,MAAM,CAACF,MAAM,GAAG;QACpC,IAAI,CAACI,OAAO,GAAG;IACjB;IAEA,OAAOG,MAAMF,CAAS,EAAEM,CAAU,EAAEC,CAAU,EAAQ;QACpD,OAAO,IAAIX,KAAKK,OAAOC,KAAK,CAACF,GAAGM,KAAK,GAAGC;IAC1C;IAEA,OAAOC,KAAKR,CAAM,EAAEM,CAAU,EAAEC,CAAU,EAAQ;QAChD,OAAO,IAAIX,KAAKK,OAAOO,IAAI,CAACR,GAAGM,GAAGC;IACpC;IAEA,IAAIE,MAAe;QACjB,OAAO,IAAI,CAACV,OAAO,KAAK,IAAI,CAACD,OAAO;IACtC;IAEA,IAAIH,SAAiB;QACnB,OAAO,IAAI,CAACG,OAAO;IACrB;IAEA,IAAIY,SAAiB;QACnB,OAAO,IAAI,CAACX,OAAO;IACrB;IAEA,IAAIW,OAAOV,CAAS,EAAE;QACpB,IAAIA,IAAI,GAAG;YACT,MAAM,IAAIW,WAAW;QACvB;QACA,IAAIX,IAAI,IAAI,CAACF,OAAO,EAAE;YACpB,MAAM,IAAIa,WACR,CAAC,qBAAqB,EAAEX,EAAE,mBAAmB,EAAE,IAAI,CAACF,OAAO,EAAE;QAEjE;QACA,IAAI,CAACC,OAAO,GAAGI,KAAKS,KAAK,CAACZ;IAC5B;IAEA,IAAIa,YAAoB;QACtB,OAAO,IAAI,CAACf,OAAO,GAAG,IAAI,CAACC,OAAO;IACpC;IAEAe,MAAMd,IAAY,CAAC,EAAQ;QACzB,IAAI,CAACH,MAAM,CAACkB,IAAI,CAACf;QACjB,IAAI,CAACD,OAAO,GAAG;QACf,OAAO,IAAI;IACb;IAEAiB,SAAShB,CAAS,EAAQ;QACxB,IAAI,CAACiB,MAAM,CAAC,GAAG,GAAGjB;QAClB,OAAO,IAAI;IACb;IAEAkB,QAAQlB,CAAS,EAAU;QACzB,MAAMmB,SAAS,IAAI,CAACC,IAAI,CAAC,GAAGpB,KAAK;QACjC,IAAI,CAACqB,SAAS,CAACF,QAAQnB;QACvB,OAAOmB;IACT;IAEAG,OAAOtB,CAAS,EAAU;QACxB,OAAO,IAAI,CAACoB,IAAI,CAAC,GAAGpB;IACtB;IAEAiB,OAAOM,GAAW,EAAEC,OAAe,CAAC,EAAEC,GAAY,EAAU;QAC1D,IAAInB,IAAI,OAAOmB,QAAQ,WAAWA,MAAM,IAAI,IAAI,CAAC1B,OAAO;QACxD,IAAIO,IAAIkB,OAAO,IAAI,CAAC1B,OAAO,EAAE;YAC3B,MAAM,IAAIa,WACR,CAAC,aAAa,EAAEa,KAAK,YAAY,EAAE,IAAI,CAACX,SAAS,CAAC,YAAY,CAAC;QAEnE;QACA,IAAIW,OAAOjC,UAAU;YACnB,MAAM,IAAIoB,WAAW,CAAC,aAAa,EAAEa,KAAK,cAAc,EAAEjC,UAAU;QACtE;QACA,IAAImC,IAAIF;QACR,MAAOE,IAAI,EAAG;YACZ,MAAMC,YAAYrB,KAAK;YACvB,MAAMsB,WAAWtB,IAAI;YACrB,MAAMuB,IAAI1B,KAAK2B,GAAG,CAAC,IAAIF,UAAUF;YACjC,MAAMK,OAAO,AAAC,CAAA,KAAKF,CAAAA,IAAK;YACxB,MAAMG,QAAQ,IAAIH,IAAID;YACtB,MAAMK,IAAI,AAAC,CAAA,AAACV,QAASG,IAAIG,IAAME,IAAG,KAAMC;YACxC,IAAI,CAACnC,MAAM,CAAC8B,UAAU,GAAG,AAAC,IAAI,CAAC9B,MAAM,CAAC8B,UAAU,GAAG,CAAEI,CAAAA,QAAQC,KAAI,IAAMC;YACvE3B,KAAKuB;YACLH,KAAKG;QACP;QACA,OAAOvB;IACT;IAEAe,UAAUE,GAAW,EAAEE,GAAW,EAAU;QAC1C,IAAI,CAACR,MAAM,CAACM,KAAK,GAAGE;QACpB,OAAOF;IACT;IAEAH,KAAKI,OAAe,CAAC,EAAEC,GAAY,EAAU;QAC3C,IAAIS,IAAI,OAAOT,QAAQ,WAAWA,MAAM,IAAI,IAAI,CAAC1B,OAAO;QACxD,IAAImC,IAAIV,OAAO,IAAI,CAAC1B,OAAO,EAAE;YAC3B,MAAM,IAAIa,WACR,CAAC,YAAY,EAAEa,KAAK,YAAY,EAAE,IAAI,CAACX,SAAS,CAAC,YAAY,CAAC;QAElE;QACA,IAAIW,OAAOjC,UAAU;YACnB,MAAM,IAAIoB,WACR,CAAC,QAAQ,EAAEa,KAAK,oCAAoC,EAAEjC,UAAU;QAEpE;QACA,MAAM4C,YAAYD,IAAI;QACtB,MAAMR,IAAIvB,KAAK2B,GAAG,CAAC,IAAIK,WAAWX;QAClC,MAAMO,OAAO,AAAC,CAAA,KAAKL,CAAAA,IAAK;QACxB,IAAIU,IAAI,AAAC,IAAI,CAACvC,MAAM,CAACqC,KAAK,EAAE,IAAK,IAAIR,IAAIS,YAAcJ;QACvDG,KAAKR;QACL,IAAIW,gBAAgBb,OAAOE;QAC3B,MAAOW,iBAAiB,EAAG;YACzBD,MAAM;YACNA,KAAK,IAAI,CAACvC,MAAM,CAACqC,KAAK,EAAE;YACxBA,KAAK;YACLG,iBAAiB;QACnB;QACA,IAAIA,gBAAgB,GAAG;YACrB,MAAML,QAAQ,IAAIK;YAClBD,MAAMC;YACND,KAAK,AAAC,IAAI,CAACvC,MAAM,CAACqC,KAAK,EAAE,IAAIF,QAAU,OAAOA;QAChD;QACA,OAAOI;IACT;IAEAE,KAAKd,OAAe,CAAC,EAAU;QAC7B,MAAMD,MAAM,IAAI,CAACH,IAAI,CAACI,MAAM,IAAI,CAACzB,OAAO;QACxC,IAAI,CAACA,OAAO,IAAIyB;QAChB,OAAOD;IACT;IAEAgB,KAAKvC,CAAS,EAAEwC,OAAe,CAAC,EAAQ;QACtC,OAAQA;YACN,KAAK;gBACH,IAAI,CAAC9B,MAAM,GAAG,IAAI,CAACX,OAAO,GAAGC;gBAC7B;YACF,KAAK;gBACH,IAAI,CAACU,MAAM,GAAG,IAAI,CAACf,MAAM,GAAGK;gBAC5B;YACF;gBACE,IAAI,CAACU,MAAM,GAAGV;QAClB;QACA,OAAO,IAAI;IACb;IAEAyC,OAAOzC,CAAS,EAAQ;QACtB,IAAI,CAACiB,MAAM,CAAC,GAAG,GAAGjB;QAClB,OAAO,IAAI;IACb;IAEA0C,KAAK1C,CAAS,EAAQ;QACpB,OAAO,IAAI,CAACuC,IAAI,CAACvC,GAAG;IACtB;IAEA2C,QAAQ3C,CAAS,EAAW;QAC1B,OAAO,CAAC,CAAC,IAAI,CAACoB,IAAI,CAAC,GAAGpB;IACxB;IAEAN,SAASkD,WAA2B,MAAM,EAAU;QAClD,OAAO,IAAI,CAAC/C,MAAM,CAACH,QAAQ,CAACkD;IAC9B;IAEAC,MAAMtB,GAAW,EAAEC,OAAe,CAAC,EAAQ;QACzC,IAAI,CAACzB,OAAO,GAAG,IAAI,CAACkB,MAAM,CAACM,KAAKC,MAAM,IAAI,CAACzB,OAAO;QAClD,OAAO,IAAI;IACb;AACF"}