Skip to content

Commit 098b931

Browse files
committed
farm out arraybuffers.concat to Buffer
1 parent 03feb6f commit 098b931

2 files changed

Lines changed: 7 additions & 53 deletions

File tree

src/arraybuffers/arraybuffers.spec.ts

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -68,49 +68,13 @@ describe('ArrayBuffers <-> Hex Strings', function() {
6868
});
6969
});
7070

71-
describe('ArrayBuffers concat & chunk', function() {
71+
describe('ArrayBuffers chunk', function() {
7272
it('chunk(array12, 6).length == 3', function() {
7373
expect(arraybuffers.chunk(array12,6).length).toBe(3);
7474
});
7575
it('chunk(array12, 1).length == 15', function() {
7676
expect(arraybuffers.chunk(array12,1).length).toBe(15);
7777
});
78-
it('concat(array1,array2) == array12', function() {
79-
expect(arraybuffers.byteEquality(
80-
arraybuffers.concat([array1, array2]),
81-
array12))
82-
.toBe(true);
83-
});
84-
it('concat(chunk(array12, 1)) == array12', function() {
85-
expect(arraybuffers.byteEquality(
86-
arraybuffers.concat(arraybuffers.chunk(array12,1)),
87-
array12))
88-
.toBe(true);
89-
});
90-
it('concat(chunk(array12, 4)) == array12', function() {
91-
expect(arraybuffers.byteEquality(
92-
arraybuffers.concat(arraybuffers.chunk(array12,4)),
93-
array12))
94-
.toBe(true);
95-
});
96-
it('concat(chunk(array12, 5)) == array12', function() {
97-
expect(arraybuffers.byteEquality(
98-
arraybuffers.concat(arraybuffers.chunk(array12,5)),
99-
array12))
100-
.toBe(true);
101-
});
102-
it('concat(chunk(array12, array12.byteLength)) == array12', function() {
103-
expect(arraybuffers.byteEquality(
104-
arraybuffers.concat(arraybuffers.chunk(array12,array12.byteLength)),
105-
array12))
106-
.toBe(true);
107-
});
108-
it('concat(chunk(array12, 20)) == array12', function() {
109-
expect(arraybuffers.byteEquality(
110-
arraybuffers.concat(arraybuffers.chunk(array12,20)),
111-
array12))
112-
.toBe(true);
113-
});
11478
});
11579

11680
describe('ArrayBuffers <-> strings', function() {

src/arraybuffers/arraybuffers.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,12 @@ export function byteEquality(b1: ArrayBuffer, b2: ArrayBuffer): boolean {
66
return new Buffer(b1).equals(new Buffer(b2));
77
}
88

9-
// Concat |ArrayBuffer|s into a single ArrayBuffer. If size is given, then
10-
// the destination array buffer is of the given size. If size is not given or
11-
// zero, the size of all buffers is summed to make the new array buffer.
12-
export function concat(buffers:ArrayBuffer[], size?:number)
13-
:ArrayBuffer {
14-
if(!size) {
15-
size = 0;
16-
buffers.forEach(a => { size += a.byteLength });
17-
}
18-
var accumulatorBuffer = new Uint8Array(size);
19-
var location = 0;
20-
buffers.forEach(a => {
21-
accumulatorBuffer.set(new Uint8Array(a), location);
22-
location += a.byteLength;
23-
});
24-
return accumulatorBuffer.buffer;
9+
// Returns a new ArrayBuffer which is the result of concatenating all the
10+
// supplied ArrayBuffers together. If size is supplied, the resulting
11+
// ArrayBuffer will be of the given size.
12+
export function concat(arrayBuffers: ArrayBuffer[], size?: number): ArrayBuffer {
13+
// The Buffer instances share memory with their source ArrayBuffers.
14+
return Buffer.concat(arrayBuffers.map(ab => new Buffer(ab)), size).buffer;
2515
}
2616

2717
// Break an array buffer into multiple array buffers that are at most |size|

0 commit comments

Comments
 (0)