001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005import org.clafer.common.Util; 006 007/** 008 * offset + foldl (+) addends 009 * 010 * @author jimmy 011 */ 012public class IrAdd extends IrAbstractInt { 013 014 private final IrIntExpr[] addends; 015 private final int offset; 016 017 IrAdd(IrIntExpr[] addends, int offset, IrDomain domain) { 018 super(domain); 019 this.addends = Check.noNullsNotEmpty(addends); 020 this.offset = offset; 021 } 022 023 public IrIntExpr[] getAddends() { 024 return addends; 025 } 026 027 public int getOffset() { 028 return offset; 029 } 030 031 @Override 032 public <A, B> B accept(IrIntExprVisitor< A, B> visitor, A a) { 033 return visitor.visit(this, a); 034 } 035 036 @Override 037 public boolean equals(Object obj) { 038 if (obj instanceof IrAdd) { 039 IrAdd other = (IrAdd) obj; 040 return Arrays.equals(addends, other.addends) && offset == other.offset && super.equals(other); 041 } 042 return false; 043 } 044 045 @Override 046 public int hashCode() { 047 return Arrays.hashCode(addends) ^ offset; 048 } 049 050 @Override 051 public String toString() { 052 return "(" + Util.intercalate(") + (", getAddends()) + ")" + (offset == 0 ? "" : " + " 053 + offset); 054 } 055}