From 848ddb5f2b545c4364af5a08ea7f5627a5e147ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev>
Date: Sun, 28 Feb 2021 18:29:34 +0100
Subject: [PATCH] FIX: object-node distance type now owns the distance
 computation

---
 src/mhtree/ObjectToNodeDistance.java | 33 +++++++++++++++++++++++++---
 1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/mhtree/ObjectToNodeDistance.java b/src/mhtree/ObjectToNodeDistance.java
index f9430f2..734a72c 100644
--- a/src/mhtree/ObjectToNodeDistance.java
+++ b/src/mhtree/ObjectToNodeDistance.java
@@ -1,7 +1,34 @@
 package mhtree;
 
+import messif.objects.LocalAbstractObject;
+
 public enum ObjectToNodeDistance {
-    NEAREST_HULL_OBJECT,
-    FURTHEST_HULL_OBJECT,
-    AVERAGE_DISTANCE,
+    NEAREST_HULL_OBJECT {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .min()
+                    .orElse(Double.MAX_VALUE);
+        }
+    },
+    FURTHEST_HULL_OBJECT {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .max()
+                    .orElse(Double.MIN_VALUE);
+        }
+    },
+    AVERAGE_DISTANCE {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .sum() / node.getHullObjects().size();
+        }
+    };
+
+    public abstract double getDistance(LocalAbstractObject object, Node node);
 }
-- 
GitLab