ScopeState.java
package edu.udel.cis.vsl.tass.state.impl;
import edu.udel.cis.vsl.tass.dynamic.IF.value.ValueIF;
import edu.udel.cis.vsl.tass.model.IF.scope.ScopeIF;
import edu.udel.cis.vsl.tass.morph.Morphic;
import edu.udel.cis.vsl.tass.morph.MorphicArray;
import edu.udel.cis.vsl.tass.morph.MorphicArrayFactory;
import edu.udel.cis.vsl.tass.morph.MorphicObject;
import edu.udel.cis.vsl.tass.state.IF.ScopeStateIF;
public class ScopeState extends MorphicObject implements ScopeStateIF {
private ScopeIF scope;
private MorphicArray<ValueIF> values;
public ScopeState(ScopeIF scope, MorphicArray<ValueIF> values) {
assert scope != null;
assert values != null;
this.scope = scope;
this.values = values;
}
@Override
protected void commitChildren() {
values.commit();
}
@Override
protected boolean computeEquals(Morphic component) {
if (this == component)
return true;
if (component instanceof ScopeState) {
ScopeState that = (ScopeState) component;
return scope.equals(that.scope) && values.equals(that.values);
}
return false;
}
@Override
protected int computeHashCode() {
return scope.hashCode() + values.hashCode();
}
@Override
public ScopeIF scope() {
return scope;
}
@Override
public MorphicArray<ValueIF> values() {
return values;
}
public void setValues(MorphicArray<ValueIF> values) {
assert !isCommitted();
this.values = values;
}
public void setValue(int index, ValueIF value) {
values.set(index, value);
}
void canonicalizeChildren(MorphicArrayFactory<ValueIF> arrayFactory) {
values = arrayFactory.canonic(values);
}
}