001package org.clafer.ir;
002
003import java.util.Arrays;
004import org.clafer.common.Check;
005
006/**
007 *
008 * @author jimmy
009 */
010public class IrSortSets extends IrAbstractBool implements IrBoolExpr {
011
012    private final IrSetExpr[] sets;
013
014    public IrSortSets(IrSetExpr[] sets, IrBoolDomain domain) {
015        super(domain);
016        this.sets = Check.noNullsNotEmpty(sets);
017    }
018
019    public IrSetExpr[] getSets() {
020        return sets;
021    }
022
023    @Override
024    public IrBoolExpr negate() {
025        return new IrNot(this, getDomain().invert());
026    }
027
028    @Override
029    public boolean isNegative() {
030        return false;
031    }
032
033    @Override
034    public <A, B> B accept(IrBoolExprVisitor<A, B> visitor, A a) {
035        return visitor.visit(this, a);
036    }
037
038    @Override
039    public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) {
040        return visitor.visit(this, a);
041    }
042
043    @Override
044    public boolean equals(Object obj) {
045        if (obj instanceof IrSortSets) {
046            IrSortSets other = (IrSortSets) obj;
047            return Arrays.deepEquals(sets, other.sets);
048        }
049        return false;
050    }
051
052    @Override
053    public int hashCode() {
054        return Arrays.deepHashCode(sets);
055    }
056}