001package org.clafer.ir; 002 003import org.clafer.common.Check; 004 005/** 006 * 007 * @author jimmy 008 */ 009public class IrSetTernary extends IrAbstractSet { 010 011 private final IrBoolExpr antecedent; 012 private final IrSetExpr consequent; 013 private final IrSetExpr alternative; 014 015 public IrSetTernary(IrBoolExpr antecedent, IrSetExpr consequent, IrSetExpr alternative, IrDomain env, IrDomain ker, IrDomain card) { 016 super(env, ker, card); 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 IrSetExpr getConsequent() { 027 return consequent; 028 } 029 030 public IrSetExpr getAlternative() { 031 return alternative; 032 } 033 034 @Override 035 public <A, B> B accept(IrSetExprVisitor<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 IrSetTernary) { 042 IrSetTernary other = (IrSetTernary) 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}