/** * Creates an atom expression for the specified primitive and 'value'. */ public Expr(Type op, int val) { setPrimitive(op, val); }
/** * Creates an atom expression for the specified primitive. */ public Expr(Type op) { setPrimitive(op); }
/** * Constructs an query bond from an expression type. * * <pre>{@code * new QueryBond(beg, end, IS_IN_RING); * }</pre> * * @param type the expression type */ public QueryBond(IAtom beg, IAtom end, Expr.Type type) { this(beg, end, null, IQueryBond.Stereo.NONE, beg.getBuilder()); this.expr.setPrimitive(type); atomCount = 2; }
/** * Constructs an query bond from an expression type and value. * * <pre>{@code * new QueryBond(beg, end, ALIPHATIC_ORDER, 8); * }</pre> * * @param type the expression type * @param val the expression value */ public QueryBond(IAtom beg, IAtom end, Expr.Type type, int val) { this(beg, end, null, IQueryBond.Stereo.NONE, beg.getBuilder()); this.expr.setPrimitive(type, val); atomCount = 2; }
case 5: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_DOUBLE); break; case 6: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_AROMATIC); break; case 7: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.DOUBLE_OR_AROMATIC); break; case 8: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.TRUE); break;
case 5: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_DOUBLE); break; case 6: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_AROMATIC); break; case 7: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.DOUBLE_OR_AROMATIC); break; case 8: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.TRUE); break;
private boolean parseRange(Expr expr) { if (next() != '{') return false; int lo = nextUnsignedInt(); if (next() != '-') return false; int hi = nextUnsignedInt(); Expr.Type type = expr.type(); // adjusted types switch (type) { case HAS_IMPLICIT_HYDROGEN: type = IMPL_H_COUNT; break; } expr.setPrimitive(type, lo); for (int i = lo + 1; i <= hi; i++) expr.or(new Expr(type, i)); return next() == '}'; }
/** * Traverse an expression tree and flip all the stereo expressions. */ void flip(Expr expr) { for (; ; ) { switch (expr.type()) { case STEREOCHEMISTRY: if (expr.value() != 0) expr.setPrimitive(expr.type(), expr.value() ^ 0x3); return; case AND: case OR: flip(expr.left()); expr = expr.right(); break; case NOT: expr = expr.left(); break; } } }
expr.setPrimitive(RING_COUNT, 0); if (!parseRange(expr)) return false; expr.setPrimitive(RING_SMALLEST, 0); if (!parseRange(expr)) return false; expr.setPrimitive(RING_BOND_COUNT, 0); if (!parseRange(expr)) return false;