SymbolicTupleType.java
package edu.udel.cis.vsl.tass.symbolic.type;
import java.util.Arrays;
import edu.udel.cis.vsl.tass.symbolic.IF.type.SymbolicTupleTypeIF;
import edu.udel.cis.vsl.tass.symbolic.IF.type.SymbolicTypeIF;
public class SymbolicTupleType extends SymbolicType implements
SymbolicTupleTypeIF {
private SymbolicTypeIF[] fieldTypes;
private String name;
SymbolicTupleType(String name, SymbolicTypeIF[] fieldTypes) {
super(SymbolicTypeKind.TUPLE);
assert name != null;
assert fieldTypes != null;
int numFields = fieldTypes.length;
this.name = name;
this.fieldTypes = new SymbolicTypeIF[numFields];
for (int i = 0; i < numFields; i++) {
assert fieldTypes[i] != null;
this.fieldTypes[i] = fieldTypes[i];
}
}
@Override
boolean intrinsicEquals(SymbolicType that) {
if (that instanceof SymbolicTupleType) {
SymbolicTupleType thatType = (SymbolicTupleType) that;
return name.equals(thatType.name)
&& Arrays.equals(fieldTypes, thatType.fieldTypes);
}
return false;
}
@Override
int intrinsicHashCode() {
return SymbolicTupleType.class.hashCode() + name.hashCode()
+ Arrays.hashCode(fieldTypes);
}
public SymbolicTypeIF fieldType(int index) {
return fieldTypes[index];
}
public int numFields() {
return fieldTypes.length;
}
public String toString() {
String result = name + "<";
int numFields = numFields();
for (int i = 0; i < numFields; i++) {
if (i > 0)
result += ",";
result += fieldType(i);
}
result += ">";
return result;
}
public String name() {
return name;
}
}