001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005 006/** 007 * 008 * @author jimmy 009 */ 010public class IrSelectN extends IrAbstractBool implements IrBoolExpr { 011 012 private final IrBoolExpr[] bools; 013 private final IrIntExpr n; 014 015 IrSelectN(IrBoolExpr[] bools, IrIntExpr n, IrBoolDomain domain) { 016 super(domain); 017 this.bools = Check.noNulls(bools); 018 this.n = Check.notNull(n); 019 } 020 021 public IrBoolExpr[] getBools() { 022 return bools; 023 } 024 025 public IrIntExpr getN() { 026 return n; 027 } 028 029 @Override 030 public boolean isNegative() { 031 return false; 032 } 033 034 @Override 035 public IrBoolExpr negate() { 036 return new IrNot(this, getDomain().invert()); 037 } 038 039 @Override 040 public <A, B> B accept(IrBoolExprVisitor<A, B> visitor, A a) { 041 return visitor.visit(this, a); 042 } 043 044 @Override 045 public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) { 046 return visitor.visit(this, a); 047 } 048 049 @Override 050 public boolean equals(Object obj) { 051 if (obj instanceof IrSelectN) { 052 IrSelectN other = (IrSelectN) obj; 053 return Arrays.equals(bools, other.bools) && n.equals(other.n); 054 } 055 return false; 056 } 057 058 @Override 059 public int hashCode() { 060 return Arrays.hashCode(bools) ^ n.hashCode(); 061 } 062 063 @Override 064 public String toString() { 065 return "selectN(" + Arrays.toString(bools) + ", " + n + ")"; 066 } 067}