start work on the web buffer implementation
This commit is contained in:
parent
558c3c2025
commit
3e70f0db81
2 changed files with 70 additions and 1 deletions
|
@ -12,7 +12,7 @@ const toolinglessFolderPath = __dirname.replace("/tooling", "/");
|
|||
function readDir(nam:string) {
|
||||
const files = readdirSync(nam);
|
||||
for (const file of files) {
|
||||
if (nam == toolinglessFolderPath && (file.startsWith(".") || file == "tooling" || file == "lib" || file == "node_modules" || file == "combined.ts")) {
|
||||
if (nam == toolinglessFolderPath && (file.startsWith(".") || file == "tooling" || file == "lib" || file == "web" || file == "node_modules" || file == "combined.ts")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
69
web/Buffer.ts
Normal file
69
web/Buffer.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
export class Buffer {
|
||||
public data:Uint8Array;
|
||||
|
||||
public constructor(size:number, data?:Array<number>|Uint8Array) {
|
||||
if (data !== undefined) {
|
||||
let usableData:Uint8Array;
|
||||
if (data instanceof Array) {
|
||||
usableData = new Uint8Array(data);
|
||||
} else {
|
||||
usableData = data;
|
||||
}
|
||||
|
||||
this.data = usableData;
|
||||
} else {
|
||||
this.data = new Uint8Array(size);
|
||||
}
|
||||
}
|
||||
|
||||
public get length() {
|
||||
return this.data.length;
|
||||
}
|
||||
|
||||
// TODO: toString
|
||||
|
||||
// TODO: Check correctness of this.
|
||||
public static concat(buffers:Array<Buffer>, totalLength?:number) {
|
||||
let joinedArrays:Uint8Array;
|
||||
if (totalLength !== undefined) {
|
||||
joinedArrays = new Uint8Array(totalLength);
|
||||
} else {
|
||||
let arraysLength = 0;
|
||||
for (const buffer of buffers) {
|
||||
arraysLength += buffer.length;
|
||||
}
|
||||
joinedArrays = new Uint8Array(arraysLength);
|
||||
}
|
||||
|
||||
let offset = 0;
|
||||
for (const buffer of buffers) {
|
||||
joinedArrays.set(buffer.data, offset);
|
||||
offset += buffer.length;
|
||||
}
|
||||
|
||||
return new Buffer(0, joinedArrays);
|
||||
}
|
||||
|
||||
// Little Endian
|
||||
|
||||
// Writer methods
|
||||
public writeInt8(value:number, offset?:number) {
|
||||
if (offset === undefined) {
|
||||
// TODO: Handle writing without an offset
|
||||
throw new Error("Writing without offset is currently unimplemented");
|
||||
}
|
||||
if (value >= 0) {
|
||||
this.data[offset] = value;
|
||||
} else {
|
||||
this.data[offset] = 256 + value;
|
||||
}
|
||||
}
|
||||
|
||||
public writeUInt8(value:number, offset?:number) {
|
||||
if (offset === undefined) {
|
||||
// TODO: Handle writing without an offset
|
||||
throw new Error("Writing without offset is currently unimplemented");
|
||||
}
|
||||
this.data[offset] = value;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue