case DEGREE: sb.append('D'); if (expr.value() != 1) sb.append(expr.value()); break; case TOTAL_H_COUNT: sb.append('H'); sb.append(expr.value()); break; case HAS_IMPLICIT_HYDROGEN: break; case IMPL_H_COUNT: sb.append('h').append(expr.value()); break; case VALENCE: sb.append('v'); if (expr.value() != 1) sb.append(expr.value()); break; case TOTAL_DEGREE: sb.append('X'); if (expr.value() != 1) sb.append(expr.value()); break; case FORMAL_CHARGE: if (expr.value() == -1) sb.append('-'); else if (expr.value() == +1)
/** * 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; } } }
boolean hasAliphaticDoubleBond(Expr expr) { for (; ; ) { switch (expr.type()) { case NOT: expr = expr.left(); break; case AND: case OR: if (hasAliphaticDoubleBond(expr.left())) return true; expr = expr.right(); break; case ALIPHATIC_ORDER: return expr.value() == 2; default: return false; } } }
.warn("Expr.Type.ORDER cannot be round-tripped via SMARTS!"); case ALIPHATIC_ORDER: switch (expr.value()) { case 1: sb.append('-');
case ALIPHATIC_ORDER: case ORDER: bondType = e.value(); break; case IS_AROMATIC:
case ALIPHATIC_ORDER: case ORDER: bondType = e.value(); break; case IS_AROMATIC:
private static int getBondStereoFlag(Expr expr) { switch (expr.type()) { case STEREOCHEMISTRY: switch (expr.value()) { case 0: return BSTEREO_UNSPEC; case IStereoElement.TOGETHER: return BSTEREO_CIS; case IStereoElement.OPPOSITE: return BSTEREO_TRANS; default: throw new IllegalArgumentException(); } case OR: return getBondStereoFlag(expr.left()) | getBondStereoFlag(expr.right()); case AND: return getBondStereoFlag(expr.left()) & getBondStereoFlag(expr.right()); case NOT: return ~getBondStereoFlag(expr.left()); default: return BSTEREO_ANY; } }
private static boolean hasOr(Expr expr) { for (; ; ) { switch (expr.type()) { case AND: if (hasOr(expr.left())) return true; expr = expr.right(); break; case OR: return expr.left().type() != STEREOCHEMISTRY || expr.right().type() != STEREOCHEMISTRY || expr.right().value() != 0; case SINGLE_OR_AROMATIC: case SINGLE_OR_DOUBLE: case DOUBLE_OR_AROMATIC: return true; default: return false; } } }