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();
		}
	}

}