001package org.clafer.ir;
002
003import org.clafer.common.Check;
004
005/**
006 *
007 * @author jimmy
008 */
009public class IrMinus extends IrAbstractInt {
010
011    private final IrIntExpr expr;
012
013    public IrMinus(IrIntExpr expr, IrDomain domain) {
014        super(domain);
015        this.expr = Check.notNull(expr);
016    }
017
018    public IrIntExpr getExpr() {
019        return expr;
020    }
021
022    @Override
023    public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) {
024        return visitor.visit(this, a);
025    }
026
027    @Override
028    public boolean equals(Object obj) {
029        if (obj instanceof IrMinus) {
030            IrMinus other = (IrMinus) obj;
031            return expr.equals(other.expr) && super.equals(other);
032        }
033        return false;
034    }
035
036    @Override
037    public int hashCode() {
038        return ~expr.hashCode();
039    }
040
041    @Override
042    public String toString() {
043        return "-(" + expr + ")";
044    }
045}