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