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}