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}