001package org.clafer.ir;
002
003import org.clafer.common.Check;
004
005/**
006 *
007 * @author jimmy
008 */
009public abstract class IrAbstractInt implements IrIntExpr {
010
011    private final IrDomain domain;
012
013    public IrAbstractInt(IrDomain domain) {
014        this.domain = Check.notNull(domain);
015
016        if (domain.isEmpty()) {
017            throw new IllegalArgumentException();
018        }
019    }
020
021    /**
022     * {@inheritDoc}
023     */
024    @Override
025    public IrDomain getDomain() {
026        return domain;
027    }
028
029    @Override
030    public boolean equals(Object obj) {
031        if (obj instanceof IrAbstractInt) {
032            IrAbstractInt other = (IrAbstractInt) obj;
033            return domain.equals(other.domain);
034        }
035        return false;
036    }
037
038    @Override
039    public int hashCode() {
040        // Subclasses can choose not to callthis hashCode function since it can
041        // be expensive.
042        return domain.hashCode();
043    }
044}