node-ejs-renderer/node_modules/@jsonjoy.com/util/lib/buffers/StreamingReader.js
2024-06-09 13:55:01 -04:00

131 lines
3.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamingReader = void 0;
const Writer_1 = require("./Writer");
const decodeUtf8_1 = require("./utf8/decodeUtf8");
class StreamingReader {
constructor(allocSize = 16 * 1024) {
this.dx = 0;
this.writer = new Writer_1.Writer(allocSize);
}
size() {
return this.writer.x - this.x;
}
assertSize(size) {
if (size > this.size())
throw new RangeError('OUT_OF_BOUNDS');
}
push(uint8) {
this.writer.buf(uint8, uint8.length);
}
consume() {
this.writer.x0 += this.dx;
this.dx = 0;
}
get uint8() {
return this.writer.uint8;
}
get view() {
return this.writer.view;
}
get x() {
return this.writer.x0 + this.dx;
}
set x(x) {
this.dx = x - this.writer.x0;
}
peak() {
this.assertSize(1);
return this.view.getUint8(this.x);
}
skip(length) {
this.assertSize(length);
this.x += length;
}
buf(size) {
this.assertSize(size);
const end = this.x + size;
const bin = this.uint8.subarray(this.x, end);
this.x = end;
return bin;
}
u8() {
this.assertSize(1);
return this.view.getUint8(this.x++);
}
i8() {
this.assertSize(1);
return this.view.getInt8(this.x++);
}
u16() {
this.assertSize(2);
const num = this.view.getUint16(this.x);
this.x += 2;
return num;
}
i16() {
this.assertSize(2);
const num = this.view.getInt16(this.x);
this.x += 2;
return num;
}
u32() {
this.assertSize(4);
const num = this.view.getUint32(this.x);
this.x += 4;
return num;
}
i32() {
this.assertSize(4);
const num = this.view.getInt32(this.x);
this.x += 4;
return num;
}
u64() {
this.assertSize(8);
const num = this.view.getBigUint64(this.x);
this.x += 8;
return num;
}
i64() {
this.assertSize(8);
const num = this.view.getBigInt64(this.x);
this.x += 8;
return num;
}
f32() {
this.assertSize(4);
const pos = this.x;
this.x += 4;
return this.view.getFloat32(pos);
}
f64() {
this.assertSize(8);
const pos = this.x;
this.x += 8;
return this.view.getFloat64(pos);
}
utf8(size) {
this.assertSize(size);
const start = this.x;
this.x += size;
return (0, decodeUtf8_1.decodeUtf8)(this.uint8, start, size);
}
ascii(length) {
this.assertSize(length);
const uint8 = this.uint8;
let str = '';
const end = this.x + length;
for (let i = this.x; i < end; i++)
str += String.fromCharCode(uint8[i]);
this.x = end;
return str;
}
reset(uint8) {
this.dx = 0;
this.writer.reset();
this.push(uint8);
}
}
exports.StreamingReader = StreamingReader;
//# sourceMappingURL=StreamingReader.js.map