CommonArrayValue.java

package edu.udel.cis.vsl.abc.ast.value.common;

import java.util.ArrayList;

import edu.udel.cis.vsl.abc.ast.type.IF.ArrayType;
import edu.udel.cis.vsl.abc.ast.value.IF.ArrayValue;
import edu.udel.cis.vsl.abc.ast.value.IF.Value;
import edu.udel.cis.vsl.abc.ast.value.IF.ValueFactory.Answer;

public class CommonArrayValue extends CommonValue implements ArrayValue {

	private final static int classCode = CommonArrayValue.class.hashCode();

	private ArrayList<Value> elements = new ArrayList<Value>();

	public CommonArrayValue(ArrayType type) {
		super(type);
	}

	@Override
	public Value getElement(int index) {
		if (index < elements.size())
			return null;
		else
			return elements.get(index);
	}

	@Override
	public void setElement(int index, Value elementValue) {
		int size = elements.size();

		if (index >= size) {
			for (int i = size; i <= index; i++)
				elements.add(null);
		}
		elements.set(index, elementValue);
	}

	@Override
	public ArrayType getType() {
		return (ArrayType) super.getType();
	}

	@Override
	public boolean equals(Object object) {
		if (this == object)
			return true;
		if (object instanceof CommonArrayValue) {
			CommonArrayValue that = (CommonArrayValue) object;

			return getType().equals(that.getType())
					&& elements.equals(that.elements);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return classCode + getType().hashCode() + elements.hashCode();
	}

	@Override
	public Answer isZero() {
		throw new RuntimeException("Cannot ask if an array is zero");
	}

	@Override
	public String toString() {
		return elements.toString();
	}

}