@Override public SearchArgument build() { if (currentTree.size() != 1) { throw new IllegalArgumentException("Failed to end " + currentTree.size() + " operations."); } ExpressionTree optimized = pushDownNot(root); optimized = foldMaybe(optimized); optimized = flatten(optimized); optimized = convertToCNF(optimized); optimized = flatten(optimized); int leafReorder[] = new int[leaves.size()]; Arrays.fill(leafReorder, -1); int newLeafCount = compactLeaves(optimized, 0, leafReorder); optimized = rewriteLeaves(optimized, leafReorder); ArrayList<PredicateLeaf> leafList = new ArrayList<>(newLeafCount); // expand list to correct size for(int i=0; i < newLeafCount; ++i) { leafList.add(null); } // build the new list for(Map.Entry<PredicateLeaf, Integer> elem: leaves.entrySet()) { int newLoc = leafReorder[elem.getValue()]; if (newLoc != -1) { leafList.set(newLoc, elem.getKey()); } } return new SearchArgumentImpl(optimized, leafList); }
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(0, leaves.size()); sarg.getExpression().toString()); assertEquals(TruthValue.YES_NO_NULL, sarg.evaluate(values()));
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(0, leaves.size()); sarg.getExpression().toString());
public static Builder newBuilder() { return SearchArgumentImpl.newBuilder(); }
public static SearchArgument create(String kryo) { return SearchArgumentImpl.fromKryo(kryo); }
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(1, leaves.size()); sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet());
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(1, leaves.size()); sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet()); assertEquals(TruthValue.NO, sarg.evaluate(values(TruthValue.YES))); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.NO))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NULL))); assertEquals(TruthValue.NO_NULL, sarg.evaluate(values(TruthValue.YES_NULL))); assertEquals(TruthValue.YES_NULL, sarg.evaluate(values(TruthValue.NO_NULL))); assertEquals(TruthValue.YES_NO, sarg.evaluate(values(TruthValue.YES_NO))); assertEquals(TruthValue.YES_NO_NULL, sarg.evaluate(values(TruthValue.YES_NO_NULL)));
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(3, leaves.size()); sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet());
public static SearchArgument create(ExprNodeGenericFuncDesc expression) { return new SearchArgumentImpl(expression); }
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(4, leaves.size()); sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet()); assertEquals(TruthValue.NO, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.YES, TruthValue.YES, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.NO, TruthValue.NO, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.NO, TruthValue.NO))); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.YES, TruthValue.YES))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NULL, TruthValue.YES, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NO, TruthValue.NULL, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.NULL,
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(9, leaves.size()); " (or leaf-0 (not leaf-1) leaf-2 (not leaf-3)" + " (not leaf-4) leaf-5 leaf-6 leaf-8))", sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet());
@Override public SearchArgument build() { if (currentTree.size() != 0) { throw new IllegalArgumentException("Failed to end " + currentTree.size() + " operations."); } ExpressionBuilder internal = new ExpressionBuilder(); ExpressionTree normalized = internal.expression(root, leaves); return new SearchArgumentImpl(normalized, internal.getLeaves()); } }
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(3, leaves.size()); sarg.getExpression().toString()); assertNoSharedNodes(sarg.getExpression(), Sets.<ExpressionTree>newIdentityHashSet()); assertEquals(TruthValue.YES, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.YES))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NULL, TruthValue.YES, TruthValue.YES))); assertEquals(TruthValue.NULL, sarg.evaluate(values(TruthValue.NO, TruthValue.NULL, TruthValue.YES))); assertEquals(TruthValue.NO, sarg.evaluate(values(TruthValue.YES, TruthValue.YES, TruthValue.YES))); assertEquals(TruthValue.NO, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.NO))); assertEquals(TruthValue.NO, sarg.evaluate(values(TruthValue.NO, TruthValue.YES_NULL, TruthValue.NO))); assertEquals(TruthValue.NO_NULL, sarg.evaluate(values(TruthValue.NO, TruthValue.NULL, TruthValue.YES_NO_NULL))); assertEquals(TruthValue.NO_NULL, sarg.evaluate(values(TruthValue.NO, TruthValue.YES, TruthValue.NO_NULL)));
List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(9, leaves.size()); " (or leaf-0 leaf-4 leaf-7 leaf-8)" + " (or leaf-0 leaf-5 leaf-7 leaf-8))", sarg.getExpression().toString());
@Override public SearchArgument build() { if (currentTree.size() != 1) { throw new IllegalArgumentException("Failed to end " + currentTree.size() + " operations."); } ExpressionTree optimized = pushDownNot(root); optimized = foldMaybe(optimized); optimized = flatten(optimized); optimized = convertToCNF(optimized); optimized = flatten(optimized); int leafReorder[] = new int[leaves.size()]; Arrays.fill(leafReorder, -1); int newLeafCount = compactLeaves(optimized, 0, leafReorder); optimized = rewriteLeaves(optimized, leafReorder); ArrayList<PredicateLeaf> leafList = new ArrayList<>(newLeafCount); // expand list to correct size for(int i=0; i < newLeafCount; ++i) { leafList.add(null); } // build the new list for(Map.Entry<PredicateLeaf, Integer> elem: leaves.entrySet()) { int newLoc = leafReorder[elem.getValue()]; if (newLoc != -1) { leafList.set(newLoc, elem.getKey()); } } return new SearchArgumentImpl(optimized, leafList); }