001package org.clafer.ir; 002 003import org.clafer.common.Check; 004 005/** 006 * dividend / divisor 007 * 008 * @author jimmy 009 */ 010public class IrDiv extends IrAbstractInt { 011 012 /** 013 * Division is internally represented as a binary operation unlike 014 * addition and subtraction. The reason is that this makes optimizing for 015 * Choco easier. 016 */ 017 private final IrIntExpr dividend, divisor; 018 019 IrDiv(IrIntExpr dividend, IrIntExpr divisor, IrDomain domain) { 020 super(domain); 021 this.dividend = Check.notNull(dividend); 022 this.divisor = Check.notNull(divisor); 023 } 024 025 public IrIntExpr getDividend() { 026 return dividend; 027 } 028 029 public IrIntExpr getDivisor() { 030 return divisor; 031 } 032 033 @Override 034 public <A, B> B accept(IrIntExprVisitor< A, B> visitor, A a) { 035 return visitor.visit(this, a); 036 } 037 038 @Override 039 public boolean equals(Object obj) { 040 if (obj instanceof IrDiv) { 041 IrDiv other = (IrDiv) obj; 042 return dividend.equals(other.dividend) && divisor.equals(other.divisor); 043 } 044 return false; 045 } 046 047 @Override 048 public int hashCode() { 049 return dividend.hashCode() ^ divisor.hashCode(); 050 } 051 052 @Override 053 public String toString() { 054 return "(" + dividend + ") / (" + divisor + ")"; 055 } 056}