| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- const bufLength = 1024 * 16;
- // Provide a fallback for older environments.
- const td =
- typeof TextDecoder !== 'undefined'
- ? /* #__PURE__ */ new TextDecoder()
- : typeof Buffer !== 'undefined'
- ? {
- decode(buf: Uint8Array): string {
- const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);
- return out.toString();
- },
- }
- : {
- decode(buf: Uint8Array): string {
- let out = '';
- for (let i = 0; i < buf.length; i++) {
- out += String.fromCharCode(buf[i]);
- }
- return out;
- },
- };
- export class StringWriter {
- pos = 0;
- private out = '';
- private buffer = new Uint8Array(bufLength);
- write(v: number): void {
- const { buffer } = this;
- buffer[this.pos++] = v;
- if (this.pos === bufLength) {
- this.out += td.decode(buffer);
- this.pos = 0;
- }
- }
- flush(): string {
- const { buffer, out, pos } = this;
- return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;
- }
- }
- export class StringReader {
- pos = 0;
- declare private buffer: string;
- constructor(buffer: string) {
- this.buffer = buffer;
- }
- next(): number {
- return this.buffer.charCodeAt(this.pos++);
- }
- peek(): number {
- return this.buffer.charCodeAt(this.pos);
- }
- indexOf(char: string): number {
- const { buffer, pos } = this;
- const idx = buffer.indexOf(char, pos);
- return idx === -1 ? buffer.length : idx;
- }
- }
|