001package org.clafer.ir;
002
003import java.util.Arrays;
004import org.clafer.common.Check;
005import org.clafer.common.Util;
006
007/**
008 *
009 * @author jimmy
010 */
011public class IrSetIntersection extends IrAbstractSet {
012
013    private final IrSetExpr[] operands;
014
015    IrSetIntersection(IrSetExpr[] operands, IrDomain env, IrDomain ker, IrDomain card) {
016        super(env, ker, card);
017        this.operands = Check.noNullsNotEmpty(operands);
018    }
019
020    public IrSetExpr[] getOperands() {
021        return operands;
022    }
023
024    @Override
025    public <A, B> B accept(IrSetExprVisitor<A, B> visitor, A a) {
026        return visitor.visit(this, a);
027    }
028
029    @Override
030    public boolean equals(Object obj) {
031        if (obj instanceof IrSetIntersection) {
032            IrSetIntersection other = (IrSetIntersection) obj;
033            return Arrays.equals(operands, other.operands) && super.equals(other);
034        }
035        return false;
036    }
037
038    @Override
039    public int hashCode() {
040        return 3 * Arrays.hashCode(operands);
041    }
042
043    @Override
044    public String toString() {
045        return "(" + Util.intercalate(") ∪ (", operands) + ")";
046    }
047}