MorphicRecord.java
package edu.udel.cis.vsl.tass.morph;
import java.util.Arrays;
public class MorphicRecord extends MorphicObject {
private MorphicObject[] data;
/**
* Construct new component array with this length. All elements initially
* null.
*/
public MorphicRecord(int length) {
data = new MorphicObject[length];
}
public int length() {
return data.length;
}
public Morphic get(int index) {
if (index >= data.length) {
throw new ArrayIndexOutOfBoundsException(index);
}
return data[index];
}
public void set(int index, Morphic element) {
assert !isCommitted();
if (index >= data.length) {
throw new ArrayIndexOutOfBoundsException(index);
}
data[index] = (MorphicObject) element;
}
@Override
protected boolean computeEquals(Morphic component) {
if (component instanceof MorphicRecord) {
MorphicRecord that = (MorphicRecord) component;
return Arrays.equals(data, that.data);
}
return false;
}
@Override
protected int computeHashCode() {
return Arrays.hashCode(data);
}
@Override
protected void commitChildren() {
for (Morphic datum : data) {
if (datum != null)
datum.commit();
}
}
}