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