Init indexed file
This commit is contained in:
92
lib/dat/binary-helpers.ts
Normal file
92
lib/dat/binary-helpers.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
export class BinaryWriter {
|
||||
private chunks: Buffer[] = [];
|
||||
|
||||
writeUInt32(value: number): this {
|
||||
const buf = Buffer.alloc(4);
|
||||
buf.writeUInt32LE(value, 0);
|
||||
this.chunks.push(buf);
|
||||
return this;
|
||||
}
|
||||
|
||||
writeDouble(value: number): this {
|
||||
const buf = Buffer.alloc(8);
|
||||
buf.writeDoubleLE(value, 0);
|
||||
this.chunks.push(buf);
|
||||
return this;
|
||||
}
|
||||
|
||||
writeBigUInt64(value: bigint): this {
|
||||
const buf = Buffer.alloc(8);
|
||||
buf.writeBigUInt64LE(value, 0);
|
||||
this.chunks.push(buf);
|
||||
return this;
|
||||
}
|
||||
|
||||
writeString(value: string): this {
|
||||
const strBuf = Buffer.from(value, 'utf8');
|
||||
this.writeUInt32(strBuf.length);
|
||||
this.chunks.push(strBuf);
|
||||
return this;
|
||||
}
|
||||
|
||||
writeNumberArray(values: number[]): this {
|
||||
this.writeUInt32(values.length);
|
||||
for (const v of values) this.writeDouble(v);
|
||||
return this;
|
||||
}
|
||||
|
||||
writeStringArray(values: string[]): this {
|
||||
this.writeUInt32(values.length);
|
||||
for (const v of values) this.writeString(v);
|
||||
return this;
|
||||
}
|
||||
|
||||
toBuffer(): Buffer {
|
||||
return Buffer.concat(this.chunks);
|
||||
}
|
||||
}
|
||||
|
||||
export class BinaryReader {
|
||||
private offset = 0;
|
||||
|
||||
constructor(private buf: Buffer) {}
|
||||
|
||||
readUInt32(): number {
|
||||
const v = this.buf.readUInt32LE(this.offset);
|
||||
this.offset += 4;
|
||||
return v;
|
||||
}
|
||||
|
||||
readDouble(): number {
|
||||
const v = this.buf.readDoubleLE(this.offset);
|
||||
this.offset += 8;
|
||||
return v;
|
||||
}
|
||||
|
||||
readBigUInt64(): bigint {
|
||||
const v = this.buf.readBigUInt64LE(this.offset);
|
||||
this.offset += 8;
|
||||
return v;
|
||||
}
|
||||
|
||||
readString(): string {
|
||||
const len = this.readUInt32();
|
||||
const v = this.buf.toString('utf8', this.offset, this.offset + len);
|
||||
this.offset += len;
|
||||
return v;
|
||||
}
|
||||
|
||||
readNumberArray(): number[] {
|
||||
const len = this.readUInt32();
|
||||
const arr: number[] = [];
|
||||
for (let i = 0; i < len; i++) arr.push(this.readDouble());
|
||||
return arr;
|
||||
}
|
||||
|
||||
readStringArray(): string[] {
|
||||
const len = this.readUInt32();
|
||||
const arr: string[] = [];
|
||||
for (let i = 0; i < len; i++) arr.push(this.readString());
|
||||
return arr;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user