From 3bfe1feabaf755a40c4083effcffe9ea48dc731b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev> Date: Fri, 15 Jan 2021 08:46:49 +0100 Subject: [PATCH] ADD: objects are retrieved from LocalBucket --- src/mhtree/InternalNode.java | 11 +++++++++++ src/mhtree/LeafNode.java | 11 +++++++++++ src/mhtree/MHTree.java | 3 +-- src/mhtree/Node.java | 5 +---- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/mhtree/InternalNode.java b/src/mhtree/InternalNode.java index b4c70d7..8875006 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 5e47197..796fd00 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 0380225..23865fc 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 333055f..71eb224 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()); -- GitLab