diff --git a/src/mhtree/InternalNode.java b/src/mhtree/InternalNode.java index b4c70d75333904ac77d4e9a4d994af5350fb1974..887500605c0e1d6c71df07a83d7d88e3fd54037c 100644 --- a/src/mhtree/InternalNode.java +++ b/src/mhtree/InternalNode.java @@ -1,9 +1,11 @@ package mhtree; +import messif.buckets.BucketStorageException; import messif.objects.LocalAbstractObject; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -38,6 +40,15 @@ public class InternalNode extends Node implements Serializable { } public void addObject(LocalAbstractObject object) { + if (isCovered(object)) return; + rebuildHull(object); } + + public List<LocalAbstractObject> getObjects() { + return children.stream() + .map(Node::getObjects) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } } diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java index 5e471973e27683a0772475ac903eb06b1d8d483b..796fd00d604725b61dc9db5f56a0bf97fbe35077 100644 --- a/src/mhtree/LeafNode.java +++ b/src/mhtree/LeafNode.java @@ -4,8 +4,10 @@ import cz.muni.fi.disa.similarityoperators.cover.AbstractRepresentation; import messif.buckets.BucketStorageException; import messif.buckets.LocalBucket; import messif.objects.LocalAbstractObject; +import messif.objects.util.AbstractObjectIterator; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; public class LeafNode extends Node implements Serializable { @@ -34,4 +36,13 @@ public class LeafNode extends Node implements Serializable { rebuildHull(object); } + + public List<LocalAbstractObject> getObjects() { + List<LocalAbstractObject> objects = new ArrayList<>(); + + for (AbstractObjectIterator<LocalAbstractObject> it = bucket.getAllObjects(); it.hasNext(); ) + objects.add(it.next()); + + return objects; + } } diff --git a/src/mhtree/MHTree.java b/src/mhtree/MHTree.java index 038022534995e7175b93bee83ad239e56a761152..23865fca099a570f21ce514cb2ab505f901fecc9 100644 --- a/src/mhtree/MHTree.java +++ b/src/mhtree/MHTree.java @@ -75,8 +75,7 @@ public class MHTree extends Algorithm implements Serializable { Node currentNode = root; while (!currentNode.isLeaf()) { - if (!currentNode.isCovered(object)) - currentNode.addObject(object); + currentNode.addObject(object); currentNode = ((InternalNode) currentNode).getNearestChild(object); } diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java index 333055ffc3d1e829c2c554c5fe35e7c6d1befa1e..71eb2246104c08e2b5e109e08ec93f988ea08964 100644 --- a/src/mhtree/Node.java +++ b/src/mhtree/Node.java @@ -63,16 +63,13 @@ public abstract class Node implements Serializable { return hull.getHull(); } - public List<LocalAbstractObject> getObjects() { - return hull.getObjects(); - } - @Override public String toString() { return "Node{hull=" + hull + '}'; } public abstract void addObject(LocalAbstractObject object) throws BucketStorageException; + public abstract List<LocalAbstractObject> getObjects(); protected void rebuildHull(LocalAbstractObject object) { List<LocalAbstractObject> objects = new ArrayList<>(getObjects());