Search in sources :

Example 1 with AndOp

use of uk.me.parabola.mkgmap.osmstyle.eval.AndOp in project mkgmap by openstreetmap.

the class ExpressionArranger method distribute.

/**
 * Create a new OR expression from OR and an other expression.
 *
 * Starting point is a node of the form (a|b|...) & c
 *
 * The output is (a & c) | (b & c) | ...
 */
private Op distribute(Op op) {
    Op ab = op.getFirst();
    Op a = ab.getFirst();
    Op b = ab.getSecond();
    Op c = op.getSecond();
    assert a != b : "ab";
    assert b != c : "bc";
    // Collect the OR terms into a list
    List<Op> orterms = new ArrayList<>();
    while (b.isType(OR)) {
        orterms.add(b.getFirst());
        b = b.getSecond();
    }
    OrOp topOR = new OrOp();
    topOR.setFirst(new AndOp().set(a, c));
    OrOp current = topOR;
    for (Op orterm : orterms) {
        AndOp and = new AndOp().set(orterm, c.copy());
        OrOp newOr = new OrOp().set(and, null);
        current.setSecond(newOr);
        current = newOr;
    }
    current.setSecond(new AndOp().set(b, c.copy()));
    return topOR;
}
Also used : NotExistsOp(uk.me.parabola.mkgmap.osmstyle.eval.NotExistsOp) AbstractOp(uk.me.parabola.mkgmap.osmstyle.eval.AbstractOp) Op(uk.me.parabola.mkgmap.osmstyle.eval.Op) GTEOp(uk.me.parabola.mkgmap.osmstyle.eval.GTEOp) ValueOp(uk.me.parabola.mkgmap.osmstyle.eval.ValueOp) LTEOp(uk.me.parabola.mkgmap.osmstyle.eval.LTEOp) LTOp(uk.me.parabola.mkgmap.osmstyle.eval.LTOp) NotEqualOp(uk.me.parabola.mkgmap.osmstyle.eval.NotEqualOp) EqualsOp(uk.me.parabola.mkgmap.osmstyle.eval.EqualsOp) RegexOp(uk.me.parabola.mkgmap.osmstyle.eval.RegexOp) ExistsOp(uk.me.parabola.mkgmap.osmstyle.eval.ExistsOp) BinaryOp(uk.me.parabola.mkgmap.osmstyle.eval.BinaryOp) GTOp(uk.me.parabola.mkgmap.osmstyle.eval.GTOp) NotRegexOp(uk.me.parabola.mkgmap.osmstyle.eval.NotRegexOp) OrOp(uk.me.parabola.mkgmap.osmstyle.eval.OrOp) AndOp(uk.me.parabola.mkgmap.osmstyle.eval.AndOp) LinkedOp(uk.me.parabola.mkgmap.osmstyle.eval.LinkedOp) OrOp(uk.me.parabola.mkgmap.osmstyle.eval.OrOp) ArrayList(java.util.ArrayList) AndOp(uk.me.parabola.mkgmap.osmstyle.eval.AndOp)

Aggregations

ArrayList (java.util.ArrayList)1 AbstractOp (uk.me.parabola.mkgmap.osmstyle.eval.AbstractOp)1 AndOp (uk.me.parabola.mkgmap.osmstyle.eval.AndOp)1 BinaryOp (uk.me.parabola.mkgmap.osmstyle.eval.BinaryOp)1 EqualsOp (uk.me.parabola.mkgmap.osmstyle.eval.EqualsOp)1 ExistsOp (uk.me.parabola.mkgmap.osmstyle.eval.ExistsOp)1 GTEOp (uk.me.parabola.mkgmap.osmstyle.eval.GTEOp)1 GTOp (uk.me.parabola.mkgmap.osmstyle.eval.GTOp)1 LTEOp (uk.me.parabola.mkgmap.osmstyle.eval.LTEOp)1 LTOp (uk.me.parabola.mkgmap.osmstyle.eval.LTOp)1 LinkedOp (uk.me.parabola.mkgmap.osmstyle.eval.LinkedOp)1 NotEqualOp (uk.me.parabola.mkgmap.osmstyle.eval.NotEqualOp)1 NotExistsOp (uk.me.parabola.mkgmap.osmstyle.eval.NotExistsOp)1 NotRegexOp (uk.me.parabola.mkgmap.osmstyle.eval.NotRegexOp)1 Op (uk.me.parabola.mkgmap.osmstyle.eval.Op)1 OrOp (uk.me.parabola.mkgmap.osmstyle.eval.OrOp)1 RegexOp (uk.me.parabola.mkgmap.osmstyle.eval.RegexOp)1 ValueOp (uk.me.parabola.mkgmap.osmstyle.eval.ValueOp)1