001package org.clafer.ir;
002
003import java.util.Arrays;
004import org.clafer.common.Check;
005
006/**
007 *
008 * @author jimmy
009 */
010public class IrCount extends IrAbstractInt {
011
012    private final int value;
013    private final IrIntExpr[] array;
014
015    public IrCount(int value, IrIntExpr[] array, IrDomain domain) {
016        super(domain);
017        this.array = Check.noNullsNotEmpty(array);
018        this.value = Check.notNull(value);
019}
020
021    public int getValue() {
022        return value;
023    }
024
025    public IrIntExpr[] getArray() {
026        return array;
027    }
028
029    @Override
030    public <A, B> B accept(IrIntExprVisitor<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 IrCount) {
037            IrCount other = (IrCount) obj;
038            return value == other.value && Arrays.equals(array, other.array)
039                    && super.equals(other);
040        }
041        return false;
042    }
043
044    @Override
045    public int hashCode() {
046        return value ^ Arrays.hashCode(array);
047    }
048
049    @Override
050    public String toString() {
051        return "count(" + value + " in " + Arrays.toString(array) + ")";
052    }
053}