diff --git a/packages/belt-memory-rw/src/browser/memory-creator.spec.ts b/packages/belt-memory-rw/src/browser/memory-creator.spec.ts index b5b2523..0896349 100644 --- a/packages/belt-memory-rw/src/browser/memory-creator.spec.ts +++ b/packages/belt-memory-rw/src/browser/memory-creator.spec.ts @@ -11,6 +11,8 @@ describe('browser memory-creator', () => { memCreator.writeByte(1); memCreator.writeBytes([2, 3]); memCreator.writeBytes(new Uint8Array([2, 3])); + memCreator.writeSomeBytes(1, [5, 3]); + memCreator.writeSomeBytes(1, new Uint8Array([9, 3])); memCreator.writeCString16BE('456'); memCreator.writeCString16LE('789'); memCreator.writeCString32BE('01234'); @@ -32,7 +34,7 @@ describe('browser memory-creator', () => { memCreator.writeUInt32LE(33333); memCreator.writeUInt8(254); - assert.strictEqual(memCreator.length, 95); + assert.strictEqual(memCreator.length, 97); assert.strictEqual(memCreator.length, memCreator.position); assert.strictEqual(memCreator.remaining, 0); try { @@ -46,6 +48,7 @@ describe('browser memory-creator', () => { assert.strictEqual(reader.readByte(), 1); assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(2))), [2, 3]); assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(2))), [2, 3]); + assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(2))), [5, 9]); assert.strictEqual(reader.readCString16BE(), '456'); assert.strictEqual(reader.readCString16LE(), '789'); assert.strictEqual(reader.readCString32BE(), '01234'); diff --git a/packages/belt-memory-rw/src/browser/memory-creator.ts b/packages/belt-memory-rw/src/browser/memory-creator.ts index 154675d..72d7514 100644 --- a/packages/belt-memory-rw/src/browser/memory-creator.ts +++ b/packages/belt-memory-rw/src/browser/memory-creator.ts @@ -96,6 +96,11 @@ export class MemoryCreator implements IMemoryCreator { this._encapsWithBuffer(writer => writer.writeBytes(values), Array.isArray(values) ? values.length : values.byteLength); } + /** @inheritdoc */ + public writeSomeBytes(size: number, values: number[] | ArrayBuffer): void { + this._encapsWithBuffer(writer => writer.writeSomeBytes(size, values), size); + } + /** @inheritdoc */ public writeString(value: string): void { this._encapsWithBuffer(writer => writer.writeString(value), value.length); diff --git a/packages/belt-memory-rw/src/browser/memory-writer-le.spec.ts b/packages/belt-memory-rw/src/browser/memory-writer-le.spec.ts index 155385f..cc11cae 100644 --- a/packages/belt-memory-rw/src/browser/memory-writer-le.spec.ts +++ b/packages/belt-memory-rw/src/browser/memory-writer-le.spec.ts @@ -82,6 +82,15 @@ describe('browser memory-writer LE', () => { const reader = new MemoryReader(buffer); assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(5))), [8, 7, 6, 5, 4]); }); + + it('writeSomeBytes', () => { + const buffer = new ArrayBuffer(32); + const writer = new MemoryWriter(buffer); + writer.writeSomeBytes(3, [8, 7, 6, 5, 4]); + + const reader = new MemoryReader(buffer); + assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(5))), [8, 7, 6, 0, 0]); + }); }); describe('number', () => { diff --git a/packages/belt-memory-rw/src/browser/memory-writer.ts b/packages/belt-memory-rw/src/browser/memory-writer.ts index a65b23e..1076e21 100644 --- a/packages/belt-memory-rw/src/browser/memory-writer.ts +++ b/packages/belt-memory-rw/src/browser/memory-writer.ts @@ -27,6 +27,17 @@ export class MemoryWriter extends MemoryCommon implements IMemoryWriter extends IMemoryCommon { /** Write bytes */ writeBytes(values: number[] | InternalType): void; + /** Write some bytes */ + writeSomeBytes(size: number, values: number[] | InternalType): void; + /** Write an ISO-8859-1 string [VARY STR] */ writeString(value: string): void; diff --git a/packages/belt-memory-rw/src/node/memory-creator.spec.ts b/packages/belt-memory-rw/src/node/memory-creator.spec.ts index 6b2820e..53a11e9 100644 --- a/packages/belt-memory-rw/src/node/memory-creator.spec.ts +++ b/packages/belt-memory-rw/src/node/memory-creator.spec.ts @@ -11,6 +11,8 @@ describe('nodejs memory-creator', () => { memCreator.writeByte(1); memCreator.writeBytes([2, 3]); memCreator.writeBytes(Buffer.from([2, 3])); + memCreator.writeSomeBytes(1, [5, 3]); + memCreator.writeSomeBytes(1, [9, 3]); memCreator.writeCString16BE('456'); memCreator.writeCString16LE('789'); memCreator.writeCString32BE('01234'); @@ -32,7 +34,7 @@ describe('nodejs memory-creator', () => { memCreator.writeUInt32LE(33333); memCreator.writeUInt8(254); - assert.strictEqual(memCreator.length, 95); + assert.strictEqual(memCreator.length, 97); assert.strictEqual(memCreator.length, memCreator.position); assert.strictEqual(memCreator.remaining, 0); @@ -46,6 +48,7 @@ describe('nodejs memory-creator', () => { assert.strictEqual(reader.readByte(), 1); assert.deepStrictEqual(Array.from(reader.readBytes(2)), [2, 3]); assert.deepStrictEqual(Array.from(reader.readBytes(2)), [2, 3]); + assert.deepStrictEqual(Array.from(new Uint8Array(reader.readBytes(2))), [5, 9]); assert.strictEqual(reader.readCString16BE(), '456'); assert.strictEqual(reader.readCString16LE(), '789'); assert.strictEqual(reader.readCString32BE(), '01234'); diff --git a/packages/belt-memory-rw/src/node/memory-creator.ts b/packages/belt-memory-rw/src/node/memory-creator.ts index fe09a0d..fda21e3 100644 --- a/packages/belt-memory-rw/src/node/memory-creator.ts +++ b/packages/belt-memory-rw/src/node/memory-creator.ts @@ -96,6 +96,11 @@ export class MemoryCreator implements IMemoryCreator { this._encapsWithBuffer(writer => writer.writeBytes(values), values.length); } + /** @inheritdoc */ + public writeSomeBytes(size: number, values: Buffer): void { + this._encapsWithBuffer(writer => writer.writeSomeBytes(size, values), size); + } + /** @inheritdoc */ public writeString(value: string): void { this._encapsWithBuffer(writer => writer.writeString(value), value.length); diff --git a/packages/belt-memory-rw/src/node/memory-writer-le.spec.ts b/packages/belt-memory-rw/src/node/memory-writer-le.spec.ts index db2aae9..7924826 100644 --- a/packages/belt-memory-rw/src/node/memory-writer-le.spec.ts +++ b/packages/belt-memory-rw/src/node/memory-writer-le.spec.ts @@ -82,6 +82,15 @@ describe('nodejs memory-writer LE', () => { const reader = new MemoryReader(buffer); assert.deepStrictEqual(Array.from(reader.readBytes(5)), [8, 7, 6, 5, 4]); }); + + it('writeSomeBytes', () => { + const buffer = Buffer.alloc(32); + const writer = new MemoryWriter(buffer); + writer.writeSomeBytes(3, [8, 7, 6, 5, 4]); + + const reader = new MemoryReader(buffer); + assert.deepStrictEqual(Array.from(reader.readBytes(5)), [8, 7, 6, 0, 0]); + }); }); describe('number', () => { diff --git a/packages/belt-memory-rw/src/node/memory-writer.ts b/packages/belt-memory-rw/src/node/memory-writer.ts index 5cfa44f..e9c0887 100644 --- a/packages/belt-memory-rw/src/node/memory-writer.ts +++ b/packages/belt-memory-rw/src/node/memory-writer.ts @@ -22,6 +22,13 @@ export class MemoryWriter extends MemoryCommon implements IMemoryWriter, }); } + /** @inheritdoc */ + public writeSomeBytes(size: number, values: number[] | Buffer) { + for (let i = 0; i < size; i++) { + this._buf.writeUInt8(values[i], this._offset++); + } + } + /** @inheritdoc */ public writeString(value: string) { this._buf.write(value, this._offset, value.length, 'latin1');