package org.infinispan.objectfilter.impl.predicateindex.be; /** * Boolean expression tree representation. A tree is immutable and could be shared by multiple filters. * * @author anistor@redhat.com * @since 7.0 */ public final class BETree { // Values 0 and -1 in the copy of childCounters used during evaluation are boolean, anything > 0 is undecided yet public static final int EXPR_TRUE = 0; public static final int EXPR_FALSE = -1; /** * The tree is represented by the array of its nodes listed in pre-order, thus the first node is always the root. A * valid tree must be non-empty. */ private final BENode[] nodes; /** * The number of direct children of each node. This array is not mutated. A copy of it is made during evaluation. * When evaluating the tree the number of children is decremented every time a child is found to have a definite * value. If the counter becomes 0 then the node is considered satisfied (TRUE). If during evaluation we find a node * to be unsatisfied we mark it and all children with -1 (FALSE). */ private final int[] childCounters; public BETree(BENode[] nodes, int[] childCounters) { this.nodes = nodes; this.childCounters = childCounters; } public BENode[] getNodes() { return nodes; } public int[] getChildCounters() { return childCounters; } }