From 4923e2991e2d36a575ea64ab8c86bb515e0cc21e Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Wed, 20 Feb 2019 16:59:25 -0800 Subject: [PATCH] added SimpleBuffer.copy --- src/mol-io/common/simple-buffer.ts | 12 ++++++++++++ src/servers/volume/pack/writer.ts | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mol-io/common/simple-buffer.ts b/src/mol-io/common/simple-buffer.ts index 45f4d85d5..3ecbaecbc 100644 --- a/src/mol-io/common/simple-buffer.ts +++ b/src/mol-io/common/simple-buffer.ts @@ -4,6 +4,8 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ +import { defaults } from 'mol-util'; + export interface SimpleBuffer extends Uint8Array { readInt8: (offset: number) => number readUInt8: (offset: number) => number @@ -38,6 +40,8 @@ export interface SimpleBuffer extends Uint8Array { writeUInt32BE: (value: number, offset: number) => void writeFloatBE: (value: number, offset: number) => void writeDoubleBE: (value: number, offset: number) => void + + copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => number } export namespace SimpleBuffer { @@ -76,6 +80,14 @@ export namespace SimpleBuffer { writeUInt32BE: (value: number, offset: number) => dv.setUint32(offset, value, false), writeFloatBE: (value: number, offset: number) => dv.setFloat32(offset, value, false), writeDoubleBE: (value: number, offset: number) => dv.setFloat64(offset, value, false), + + copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => { + targetStart = defaults(targetStart, 0) + sourceStart = defaults(sourceStart, 0) + sourceEnd = defaults(sourceEnd, array.length) + targetBuffer.set(array.subarray(sourceStart, sourceEnd), targetStart) + return sourceEnd - sourceStart + } }) } diff --git a/src/servers/volume/pack/writer.ts b/src/servers/volume/pack/writer.ts index e63750780..bdd1348b4 100644 --- a/src/servers/volume/pack/writer.ts +++ b/src/servers/volume/pack/writer.ts @@ -46,8 +46,7 @@ function fillCubeBuffer(ctx: Data.Context, sampling: Data.Sampling, u: number, v for (let k = offsetK; k < maxK; k++) { // copying the bytes direct is faster than using buffer.write* functions. const start = (l * sizeHK + k * sizeH + offsetH) * elementSize; - // TODO - cubeBuffer.set(src.subarray(start, start + copyH), writeOffset) + src.copy(cubeBuffer, writeOffset, start, start + copyH); writeOffset += copyH; } } -- GitLab