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 IrLone extends IrAbstractBool implements IrBoolExpr { 012 013 private final IrBoolExpr[] operands; 014 015 IrLone(IrBoolExpr[] operands, IrBoolDomain domain) { 016 super(domain); 017 this.operands = Check.noNullsNotEmpty(operands); 018 } 019 020 public IrBoolExpr[] getOperands() { 021 return operands; 022 } 023 024 @Override 025 public IrBoolExpr negate() { 026 return new IrNot(this, getDomain().invert()); 027 } 028 029 @Override 030 public boolean isNegative() { 031 return false; 032 } 033 034 @Override 035 public <A, B> B accept(IrBoolExprVisitor<A, B> visitor, A a) { 036 return visitor.visit(this, a); 037 } 038 039 @Override 040 public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) { 041 return visitor.visit(this, a); 042 } 043 044 @Override 045 public boolean equals(Object obj) { 046 if (obj instanceof IrLone) { 047 IrLone other = (IrLone) obj; 048 return Arrays.equals(operands, other.operands) && super.equals(other); 049 } 050 return false; 051 } 052 053 @Override 054 public int hashCode() { 055 return 15 * Arrays.hashCode(operands); 056 } 057 058 @Override 059 public String toString() { 060 return "lone(" + Util.commaSeparate(operands) + ")"; 061 } 062}