001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005 006/** 007 * 008 * @author jimmy 009 */ 010public class IrBoolChannel extends IrAbstractBool implements IrBoolExpr { 011 012 private final IrBoolExpr[] bools; 013 private final IrSetExpr set; 014 015 IrBoolChannel(IrBoolExpr[] bools, IrSetExpr set, IrBoolDomain domain) { 016 super(domain); 017 this.bools = Check.noNulls(bools); 018 this.set = Check.notNull(set); 019 } 020 021 public IrBoolExpr[] getBools() { 022 return bools; 023 } 024 025 public IrSetExpr getSet() { 026 return set; 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 IrBoolChannel) { 052 IrBoolChannel other = (IrBoolChannel) obj; 053 return Arrays.equals(bools, other.bools) && set.equals(other.set); 054 } 055 return false; 056 } 057 058 @Override 059 public int hashCode() { 060 return Arrays.hashCode(bools) ^ set.hashCode(); 061 } 062 063 @Override 064 public String toString() { 065 return "boolChannel(" + Arrays.toString(bools) + ", " + set + ")"; 066 } 067}