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