001package org.clafer.ir; 002 003import org.clafer.common.Check; 004 005/** 006 * 007 * @author jimmy 008 */ 009public class IrNot extends IrAbstractBool implements IrBoolExpr { 010 011 private final IrBoolExpr expr; 012 013 public IrNot(IrBoolExpr expr, IrBoolDomain domain) { 014 super(domain); 015 this.expr = Check.notNull(expr); 016 } 017 018 public IrBoolExpr getExpr() { 019 return expr; 020 } 021 022 @Override 023 public IrBoolExpr negate() { 024 return expr; 025 } 026 027 @Override 028 public boolean isNegative() { 029 return true; 030 } 031 032 @Override 033 public <A, B> B accept(IrBoolExprVisitor<A, B> visitor, A a) { 034 return visitor.visit(this, a); 035 } 036 037 @Override 038 public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) { 039 return visitor.visit(this, a); 040 } 041 042 @Override 043 public boolean equals(Object obj) { 044 if (obj instanceof IrNot) { 045 IrNot other = (IrNot) obj; 046 return expr.equals(other.expr) && super.equals(other); 047 } 048 return false; 049 } 050 051 @Override 052 public int hashCode() { 053 return ~expr.hashCode(); 054 } 055 056 @Override 057 public String toString() { 058 return "!(" + expr + ")"; 059 } 060}