Files
notification-elements-demo/node_modules/@jsonjoy.com/buffers/lib/Reader.js
Giuliano Silvestro 5d0c9ec7eb Initial commit: notification-elements-demo app
Interactive Angular 19 demo for @sda/notification-elements-ui with
6 sections: Bell & Feed, Notification Center, Inbox, Comments &
Threads, Mention Input, and Full-Featured layout. Includes mock
data, dark mode toggle, and real-time event log.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 21:49:19 +10:00

145 lines
4.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Reader = void 0;
const decodeUtf8_1 = require("./utf8/decodeUtf8");
class Reader {
constructor(uint8 = new Uint8Array([]), view = new DataView(uint8.buffer, uint8.byteOffset, uint8.length), x = 0, end = uint8.length) {
this.uint8 = uint8;
this.view = view;
this.x = x;
this.end = end;
}
reset(uint8) {
this.x = 0;
this.uint8 = uint8;
this.view = new DataView(uint8.buffer, uint8.byteOffset, uint8.length);
}
size() {
return this.end - this.x;
}
/**
* Get current byte value without advancing the cursor.
*/
peek() {
return this.view.getUint8(this.x);
}
/**
* @deprecated Use peek() instead.
*/
peak() {
return this.peek();
}
skip(length) {
this.x += length;
}
buf(size = this.size()) {
const x = this.x;
const end = x + size;
const bin = this.uint8.subarray(x, end);
this.x = end;
return bin;
}
subarray(start = 0, end) {
const x = this.x;
const actualStart = x + start;
const actualEnd = typeof end === 'number' ? x + end : this.end;
return this.uint8.subarray(actualStart, actualEnd);
}
/**
* Creates a new {@link Reader} that references the same underlying memory
* buffer. But with independent cursor and end.
*
* Preferred over {@link buf} since it also provides a DataView and is much
* faster to allocate a new {@link Slice} than a new {@link Uint8Array}.
*
* @param start Start offset relative to the current cursor position.
* @param end End offset relative to the current cursor position.
* @returns A new {@link Reader} instance.
*/
slice(start = 0, end) {
const x = this.x;
const actualStart = x + start;
const actualEnd = typeof end === 'number' ? x + end : this.end;
return new Reader(this.uint8, this.view, actualStart, actualEnd);
}
/**
* Similar to {@link slice} but also advances the cursor. Returns a new
* {@link Reader} that references the same underlying memory buffer, starting
* from the current cursor position.
*
* @param size Number of bytes to cut from the current position.
* @returns A new {@link Reader} instance.
*/
cut(size = this.size()) {
const slice = this.slice(0, size);
this.skip(size);
return slice;
}
u8() {
return this.uint8[this.x++];
// return this.view.getUint8(this.x++);
}
i8() {
return this.view.getInt8(this.x++);
}
u16() {
// const num = this.view.getUint16(this.x);
// this.x += 2;
// return num;
let x = this.x;
const num = (this.uint8[x++] << 8) + this.uint8[x++];
this.x = x;
return num;
}
i16() {
const num = this.view.getInt16(this.x);
this.x += 2;
return num;
}
u32() {
const num = this.view.getUint32(this.x);
this.x += 4;
return num;
}
i32() {
const num = this.view.getInt32(this.x);
this.x += 4;
return num;
}
u64() {
const num = this.view.getBigUint64(this.x);
this.x += 8;
return num;
}
i64() {
const num = this.view.getBigInt64(this.x);
this.x += 8;
return num;
}
f32() {
const pos = this.x;
this.x += 4;
return this.view.getFloat32(pos);
}
f64() {
const pos = this.x;
this.x += 8;
return this.view.getFloat64(pos);
}
utf8(size) {
const start = this.x;
this.x += size;
return (0, decodeUtf8_1.decodeUtf8)(this.uint8, start, size);
}
ascii(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;
}
}
exports.Reader = Reader;
//# sourceMappingURL=Reader.js.map