001package org.clafer.ir; 002 003import java.util.Arrays; 004import org.clafer.common.Check; 005 006/** 007 * 008 * @author jimmy 009 */ 010public class IrSortStringsChannel extends IrAbstractBool implements IrBoolExpr { 011 012 private final IrIntExpr[][] strings; 013 private final IrIntExpr[] ints; 014 015 public IrSortStringsChannel(IrIntExpr[][] strings, IrIntExpr[] ints, IrBoolDomain domain) { 016 super(domain); 017 this.strings = Check.noNullsNotEmpty(strings); 018 for (IrIntExpr[] string : strings) { 019 Check.noNullsNotEmpty(string); 020 } 021 this.ints = Check.noNullsNotEmpty(ints); 022 if (strings.length != ints.length) { 023 throw new IllegalArgumentException(); 024 } 025 } 026 027 public IrIntExpr[][] getStrings() { 028 return strings; 029 } 030 031 public IrIntExpr[] getInts() { 032 return ints; 033 } 034 035 @Override 036 public IrBoolExpr negate() { 037 return new IrNot(this, getDomain().invert()); 038 } 039 040 @Override 041 public boolean isNegative() { 042 return false; 043 } 044 045 @Override 046 public <A, B> B accept(IrBoolExprVisitor<A, B> visitor, A a) { 047 return visitor.visit(this, a); 048 } 049 050 @Override 051 public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a) { 052 return visitor.visit(this, a); 053 } 054 055 @Override 056 public boolean equals(Object obj) { 057 if (obj instanceof IrSortStringsChannel) { 058 IrSortStringsChannel other = (IrSortStringsChannel) obj; 059 return Arrays.deepEquals(strings, other.strings) 060 && Arrays.equals(ints, other.ints) 061 && super.equals(other); 062 } 063 return false; 064 } 065 066 @Override 067 public int hashCode() { 068 return Arrays.deepHashCode(strings) ^ Arrays.hashCode(ints); 069 } 070 071 @Override 072 public String toString() { 073 return "lexChainChannel(" + Arrays.deepToString(strings) + ", " + Arrays.toString(ints) + ")"; 074 } 075}