123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- const hasBuffer = (typeof Buffer !== 'undefined');
- let textDecoder;
- export class VSBuffer {
- constructor(buffer) {
- this.buffer = buffer;
- this.byteLength = this.buffer.byteLength;
- }
- static wrap(actual) {
- if (hasBuffer && !(Buffer.isBuffer(actual))) {
- // https://nodejs.org/dist/latest-v10.x/docs/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length
- // Create a zero-copy Buffer wrapper around the ArrayBuffer pointed to by the Uint8Array
- actual = Buffer.from(actual.buffer, actual.byteOffset, actual.byteLength);
- }
- return new VSBuffer(actual);
- }
- toString() {
- if (hasBuffer) {
- return this.buffer.toString();
- }
- else {
- if (!textDecoder) {
- textDecoder = new TextDecoder();
- }
- return textDecoder.decode(this.buffer);
- }
- }
- }
- export function readUInt16LE(source, offset) {
- return (((source[offset + 0] << 0) >>> 0) |
- ((source[offset + 1] << 8) >>> 0));
- }
- export function writeUInt16LE(destination, value, offset) {
- destination[offset + 0] = (value & 0b11111111);
- value = value >>> 8;
- destination[offset + 1] = (value & 0b11111111);
- }
- export function readUInt32BE(source, offset) {
- return (source[offset] * Math.pow(2, 24)
- + source[offset + 1] * Math.pow(2, 16)
- + source[offset + 2] * Math.pow(2, 8)
- + source[offset + 3]);
- }
- export function writeUInt32BE(destination, value, offset) {
- destination[offset + 3] = value;
- value = value >>> 8;
- destination[offset + 2] = value;
- value = value >>> 8;
- destination[offset + 1] = value;
- value = value >>> 8;
- destination[offset] = value;
- }
- export function readUInt8(source, offset) {
- return source[offset];
- }
- export function writeUInt8(destination, value, offset) {
- destination[offset] = value;
- }
|