package janala.interpreters; import java.util.Map; public class SymbolicNotConstraint extends Constraint { private final Constraint constraint; public Constraint getConstraint() { return constraint; } public SymbolicNotConstraint(Constraint c) { constraint = c; } @Override public void accept(ConstraintVisitor v) { v.visitSymbolicNot(this); } @Override public Constraint not() { return constraint; } @Override public Constraint substitute(Map<String, Long> assignments) { Constraint constraint = this.constraint.substitute(assignments); if (constraint == SymbolicTrueConstraint.instance) { return SymbolicFalseConstraint.instance; } else if (constraint == SymbolicFalseConstraint.instance) { return SymbolicTrueConstraint.instance; } else if (constraint == this.constraint) { return this; } else { return new SymbolicNotConstraint(constraint); } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(" ! "); sb.append(constraint); return sb.toString(); } }