diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/QueryTree.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/QueryTree.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/QueryTree.java b/container-search/src/main/java/com/yahoo/search/query/QueryTree.java index 2fb16ef503f..dab481dc842 100644 --- a/container-search/src/main/java/com/yahoo/search/query/QueryTree.java +++ b/container-search/src/main/java/com/yahoo/search/query/QueryTree.java @@ -7,6 +7,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.ListIterator; /** * The root node of a query tree. This is always present above the actual semantic root to ease query manipulation, @@ -179,4 +180,23 @@ public class QueryTree extends CompositeItem { } } + /** + * @return The total number of items in this query tree + */ + public int getTreeSize() { + if (isEmpty()) return 0; + return(countItemsRecursively(getItemIterator().next())); + } + + private int countItemsRecursively(Item item) { + int children = 0; + if (item instanceof CompositeItem) { + CompositeItem composite = (CompositeItem)item; + for (ListIterator<Item> i = composite.getItemIterator(); i.hasNext(); ) { + children += countItemsRecursively(i.next()); + } + } + return children + 1; + } + } |