001package org.clafer.ast;
002
003import org.clafer.common.Check;
004
005/**
006 *
007 * @author jimmy
008 */
009public class AstDifference implements AstSetExpr {
010
011    private final AstSetExpr left, right;
012
013    public AstDifference(AstSetExpr left, AstSetExpr right) {
014        this.left = Check.notNull(left);
015        this.right = Check.notNull(right);
016    }
017
018    public AstSetExpr getLeft() {
019        return left;
020    }
021
022    public AstSetExpr getRight() {
023        return right;
024    }
025
026    @Override
027    public <A, B> B accept(AstExprVisitor<A, B> visitor, A a) {
028        return visitor.visit(this, a);
029    }
030
031    @Override
032    public boolean equals(Object obj) {
033        if (obj instanceof AstDifference) {
034            AstDifference other = (AstDifference) obj;
035            return left.equals(other.left) && right.equals(other.right);
036        }
037        return false;
038    }
039
040    @Override
041    public int hashCode() {
042        return left.hashCode() ^ right.hashCode();
043    }
044
045    @Override
046    public String toString() {
047        return "(" + left + ") -- (" + right + ")";
048    }
049}