TupleRead.java
package edu.udel.cis.vsl.tass.symbolic.tuple;
import edu.udel.cis.vsl.tass.symbolic.BooleanPrimitive;
import edu.udel.cis.vsl.tass.symbolic.NumericPrimitive;
import edu.udel.cis.vsl.tass.symbolic.IF.tree.NumericConcreteExpressionIF;
import edu.udel.cis.vsl.tass.symbolic.IF.tree.TreeExpressionIF;
import edu.udel.cis.vsl.tass.symbolic.IF.type.SymbolicTupleTypeIF;
import edu.udel.cis.vsl.tass.symbolic.expression.SymbolicExpression;
import edu.udel.cis.vsl.tass.number.IF.IntegerNumberIF;
public class TupleRead extends SymbolicExpression implements NumericPrimitive,
BooleanPrimitive {
private TreeExpressionIF tupleExpression;
private NumericConcreteExpressionIF indexExpression;
TupleRead(TreeExpressionIF tupleExpression,
NumericConcreteExpressionIF indexExpression) {
super(((SymbolicTupleTypeIF) tupleExpression.type())
.fieldType(((IntegerNumberIF) indexExpression.value())
.intValue()));
this.tupleExpression = tupleExpression;
this.indexExpression = indexExpression;
}
public NumericConcreteExpressionIF index() {
return indexExpression;
}
public TreeExpressionIF tuple() {
return tupleExpression;
}
public String toString() {
return tupleExpression.atomString() + "." + indexExpression;
}
public String atomString() {
return "(" + toString() + ")";
}
protected int intrinsicHashCode() {
return TupleRead.class.hashCode() + tupleExpression.hashCode()
+ indexExpression.hashCode();
}
protected boolean intrinsicEquals(SymbolicExpression expression) {
if (expression instanceof TupleRead) {
return tupleExpression
.equals(((TupleRead) expression).tupleExpression)
&& indexExpression
.equals(((TupleRead) expression).tupleExpression);
}
return false;
}
public NumericPrimitiveKind numericPrimitiveKind() {
return NumericPrimitiveKind.TUPLE_READ;
}
public BooleanPrimitiveKind booleanPrimitiveKind() {
return BooleanPrimitiveKind.TUPLE_READ;
}
public TreeExpressionIF argument(int index) {
switch (index) {
case 0:
return tupleExpression;
case 1:
return indexExpression;
default:
throw new IllegalArgumentException("numArguments=" + 2 + ", index="
+ index);
}
}
public SymbolicKind kind() {
return SymbolicKind.TUPLE_READ;
}
public int numArguments() {
return 2;
}
}