mirror of
https://github.com/meshcore-dev/meshcore.js.git
synced 2026-04-20 22:13:49 +00:00
72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
class BufferWriter {
|
|
|
|
constructor() {
|
|
this.buffer = [];
|
|
}
|
|
|
|
toBytes() {
|
|
return new Uint8Array(this.buffer);
|
|
}
|
|
|
|
writeBytes(bytes) {
|
|
this.buffer = [
|
|
...this.buffer,
|
|
...bytes,
|
|
];
|
|
}
|
|
|
|
writeByte(byte) {
|
|
this.writeBytes([
|
|
byte,
|
|
]);
|
|
}
|
|
|
|
writeUInt16LE(num) {
|
|
const bytes = new Uint8Array(2);
|
|
const view = new DataView(bytes.buffer);
|
|
view.setUint16(0, num, true);
|
|
this.writeBytes(bytes);
|
|
}
|
|
|
|
writeUInt32LE(num) {
|
|
const bytes = new Uint8Array(4);
|
|
const view = new DataView(bytes.buffer);
|
|
view.setUint32(0, num, true);
|
|
this.writeBytes(bytes);
|
|
}
|
|
|
|
writeInt32LE(num) {
|
|
const bytes = new Uint8Array(4);
|
|
const view = new DataView(bytes.buffer);
|
|
view.setInt32(0, num, true);
|
|
this.writeBytes(bytes);
|
|
}
|
|
|
|
writeString(string) {
|
|
this.writeBytes(new TextEncoder().encode(string));
|
|
}
|
|
|
|
writeCString(string, maxLength) {
|
|
|
|
// create buffer of max length
|
|
const bytes = new Uint8Array(new ArrayBuffer(maxLength));
|
|
|
|
// encode string to bytes
|
|
const encodedString = new TextEncoder().encode(string);
|
|
|
|
// copy in string until we hit the max length, or we run out of string bytes
|
|
for(var i = 0; i < maxLength && i < encodedString.length; i++){
|
|
bytes[i] = encodedString[i];
|
|
}
|
|
|
|
// ensure the last byte is always a null terminator
|
|
bytes[bytes.length - 1] = 0;
|
|
|
|
// write to buffer
|
|
this.writeBytes(bytes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default BufferWriter;
|