ArrayWrite.java
package edu.udel.cis.vsl.tass.symbolic.array;
import edu.udel.cis.vsl.tass.symbolic.IF.tree.TreeExpressionIF;
import edu.udel.cis.vsl.tass.symbolic.expression.SymbolicExpression;
public class ArrayWrite extends SymbolicExpression implements TreeExpressionIF {
private TreeExpressionIF array;
private TreeExpressionIF index;
private TreeExpressionIF value;
ArrayWrite(TreeExpressionIF array, TreeExpressionIF index,
TreeExpressionIF value) {
super(array.type());
this.array = array;
this.index = index;
this.value = value;
}
public TreeExpressionIF array() {
return array;
}
public TreeExpressionIF index() {
return index;
}
public TreeExpressionIF value() {
return value;
}
protected boolean intrinsicEquals(SymbolicExpression expression) {
if (expression instanceof ArrayWrite) {
ArrayWrite that = (ArrayWrite) expression;
return array.equals(that.array) && index.equals(that.index)
&& value.equals(that.value);
}
return false;
}
protected int intrinsicHashCode() {
return ArrayWrite.class.hashCode() + array.hashCode()
+ index.hashCode() + value.hashCode();
}
public String toString() {
String result = array.toString();
result += " WITH [" + index + "] := " + value;
return result;
}
public String atomString() {
return "(" + toString() + ")";
}
public TreeExpressionIF argument(int index) {
switch (index) {
case 0:
return array;
case 1:
return this.index;
case 2:
return value;
default:
throw new RuntimeException("numArguments=" + 3 + ", index=" + index);
}
}
public SymbolicKind kind() {
return SymbolicKind.ARRAY_WRITE;
}
public int numArguments() {
return 3;
}
}