public BucketSet getBucketSet(BucketIdFactory factory) { Stack<BucketItem> buf = new Stack<>(); for (NodeItem item : items) { if (!buf.isEmpty()) { while (buf.peek().operator > item.operator) { combineBuckets(buf); } } buf.push(new BucketItem(item.operator, item.node.getBucketSet(factory))); } while (buf.size() > 1) { combineBuckets(buf); } return buf.pop().buckets; }
@Override public String toString() { StringBuilder ret = new StringBuilder(); for (LogicNode.NodeItem item : items) { if (item.operator != NOP) { ret.append(" ").append(operatorToString(item.operator)).append(" "); } ret.append(item.node); } return ret.toString(); }
private void pickOrdering(Stack<OrderingItem> buf) { OrderingItem rhs = buf.pop(); OrderingItem lhs = buf.pop(); switch (rhs.operator) { case AND: if (lhs.ordering == null) { lhs.ordering = rhs.ordering; } else if (rhs.ordering == null) { // empty } else { lhs.ordering = pickOrdering(lhs.ordering, rhs.ordering, true); } break; case OR: if (lhs.ordering != null && rhs.ordering != null) { lhs.ordering = pickOrdering(lhs.ordering, rhs.ordering, false); } else { lhs.ordering = null; } break; default: lhs.ordering = null; } buf.push(lhs); }
public void visit(LogicNode node) { if (state != null) { throw new IllegalArgumentException("Logic expressions not supported in now expressions"); } for (LogicNode.NodeItem item : node.getItems()) { item.getNode().accept(this); } }
/** * Adds an (operator, node) pair to this expression. * * @param operator The operator that combines the previous with the node given. * @param node The node to add to this. * @return This, to allow chaining. */ public LogicNode add(String operator, ExpressionNode node) { items.add(new LogicNode.NodeItem(stringToOperator(operator), node)); return this; }
@Override public Object evaluate(Context context) { Stack<ValueItem> buf = new Stack<>(); for (NodeItem item : items) { if ( ! buf.isEmpty()) { while (buf.peek().operator > item.operator) { combineValues(buf); } } buf.push(new ValueItem(item.operator, ResultList.toResultList(item.node.evaluate(context)))); } while (buf.size() > 1) { combineValues(buf); } return buf.pop().value; }
public void visit(LogicNode node) { for (LogicNode.NodeItem item : node.getItems()) { item.getNode().accept(this); } }
@Override public void visit(LogicNode logicNode) { for (LogicNode.NodeItem item : logicNode.getItems()) { item.getNode().accept(this); } }
public OrderingSpecification getOrdering(int order) { Stack<OrderingItem> buf = new Stack<>(); for (NodeItem item : items) { if (!buf.isEmpty()) { while (buf.peek().operator > item.operator) { pickOrdering(buf); } } buf.push(new OrderingItem(item.operator, item.node.getOrdering(order))); } while (buf.size() > 1) { pickOrdering(buf); } return buf.pop().ordering; }