diff --git a/src/mhtree/NodeToNodeDistance.java b/src/mhtree/NodeToNodeDistance.java index 391d9a1778d4a065182111699d9f279bcbccdaf4..762f1c50765283a441c950819d14738b7735cdbf 100644 --- a/src/mhtree/NodeToNodeDistance.java +++ b/src/mhtree/NodeToNodeDistance.java @@ -1,6 +1,28 @@ package mhtree; +import messif.objects.LocalAbstractObject; + +import java.util.function.BiFunction; + public enum NodeToNodeDistance { - NEAREST_HULL_OBJECTS, - FURTHEST_HULL_OBJECTS, + NEAREST_HULL_OBJECTS(Math::min, Float.MAX_VALUE), + FURTHEST_HULL_OBJECTS(Math::max, Float.MIN_VALUE); + + private final BiFunction<Float, Float, Float> compareFunction; + private final float defaultValue; + + NodeToNodeDistance(final BiFunction<Float, Float, Float> compareFunction, final float defaultValue) { + this.compareFunction = compareFunction; + this.defaultValue = defaultValue; + } + + public float getDistance(Node node1, Node node2, BiFunction<LocalAbstractObject, LocalAbstractObject, Float> getDistance) { + float distance = defaultValue; + + for (LocalAbstractObject firstHullObject : node1.getHullObjects()) + for (LocalAbstractObject secondHullObject : node2.getHullObjects()) + distance = compareFunction.apply(distance, getDistance.apply(firstHullObject, secondHullObject)); + + return distance; + } }