From fc44445264646f83b5f40b0d2f2459ec8997d1df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev>
Date: Wed, 21 Apr 2021 17:22:31 +0200
Subject: [PATCH] ADD: an incremental version is now done by building the hull
 on hull objects

---
 src/mhtree/LeafNode.java |  7 +-----
 src/mhtree/Node.java     | 46 +++++++++++++++++-----------------------
 2 files changed, 21 insertions(+), 32 deletions(-)

diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java
index 1415df4..ff267de 100644
--- a/src/mhtree/LeafNode.java
+++ b/src/mhtree/LeafNode.java
@@ -39,13 +39,8 @@ public class LeafNode extends Node implements Serializable {
      * @throws BucketStorageException addition of object into bucket exception
      */
     protected void addObject(LocalAbstractObject object) throws BucketStorageException {
-        addObject(object, null);
-    }
-
-    protected void addObject(LocalAbstractObject object, PrecomputedDistances distances) throws BucketStorageException {
         bucket.addObject(object);
-
-        addObjectIntoHull(object, distances);
+        addObjectIntoHull(object);
     }
 
     /**
diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java
index 600e80f..95cf35c 100644
--- a/src/mhtree/Node.java
+++ b/src/mhtree/Node.java
@@ -6,7 +6,6 @@ import messif.buckets.BucketStorageException;
 import messif.objects.LocalAbstractObject;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -94,18 +93,18 @@ public abstract class Node implements Serializable {
     }
 
     protected void addObjectIntoHull(LocalAbstractObject object) {
-        addObjectIntoHull(object, null);
-    }
-
-    protected void addObjectIntoHull(LocalAbstractObject object, PrecomputedDistances distances) {
-        if (isCovered(object, distances)) return;
-
-        if (insertType == InsertType.INCREMENTAL) {
-            hull.addHullObject(object);
-            return;
+        if (isCovered(object)) return;
+
+        switch (insertType) {
+            case GREEDY:
+                insertGreedy(object);
+                break;
+            case INCREMENTAL:
+                insertIncremental(object);
+                break;
+            default:
+                throw new IllegalStateException("Unexpected value: " + insertType);
         }
-
-        rebuildHull(object, distances);
     }
 
     protected abstract void addObject(LocalAbstractObject object) throws BucketStorageException;
@@ -118,24 +117,19 @@ public abstract class Node implements Serializable {
 
     protected abstract void gatherLeafNodes(List<LeafNode> leafNodes);
 
-    private void rebuildHull(LocalAbstractObject object, PrecomputedDistances distances) {
-        List<LocalAbstractObject> objects = new ArrayList<>(getObjects());
-        objects.add(object);
-
-        if (distances == null) {
-            hull = new HullOptimizedRepresentationV3(objects);
-        } else {
-            hull = new HullOptimizedRepresentationV3(distances.getSubset(objects));
-        }
+    private void insertGreedy(LocalAbstractObject object) {
+        List<LocalAbstractObject> objectsFromLeafNodes = getObjects();
+        objectsFromLeafNodes.add(object);
 
+        hull = new HullOptimizedRepresentationV3(objectsFromLeafNodes);
         hull.build();
     }
 
-    private boolean isCovered(LocalAbstractObject object, PrecomputedDistances distances) {
-        if (distances == null) {
-            return hull.isExternalCovered(object);
-        }
+    private void insertIncremental(LocalAbstractObject object) {
+        List<LocalAbstractObject> hullObjects = hull.getHull();
+        hullObjects.add(object);
 
-        return hull.isExternalCovered(object, distances);
+        hull = new HullOptimizedRepresentationV3(hullObjects);
+        hull.build();
     }
 }
-- 
GitLab