001package org.clafer.ast;
002
003import org.clafer.common.Check;
004
005/**
006 * Negate a boolean expression.
007 *
008 * @author jimmy
009 */
010public class AstNot implements AstBoolExpr {
011
012    private final AstBoolExpr expr;
013
014    AstNot(AstBoolExpr expr) {
015        this.expr = Check.notNull(expr);
016    }
017
018    /**
019     * Returns the expression to negated.
020     * 
021     * @return the expression to negate
022     */
023    public AstBoolExpr getExpr() {
024        return expr;
025    }
026
027    /**
028     * {@inheritDoc}
029     */
030    @Override
031    public <A, B> B accept(AstExprVisitor<A, B> visitor, A a) {
032        return visitor.visit(this, a);
033    }
034
035    /**
036     * {@inheritDoc}
037     */
038    @Override
039    public String toString() {
040        return "!(" + expr + ")";
041    }
042}