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}