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}