001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005import org.clafer.common.Util; 006 007/** 008 * 009 * @author jimmy 010 */ 011public class IrArrayToSet extends IrAbstractSet { 012 013 private final IrIntExpr[] array; 014 private final Integer globalCardinality; 015 016 IrArrayToSet(IrIntExpr[] array, IrDomain env, IrDomain ker, IrDomain card, Integer globalCardinality) { 017 super(env, ker, card); 018 this.array = Check.noNullsNotEmpty(array); 019 if (ker.size() > array.length) { 020 throw new IllegalArgumentException(); 021 } 022 this.globalCardinality = globalCardinality; 023 } 024 025 public IrIntExpr[] getArray() { 026 return array; 027 } 028 029 public boolean hasGlobalCardinality() { 030 return globalCardinality != null; 031 } 032 033 public Integer getGlobalCardinality() { 034 return globalCardinality; 035 } 036 037 @Override 038 public <A, B> B accept(IrSetExprVisitor<A, B> visitor, A a) { 039 return visitor.visit(this, a); 040 } 041 042 @Override 043 public boolean equals(Object obj) { 044 if (obj instanceof IrArrayToSet) { 045 IrArrayToSet other = (IrArrayToSet) obj; 046 return Arrays.equals(array, other.array) && Util.equals(globalCardinality, other.globalCardinality) && super.equals(other); 047 } 048 return false; 049 } 050 051 @Override 052 public int hashCode() { 053 return Arrays.hashCode(array) ^ Util.hashCode(globalCardinality); 054 } 055 056 @Override 057 public String toString() { 058 return '{' + Util.commaSeparate(array) 059 + (hasGlobalCardinality() ? " with global cardinality " + getGlobalCardinality() : "") 060 + '}'; 061 } 062}