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