VectorElementReferenceValue.java
package edu.udel.cis.vsl.tass.dynamic.impl.value;
import edu.udel.cis.vsl.tass.dynamic.IF.type.ReferenceValueTypeIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.ReferenceValueIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.VariableReferenceValueIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.VectorElementReferenceValueIF;
import edu.udel.cis.vsl.tass.dynamic.impl.type.ValueTypeFactory;
import edu.udel.cis.vsl.tass.morph.Morphic;
public class VectorElementReferenceValue extends ReferenceValue implements
VectorElementReferenceValueIF {
private static int classHashCode = VectorElementReferenceValue.class
.hashCode();
private int index;
private VariableReferenceValueIF variableReference;
public VectorElementReferenceValue(ReferenceValueIF parent, int index,
ReferenceValueTypeIF valueType) {
super(parent, valueType);
this.index = index;
variableReference = parent.variableReference();
}
@Override
public int index() {
return index;
}
@Override
public String toString() {
return parent() + "." + index;
}
@Override
public VariableReferenceValueIF variableReference() {
return variableReference;
}
@Override
protected boolean computeEquals(Morphic component) {
if (!super.computeEquals(component))
return false;
if (component instanceof VectorElementReferenceValue) {
VectorElementReferenceValue that = (VectorElementReferenceValue) component;
return index == that.index;
}
return false;
}
@Override
public boolean isNull() {
return false;
}
@Override
protected int computeHashCode() {
return super.computeHashCode() + classHashCode + index;
}
@Override
protected void commitChildren() {
super.commitChildren();
variableReference.commit();
}
@Override
protected void canonicalizeChildren(ValueFactory valueFactory,
ValueTypeFactory typeFactory) {
super.canonicalizeChildren(valueFactory, typeFactory);
if (!variableReference.isCanonic())
variableReference = parent().variableReference();
}
}