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