From 1057caaada7fc924f1df3be6bcc7c4cfaee71691 Mon Sep 17 00:00:00 2001
From: David Sehnal <dave@Davids-MacBook-Pro.local>
Date: Wed, 4 Apr 2018 14:04:15 -0700
Subject: [PATCH] Chunked array

---
 package-lock.json                             | Bin 242118 -> 430838 bytes
 src/mol-data/util/_spec/chunked-array.spec.ts |  24 +
 src/mol-data/util/chunked-array.ts            |  37 +-
 src/mol-geo/util/marching-cubes/algorithm.ts  |   0
 src/mol-geo/util/marching-cubes/tables.ts     | 420 ++++++++++++++++++
 src/mol-io/common/binary-cif/array-encoder.ts |   2 +-
 src/perf-tests/chunked-array-vs-native.ts     |   4 +-
 7 files changed, 469 insertions(+), 18 deletions(-)
 create mode 100644 src/mol-data/util/_spec/chunked-array.spec.ts
 create mode 100644 src/mol-geo/util/marching-cubes/algorithm.ts
 create mode 100644 src/mol-geo/util/marching-cubes/tables.ts

diff --git a/package-lock.json b/package-lock.json
index b17cb5bffca40761c12d75553813608f5fedc15d..30e5e6dcabee5841e3d7f44234f68549cde793fe 100644
GIT binary patch
delta 63707
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
IOuO&@0)Ejo&;S4c

delta 1190
zcmXw%eN2{R6vlV%``pj_!u#@qf{EygVJg!?L?lNcL`~5tnse321*RgDVTvn1mzXp(
zP~uUJ;dcnjltdr5%de#(N{FDO1`6g!NiLe$RyN$yUjFExvvaPU>$mG{=TTL}`Cojs
z8?;>-YB`lWX0WqAa*C0(Z#l$X)Z%j<4*ys=xg(!rCv$WJOOMyGoXl~LmD8Shn4GOi
zAA~w#3p%wkZ6TChyu82tPVFFj*OJNp{(yaYb3c2{cDFnzF&^=5;V?Vz%_MtwQTYF=
z+o{-^Lw2|0k@zGt(2lK0?;Gq^=aF;$#9ne1oec<a)?H0k_O-U(oTA%HjZ@zhq@0_7
z2C;2=Z`oHKA9ChBov8ss%`Qy!(Z7U$`jJJ*38UFwY20LjWZ`N`mB>=#lek=K7_vuE
z58=W~bd)7$lnN2=G76Vip9(BLqN1@UiLMe}OQCj!+Y@Ptk;J<?NS;O+w|!}*S7N(4
zL3XCo=cs#&PHG&<q<W30Y^o<&+DoAlG*1OfMK5_}XD)Rj^Fz9$ki3M_TvD@wj$z^|
zy05UafTEPp6Te}an?hs<Oq{&_1=UNx5;}_1GCD+v{)&DMK*HX>gFdUKXEoaQ(-Dn~
zT8dYwc8CIzaEdfZVm)2PoCca}p|!;y8um46CAe-<oC|N?qe8->`*e6Va;K{+gk`hT
z1dWai<+t8gtJ+b&PF?ZJ{4&*qi(6E>3q`wB0b%~vYLr54mHJX4Z=c$s<iP>;6ga3-
z6|Ombs7WVO)L<;WuGTBGb}A1`%^m+r#jh%Q2u^E#d7M=C*AZw+(Qbp=lk`~^I%nt&
z1|NN*Hxq`h)GZ3f3-vidMUlR%acHCVbI+7%H(^$}1|epTzGtxV8{MekIj9FJ6g!$&
zW*pO1h&`$2x{=?YZNijhy_;lohjz=YEDlCuyZ%d|u2Xx1WYt6tmWRrC?T{#grr&jT
z0OJ1E=QTdn9IEBGn_KX_hm(~o4dFT|9mtGf12|9N{ctW;s2Rdp20sjC<CeWIaI<s_
z(H^`znpbLhWta+=?{laR&S)OX-Gprk+^8fnkuPC-GS?6art%bnb+b6lU`GZ=YI%8+
z<&)xbDpl6ZVYh7CWO*?miw^{#EstXe&SE~PP_m4tF}_>PVIDkM&sBu363)<=U&bXq
zL|1dli^ys7$H0#rJjRXjUA#aetef{Jr1fxlC|t&52TSz;(}C^?^CS?b<4rrkJHaH9
ztTxIm)8qZc|GHkO9cx$~7MeJ_bTVUAipjGOlV-ZKJf3P=aBGIC93got%sDAsW6ogc
zT9Z5o$=gkbh3-o8hlLxpCZDk!robhQb><Yx8%(}}b<vDuywPg5X=!RRz4+<68PC|~
gvqq4_yk}W>Cd<lop&`e5H4qo_tt7Yflv%F-00rI6eE<Le

diff --git a/src/mol-data/util/_spec/chunked-array.spec.ts b/src/mol-data/util/_spec/chunked-array.spec.ts
new file mode 100644
index 000000000..ded69465d
--- /dev/null
+++ b/src/mol-data/util/_spec/chunked-array.spec.ts
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+import { ChunkedArray } from '../chunked-array'
+
+describe('Chunked Array', () => {
+    it('creation', () => {
+        const arr  = ChunkedArray.create<number>(_ => [], 2, 2);
+        ChunkedArray.add2(arr, 1, 2);
+        ChunkedArray.add2(arr, 3, 4);
+        expect(ChunkedArray.compact(arr)).toEqual([1, 2, 3, 4]);
+    });
+
+    it('initial', () => {
+        const arr  = ChunkedArray.create<number>(s => new Int32Array(s), 2, 6, new Int32Array([1, 2, 3, 4]));
+        ChunkedArray.add2(arr, 4, 3);
+        ChunkedArray.add2(arr, 2, 1);
+        ChunkedArray.add2(arr, 5, 6);
+        expect(ChunkedArray.compact(arr)).toEqual(new Int32Array([4, 3, 2, 1, 5, 6]));
+    });
+});
\ No newline at end of file
diff --git a/src/mol-data/util/chunked-array.ts b/src/mol-data/util/chunked-array.ts
index f9b977571..8ac4ba715 100644
--- a/src/mol-data/util/chunked-array.ts
+++ b/src/mol-data/util/chunked-array.ts
@@ -16,9 +16,7 @@ interface ChunkedArray<T> {
     ctor: (size: number) => any,
     elementSize: number,
 
-    linearGrowth: boolean,
-
-    initialSize: number,
+    growBy: number,
     allocatedSize: number,
     elementCount: number,
 
@@ -26,20 +24,16 @@ interface ChunkedArray<T> {
     currentChunk: any,
     currentIndex: number,
 
-    chunks: any[]
+    chunks: any[][]
 }
 
-// TODO: better api, write tests
 namespace ChunkedArray {
     export function is(x: any): x is ChunkedArray<any> {
         return x.creator && x.chunkSize;
     }
 
     function allocateNext(array: ChunkedArray<any>) {
-        let nextSize = !array.allocatedSize || array.linearGrowth
-            ? array.initialSize * array.elementSize
-            : Math.max(Math.ceil(0.61 * array.allocatedSize), 1);
-        if (nextSize % array.elementSize !== 0) nextSize += nextSize % array.elementSize;
+        let nextSize = array.growBy * array.elementSize;
         array.currentSize = nextSize;
         array.currentIndex = 0;
         array.currentChunk = array.ctor(nextSize);
@@ -89,7 +83,11 @@ namespace ChunkedArray {
             return chunks[0];
         }
 
-        const ret = ctor(array.elementSize * array.elementCount);
+        let size = 0;
+        for (let i = 0, _i = chunks.length - 1; i < _i; i++) size += chunks[i].length;
+        size += array.currentIndex;
+
+        const ret = ctor(size);
         let offset = 0;
 
         if (ret.buffer) {
@@ -115,13 +113,12 @@ namespace ChunkedArray {
         return ret;
     }
 
-    export function create<T>(ctor: (size: number) => any, elementSize: number, initialSize: number, linearGrowth: boolean): ChunkedArray<T> {
-        return {
+    export function create<T>(ctor: (size: number) => any, elementSize: number, growBy: number, initialChunk?: ArrayLike<T>): ChunkedArray<T> {
+        const ret: ChunkedArray<T> = {
             ctor,
             elementSize,
-            linearGrowth,
 
-            initialSize,
+            growBy,
             allocatedSize: 0,
             elementCount: 0,
 
@@ -130,7 +127,17 @@ namespace ChunkedArray {
             currentIndex: 0,
 
             chunks: []
-        } as ChunkedArray<T>;
+        };
+
+        if (!initialChunk) return ret;
+
+        if (initialChunk.length % elementSize !== 0) throw new Error('initialChunk length must be a multiple of the element size.');
+        ret.currentChunk = initialChunk;
+        ret.allocatedSize = initialChunk.length;
+        ret.currentSize = initialChunk.length;
+        ret.chunks[0] = initialChunk as any;
+
+        return ret;
     }
 }
 
diff --git a/src/mol-geo/util/marching-cubes/algorithm.ts b/src/mol-geo/util/marching-cubes/algorithm.ts
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/mol-geo/util/marching-cubes/tables.ts b/src/mol-geo/util/marching-cubes/tables.ts
new file mode 100644
index 000000000..b363f2370
--- /dev/null
+++ b/src/mol-geo/util/marching-cubes/tables.ts
@@ -0,0 +1,420 @@
+/**
+ * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+export interface Index { i: number, j: number, k: number }
+export function Index(i: number, j: number, k: number): Index { return { i, j, k }; }
+
+export interface IndexPair { a: Index, b: Index }
+export function IndexPair(a: Index, b: Index): IndexPair { return { a, b }; }
+
+export const EdgesXY = [
+    [],
+    [0, 3],
+    [0, 1],
+    [1, 3],
+    [1, 2],
+
+    [0, 1, 1, 2, 2, 3, 0, 3],
+
+    [0, 2],
+    [2, 3],
+    [2, 3],
+    [0, 2],
+
+    [0, 1, 1, 2, 2, 3, 0, 3],
+
+    [1, 2],
+    [1, 3],
+    [0, 1],
+    [0, 3],
+    []
+];
+
+export const EdgesXZ = [
+    [],
+    [0, 8],
+    [0, 9],
+    [9, 8],
+    [9, 4],
+
+    [0, 9, 9, 4, 4, 8, 0, 8],
+
+    [0, 4],
+    [4, 8],
+    [4, 8],
+    [0, 4],
+
+    [0, 9, 9, 4, 4, 8, 0, 8],
+
+    [9, 4],
+    [9, 8],
+    [0, 9],
+    [0, 8],
+    []
+];
+
+export const EdgesYZ = [
+    [],
+    [3, 8],
+    [3, 11],
+    [11, 8],
+    [11, 7],
+
+    [3, 11, 11, 7, 7, 8, 3, 8],
+
+    [3, 7],
+    [7, 8],
+    [7, 8],
+    [3, 7],
+
+    [3, 11, 11, 7, 7, 8, 3, 8],
+
+    [11, 7],
+    [11, 8],
+    [3, 11],
+    [3, 8],
+    []
+];
+
+export const CubeVertices = [
+    Index(0, 0, 0), // a
+    Index(1, 0, 0), // b
+    Index(1, 1, 0), // c
+    Index(0, 1, 0), // d
+    Index(0, 0, 1), // e
+    Index(1, 0, 1), // f
+    Index(1, 1, 1), // g
+    Index(0, 1, 1), // h
+];
+
+export const CubeEdges = [
+    IndexPair(CubeVertices[0], CubeVertices[1]),
+    IndexPair(CubeVertices[1], CubeVertices[2]),
+    IndexPair(CubeVertices[2], CubeVertices[3]),
+    IndexPair(CubeVertices[3], CubeVertices[0]),
+
+    IndexPair(CubeVertices[4], CubeVertices[5]),
+    IndexPair(CubeVertices[5], CubeVertices[6]),
+    IndexPair(CubeVertices[6], CubeVertices[7]),
+    IndexPair(CubeVertices[7], CubeVertices[4]),
+
+    IndexPair(CubeVertices[0], CubeVertices[4]),
+    IndexPair(CubeVertices[1], CubeVertices[5]),
+    IndexPair(CubeVertices[2], CubeVertices[6]),
+    IndexPair(CubeVertices[3], CubeVertices[7]),
+];
+
+export const EdgeIdInfo = [
+    { i: 0, j: 0, k: 0, e: 0 },
+    { i: 1, j: 0, k: 0, e: 1 },
+    { i: 0, j: 1, k: 0, e: 0 },
+    { i: 0, j: 0, k: 0, e: 1 },
+
+    { i: 0, j: 0, k: 1, e: 0 },
+    { i: 1, j: 0, k: 1, e: 1 },
+    { i: 0, j: 1, k: 1, e: 0 },
+    { i: 0, j: 0, k: 1, e: 1 },
+
+    { i: 0, j: 0, k: 0, e: 2 },
+    { i: 1, j: 0, k: 0, e: 2 },
+    { i: 1, j: 1, k: 0, e: 2 },
+    { i: 0, j: 1, k: 0, e: 2 }
+];
+
+// Tables EdgeTable and TriTable taken from http://paulbourke.net/geometry/polygonise/
+export const EdgeTable = [
+    0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,
+    0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,
+    0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,
+    0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,
+    0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,
+    0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,
+    0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,
+    0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,
+    0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,
+    0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,
+    0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,
+    0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,
+    0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,
+    0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,
+    0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,
+    0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,
+    0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,
+    0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,
+    0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,
+    0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,
+    0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,
+    0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,
+    0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,
+    0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,
+    0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,
+    0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,
+    0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,
+    0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,
+    0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,
+    0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,
+    0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,
+    0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0
+];
+
+export const TriTable = [
+    [],
+    [0, 8, 3],
+    [0, 1, 9],
+    [1, 8, 3, 9, 8, 1],
+    [1, 2, 10],
+    [0, 8, 3, 1, 2, 10],
+    [9, 2, 10, 0, 2, 9],
+    [2, 8, 3, 2, 10, 8, 10, 9, 8],
+    [3, 11, 2],
+    [0, 11, 2, 8, 11, 0],
+    [1, 9, 0, 2, 3, 11],
+    [1, 11, 2, 1, 9, 11, 9, 8, 11],
+    [3, 10, 1, 11, 10, 3],
+    [0, 10, 1, 0, 8, 10, 8, 11, 10],
+    [3, 9, 0, 3, 11, 9, 11, 10, 9],
+    [9, 8, 10, 10, 8, 11],
+    [4, 7, 8],
+    [4, 3, 0, 7, 3, 4],
+    [0, 1, 9, 8, 4, 7],
+    [4, 1, 9, 4, 7, 1, 7, 3, 1],
+    [1, 2, 10, 8, 4, 7],
+    [3, 4, 7, 3, 0, 4, 1, 2, 10],
+    [9, 2, 10, 9, 0, 2, 8, 4, 7],
+    [2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4],
+    [8, 4, 7, 3, 11, 2],
+    [11, 4, 7, 11, 2, 4, 2, 0, 4],
+    [9, 0, 1, 8, 4, 7, 2, 3, 11],
+    [4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1],
+    [3, 10, 1, 3, 11, 10, 7, 8, 4],
+    [1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4],
+    [4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3],
+    [4, 7, 11, 4, 11, 9, 9, 11, 10],
+    [9, 5, 4],
+    [9, 5, 4, 0, 8, 3],
+    [0, 5, 4, 1, 5, 0],
+    [8, 5, 4, 8, 3, 5, 3, 1, 5],
+    [1, 2, 10, 9, 5, 4],
+    [3, 0, 8, 1, 2, 10, 4, 9, 5],
+    [5, 2, 10, 5, 4, 2, 4, 0, 2],
+    [2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8],
+    [9, 5, 4, 2, 3, 11],
+    [0, 11, 2, 0, 8, 11, 4, 9, 5],
+    [0, 5, 4, 0, 1, 5, 2, 3, 11],
+    [2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5],
+    [10, 3, 11, 10, 1, 3, 9, 5, 4],
+    [4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10],
+    [5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3],
+    [5, 4, 8, 5, 8, 10, 10, 8, 11],
+    [9, 7, 8, 5, 7, 9],
+    [9, 3, 0, 9, 5, 3, 5, 7, 3],
+    [0, 7, 8, 0, 1, 7, 1, 5, 7],
+    [1, 5, 3, 3, 5, 7],
+    [9, 7, 8, 9, 5, 7, 10, 1, 2],
+    [10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3],
+    [8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2],
+    [2, 10, 5, 2, 5, 3, 3, 5, 7],
+    [7, 9, 5, 7, 8, 9, 3, 11, 2],
+    [9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11],
+    [2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7],
+    [11, 2, 1, 11, 1, 7, 7, 1, 5],
+    [9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11],
+    [5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0],
+    [11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0],
+    [11, 10, 5, 7, 11, 5],
+    [10, 6, 5],
+    [0, 8, 3, 5, 10, 6],
+    [9, 0, 1, 5, 10, 6],
+    [1, 8, 3, 1, 9, 8, 5, 10, 6],
+    [1, 6, 5, 2, 6, 1],
+    [1, 6, 5, 1, 2, 6, 3, 0, 8],
+    [9, 6, 5, 9, 0, 6, 0, 2, 6],
+    [5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8],
+    [2, 3, 11, 10, 6, 5],
+    [11, 0, 8, 11, 2, 0, 10, 6, 5],
+    [0, 1, 9, 2, 3, 11, 5, 10, 6],
+    [5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11],
+    [6, 3, 11, 6, 5, 3, 5, 1, 3],
+    [0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6],
+    [3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9],
+    [6, 5, 9, 6, 9, 11, 11, 9, 8],
+    [5, 10, 6, 4, 7, 8],
+    [4, 3, 0, 4, 7, 3, 6, 5, 10],
+    [1, 9, 0, 5, 10, 6, 8, 4, 7],
+    [10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4],
+    [6, 1, 2, 6, 5, 1, 4, 7, 8],
+    [1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7],
+    [8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6],
+    [7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9],
+    [3, 11, 2, 7, 8, 4, 10, 6, 5],
+    [5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11],
+    [0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6],
+    [9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6],
+    [8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6],
+    [5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11],
+    [0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7],
+    [6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9],
+    [10, 4, 9, 6, 4, 10],
+    [4, 10, 6, 4, 9, 10, 0, 8, 3],
+    [10, 0, 1, 10, 6, 0, 6, 4, 0],
+    [8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10],
+    [1, 4, 9, 1, 2, 4, 2, 6, 4],
+    [3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4],
+    [0, 2, 4, 4, 2, 6],
+    [8, 3, 2, 8, 2, 4, 4, 2, 6],
+    [10, 4, 9, 10, 6, 4, 11, 2, 3],
+    [0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6],
+    [3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10],
+    [6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1],
+    [9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3],
+    [8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1],
+    [3, 11, 6, 3, 6, 0, 0, 6, 4],
+    [6, 4, 8, 11, 6, 8],
+    [7, 10, 6, 7, 8, 10, 8, 9, 10],
+    [0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10],
+    [10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0],
+    [10, 6, 7, 10, 7, 1, 1, 7, 3],
+    [1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7],
+    [2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9],
+    [7, 8, 0, 7, 0, 6, 6, 0, 2],
+    [7, 3, 2, 6, 7, 2],
+    [2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7],
+    [2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7],
+    [1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11],
+    [11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1],
+    [8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6],
+    [0, 9, 1, 11, 6, 7],
+    [7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0],
+    [7, 11, 6],
+    [7, 6, 11],
+    [3, 0, 8, 11, 7, 6],
+    [0, 1, 9, 11, 7, 6],
+    [8, 1, 9, 8, 3, 1, 11, 7, 6],
+    [10, 1, 2, 6, 11, 7],
+    [1, 2, 10, 3, 0, 8, 6, 11, 7],
+    [2, 9, 0, 2, 10, 9, 6, 11, 7],
+    [6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8],
+    [7, 2, 3, 6, 2, 7],
+    [7, 0, 8, 7, 6, 0, 6, 2, 0],
+    [2, 7, 6, 2, 3, 7, 0, 1, 9],
+    [1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6],
+    [10, 7, 6, 10, 1, 7, 1, 3, 7],
+    [10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8],
+    [0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7],
+    [7, 6, 10, 7, 10, 8, 8, 10, 9],
+    [6, 8, 4, 11, 8, 6],
+    [3, 6, 11, 3, 0, 6, 0, 4, 6],
+    [8, 6, 11, 8, 4, 6, 9, 0, 1],
+    [9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6],
+    [6, 8, 4, 6, 11, 8, 2, 10, 1],
+    [1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6],
+    [4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9],
+    [10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3],
+    [8, 2, 3, 8, 4, 2, 4, 6, 2],
+    [0, 4, 2, 4, 6, 2],
+    [1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8],
+    [1, 9, 4, 1, 4, 2, 2, 4, 6],
+    [8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1],
+    [10, 1, 0, 10, 0, 6, 6, 0, 4],
+    [4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3],
+    [10, 9, 4, 6, 10, 4],
+    [4, 9, 5, 7, 6, 11],
+    [0, 8, 3, 4, 9, 5, 11, 7, 6],
+    [5, 0, 1, 5, 4, 0, 7, 6, 11],
+    [11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5],
+    [9, 5, 4, 10, 1, 2, 7, 6, 11],
+    [6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5],
+    [7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2],
+    [3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6],
+    [7, 2, 3, 7, 6, 2, 5, 4, 9],
+    [9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7],
+    [3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0],
+    [6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8],
+    [9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7],
+    [1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4],
+    [4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10],
+    [7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10],
+    [6, 9, 5, 6, 11, 9, 11, 8, 9],
+    [3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5],
+    [0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11],
+    [6, 11, 3, 6, 3, 5, 5, 3, 1],
+    [1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6],
+    [0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10],
+    [11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5],
+    [6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3],
+    [5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2],
+    [9, 5, 6, 9, 6, 0, 0, 6, 2],
+    [1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8],
+    [1, 5, 6, 2, 1, 6],
+    [1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6],
+    [10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0],
+    [0, 3, 8, 5, 6, 10],
+    [10, 5, 6],
+    [11, 5, 10, 7, 5, 11],
+    [11, 5, 10, 11, 7, 5, 8, 3, 0],
+    [5, 11, 7, 5, 10, 11, 1, 9, 0],
+    [10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1],
+    [11, 1, 2, 11, 7, 1, 7, 5, 1],
+    [0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11],
+    [9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7],
+    [7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2],
+    [2, 5, 10, 2, 3, 5, 3, 7, 5],
+    [8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5],
+    [9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2],
+    [9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2],
+    [1, 3, 5, 3, 7, 5],
+    [0, 8, 7, 0, 7, 1, 1, 7, 5],
+    [9, 0, 3, 9, 3, 5, 5, 3, 7],
+    [9, 8, 7, 5, 9, 7],
+    [5, 8, 4, 5, 10, 8, 10, 11, 8],
+    [5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0],
+    [0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5],
+    [10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4],
+    [2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8],
+    [0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11],
+    [0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5],
+    [9, 4, 5, 2, 11, 3],
+    [2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4],
+    [5, 10, 2, 5, 2, 4, 4, 2, 0],
+    [3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9],
+    [5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2],
+    [8, 4, 5, 8, 5, 3, 3, 5, 1],
+    [0, 4, 5, 1, 0, 5],
+    [8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5],
+    [9, 4, 5],
+    [4, 11, 7, 4, 9, 11, 9, 10, 11],
+    [0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11],
+    [1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11],
+    [3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4],
+    [4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2],
+    [9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3],
+    [11, 7, 4, 11, 4, 2, 2, 4, 0],
+    [11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4],
+    [2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9],
+    [9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7],
+    [3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10],
+    [1, 10, 2, 8, 7, 4],
+    [4, 9, 1, 4, 1, 7, 7, 1, 3],
+    [4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1],
+    [4, 0, 3, 7, 4, 3],
+    [4, 8, 7],
+    [9, 10, 8, 10, 11, 8],
+    [3, 0, 9, 3, 9, 11, 11, 9, 10],
+    [0, 1, 10, 0, 10, 8, 8, 10, 11],
+    [3, 1, 10, 11, 3, 10],
+    [1, 2, 11, 1, 11, 9, 9, 11, 8],
+    [3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9],
+    [0, 2, 11, 8, 0, 11],
+    [3, 2, 11],
+    [2, 3, 8, 2, 8, 10, 10, 8, 9],
+    [9, 10, 2, 0, 9, 2],
+    [2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8],
+    [1, 10, 2],
+    [1, 3, 8, 9, 1, 8],
+    [0, 9, 1],
+    [0, 3, 8],
+    []
+];
\ No newline at end of file
diff --git a/src/mol-io/common/binary-cif/array-encoder.ts b/src/mol-io/common/binary-cif/array-encoder.ts
index 67a9084ca..d5c1e76a7 100644
--- a/src/mol-io/common/binary-cif/array-encoder.ts
+++ b/src/mol-io/common/binary-cif/array-encoder.ts
@@ -357,7 +357,7 @@ export namespace ArrayEncoding {
         let map: any = Object.create(null);
         let strings: string[] = [];
         let accLength = 0;
-        let offsets = ChunkedArray.create<number>(s => new Int32Array(s), 1, 1024, true)
+        let offsets = ChunkedArray.create<number>(s => new Int32Array(s), 1, 1024)
         let output = new Int32Array(data.length);
 
         ChunkedArray.add(offsets, 0);
diff --git a/src/perf-tests/chunked-array-vs-native.ts b/src/perf-tests/chunked-array-vs-native.ts
index e7843412a..7b620294f 100644
--- a/src/perf-tests/chunked-array-vs-native.ts
+++ b/src/perf-tests/chunked-array-vs-native.ts
@@ -8,13 +8,13 @@ function testNative(size: number) {
 }
 
 function testChunkedTyped(size: number, chunk: number, linear: boolean) {
-    const xs = ChunkedArray.create(s => new Int32Array(s), 1, chunk, linear);
+    const xs = ChunkedArray.create(s => new Int32Array(s), 1, chunk);
     for (let i = 0; i < size; i++) ChunkedArray.add(xs, i * i);
     return ChunkedArray.compact(xs);
 }
 
 function testChunkedNative(size: number, chunk: number) {
-    const xs = ChunkedArray.create(s => [], 1, chunk, false);
+    const xs = ChunkedArray.create(s => [], 1, chunk);
     for (let i = 0; i < size; i++) ChunkedArray.add(xs, i * i);
     return ChunkedArray.compact(xs);
 }
-- 
GitLab