From c4f7dd86a15fd13b56ffba1f621a4b414fec61d5 Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Tue, 31 Jul 2018 23:26:40 +0200
Subject: [PATCH] Compute UnitRings.byFingerprint lazily

---
 .../structure/structure/unit/rings.ts         | 23 +++++++++++--------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/mol-model/structure/structure/unit/rings.ts b/src/mol-model/structure/structure/unit/rings.ts
index b7e179433..0d5437773 100644
--- a/src/mol-model/structure/structure/unit/rings.ts
+++ b/src/mol-model/structure/structure/unit/rings.ts
@@ -41,20 +41,23 @@ namespace UnitRings {
 
     export function create(unit: Unit.Atomic): UnitRings {
         const rings = computeRings(unit);
-        const byFingerprint = new Map<string, Index[]>();
-
-        let idx = 0 as Index;
-        for (const r of rings) {
-            const fp = getRingFingerprint(unit, r);
-            if (byFingerprint.has(fp)) byFingerprint.get(fp)!.push(idx);
-            else byFingerprint.set(fp, [idx]);
-            idx++;
-        }
 
+        let _byFingerprint: Map<string, Index[]> | undefined = void 0;
         let _index: UnitRings['index'] | undefined = void 0;
         return {
             all: rings,
-            byFingerprint,
+            get byFingerprint() {
+                if (_byFingerprint) return _byFingerprint;
+                _byFingerprint = new Map();
+                let idx = 0 as Index;
+                for (const r of rings) {
+                    const fp = getRingFingerprint(unit, r);
+                    if (_byFingerprint.has(fp)) _byFingerprint.get(fp)!.push(idx);
+                    else _byFingerprint.set(fp, [idx]);
+                    idx++;
+                }
+                return _byFingerprint;
+            },
             get index() {
                 if (_index) return _index;
                 _index = createIndex(rings);
-- 
GitLab