Browse Source

added SimpleBuffer.copy

Alexander Rose 6 years ago
parent
commit
4923e2991e
2 changed files with 13 additions and 2 deletions
  1. 12 0
      src/mol-io/common/simple-buffer.ts
  2. 1 2
      src/servers/volume/pack/writer.ts

+ 12 - 0
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
+            }
         })
     }
 

+ 1 - 2
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;
             }
         }