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}