001package org.clafer.ir; 002 003import org.clafer.common.Check; 004 005/** 006 * 007 * @author jimmy 008 */ 009public class IrSetDifference extends IrAbstractSet { 010 011 private final IrSetExpr minuend, subtrahend; 012 013 IrSetDifference(IrSetExpr minuend, IrSetExpr subtrahend, 014 IrDomain env, IrDomain ker, IrDomain card) { 015 super(env, ker, card); 016 this.minuend = Check.notNull(minuend); 017 this.subtrahend = Check.notNull(subtrahend); 018 } 019 020 public IrSetExpr getMinuend() { 021 return minuend; 022 } 023 024 public IrSetExpr getSubtrahend() { 025 return subtrahend; 026 } 027 028 @Override 029 public <A, B> B accept(IrSetExprVisitor<A, B> visitor, A a) { 030 return visitor.visit(this, a); 031 } 032 033 @Override 034 public boolean equals(Object obj) { 035 if (obj instanceof IrSetDifference) { 036 IrSetDifference other = (IrSetDifference) obj; 037 return minuend.equals(other.minuend) && subtrahend.equals(other.subtrahend) && super.equals(other); 038 } 039 return false; 040 } 041 042 @Override 043 public int hashCode() { 044 return 7 * minuend.hashCode() * subtrahend.hashCode(); 045 } 046 047 @Override 048 public String toString() { 049 return "(" + minuend + ") - (" + subtrahend + ")"; 050 } 051}