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