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