summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/QueryTree.java
diff options
context:
space:
mode:
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.java20
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;
+ }
+
}