Skip to content

Commit

Permalink
Add functions for reading/writing strings without lengths
Browse files Browse the repository at this point in the history
  • Loading branch information
tgpholly committed Jan 1, 2024
1 parent 4cacdbf commit 961df8c
Show file tree
Hide file tree
Showing 8 changed files with 90 additions and 22 deletions.
21 changes: 21 additions & 0 deletions base/ReaderBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,25 @@ export class ReaderBase {
public readBool() {
return Boolean(this.readUByte());
}

public readShortString() {
const length = this.readUByte();
let text = "";

for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
}

return text;
}

public readBytesAsString(bytesToRead:number) {
let text = "";

for (let i = 0; i < bytesToRead; i++) {
text += String.fromCharCode(this.readUByte());
}

return text;
}
}
15 changes: 15 additions & 0 deletions base/WriterBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,19 @@ export class WriterBase {

return this;
}

public writeStringAsBytes(text:string) {
let buffer;
if (this.resizable) {
buffer = getBufferClass().alloc(text.length);
} else {
buffer = this.buffer;
}

for (let i = 0; i < text.length; i++) {
buffer.writeUInt8(text.charCodeAt(i), i);
}

return this;
}
}
4 changes: 3 additions & 1 deletion readers/IReader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ export interface IReader {
readByte(): number,
readUByte(): number,
readBool(): boolean,
readShortString(): string,
readBytesAsString(bytesToRead:number): string,
readShort(): number,
readUShort(): number,
readInt(): number,
Expand All @@ -17,7 +19,7 @@ export interface IReader {
readULong(): bigint,
readFloat(): number,
readDouble(): number,
readShortString(): string,
readString(): string,
readShortsAsString(shortsToRead:number): string,
readString16(): string,
}
19 changes: 9 additions & 10 deletions readers/ReaderBE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ export class ReaderBE extends ReaderBase implements IReader {
return value;
}

public readShortString() {
const length = this.readUByte();
let text:string = "";
public readString() {
const length = this.readUShort();
let text = "";

for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
Expand All @@ -64,22 +64,21 @@ export class ReaderBE extends ReaderBase implements IReader {
return text;
}

public readString() {
public readString16() {
const length = this.readUShort();
let text:string = "";
let text = "";

for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
text += String.fromCharCode(this.readUShort());
}

return text;
}

public readString16() {
const length = this.readUShort();
let text:string = "";
public readShortsAsString(shortsToRead:number) {
let text = "";

for (let i = 0; i < length; i++) {
for (let i = 0; i < shortsToRead; i++) {
text += String.fromCharCode(this.readUShort());
}

Expand Down
19 changes: 9 additions & 10 deletions readers/ReaderLE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ export class ReaderLE extends ReaderBase implements IReader {
return value;
}

public readShortString() {
const length = this.readUByte();
public readString() {
const length = this.readUShort();
let text:string = "";

for (let i = 0; i < length; i++) {
Expand All @@ -63,23 +63,22 @@ export class ReaderLE extends ReaderBase implements IReader {

return text;
}

public readString() {
public readString16() {
const length = this.readUShort();
let text:string = "";

for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
text += String.fromCharCode(this.readUShort());
}

return text;
}

public readString16() {
const length = this.readUShort();
let text:string = "";

for (let i = 0; i < length; i++) {
public readShortsAsString(shortsToRead:number) {
let text = "";

for (let i = 0; i < shortsToRead; i++) {
text += String.fromCharCode(this.readUShort());
}

Expand Down
4 changes: 3 additions & 1 deletion writers/IWriter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ export interface IWriter {
writeByte(value:number): IWriter,
writeUByte(value:number): IWriter,
writeBool(value:boolean|number): IWriter,
writeStringAsBytes(text:string): IWriter,
writeShort(value:number): IWriter,
writeUShort(value:number): IWriter,
writeInt(value:number): IWriter,
writeUInt(value:number): IWriter,
writeLong(value:number|bigint): IWriter,
writeULong(value:number): IWriter,
writeULong(value:number|bigint): IWriter,
writeFloat(value:number): IWriter,
writeDouble(value:number): IWriter,
writeShortString(text:string): IWriter,
writeString(text:string): IWriter,
writeString16(text:string): IWriter,
writeStringAsShorts(text:string): IWriter
}
15 changes: 15 additions & 0 deletions writers/WriterBE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,19 @@ export class WriterBE extends WriterBase implements IWriter {

return this;
}

public writeStringAsShorts(text:string) {
let buffer:Buffer;
if (this.resizable) {
buffer = getBufferClass().alloc(text.length * 2);
} else {
buffer = this.buffer;
}

for (let i = 0; i < text.length; i++) {
buffer.writeUint16BE(text.charCodeAt(i), i);
}

return this;
}
}
15 changes: 15 additions & 0 deletions writers/WriterLE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,19 @@ export class WriterLE extends WriterBase implements IWriter {

return this;
}

public writeStringAsShorts(text:string) {
let buffer:Buffer;
if (this.resizable) {
buffer = getBufferClass().alloc(text.length * 2);
} else {
buffer = this.buffer;
}

for (let i = 0; i < text.length; i++) {
buffer.writeUint16LE(text.charCodeAt(i), i);
}

return this;
}
}

0 comments on commit 961df8c

Please sign in to comment.