001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005 006/** 007 * 008 * @author jimmy 009 */ 010public class IrSortStrings extends IrAbstractBool implements IrBoolExpr { 011 012 private final IrIntExpr[][] strings; 013 private final boolean strict; 014 015 IrSortStrings(IrIntExpr[][] strings, boolean strict, IrBoolDomain domain) { 016 super(domain); 017 this.strings = Check.noNullsNotEmpty(strings); 018 this.strict = strict; 019 } 020 021 public IrIntExpr[][] getStrings() { 022 return strings; 023 } 024 025 public boolean isStrict() { 026 return strict; 027 } 028 029 @Override 030 public IrBoolExpr negate() { 031 return new IrNot(this, getDomain().invert()); 032 } 033 034 @Override 035 public boolean isNegative() { 036 return false; 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 IrSortStrings) { 052 IrSortStrings other = (IrSortStrings) obj; 053 return Arrays.deepEquals(strings, other.strings) && strict == other.strict; 054 } 055 return false; 056 } 057 058 @Override 059 public int hashCode() { 060 return Arrays.deepHashCode(strings) ^ (strict ? 1 : 0); 061 } 062}