SymbolicValue.java

package edu.udel.cis.vsl.tass.dynamic.impl.value;

import edu.udel.cis.vsl.tass.dynamic.IF.type.ValueTypeIF;
import edu.udel.cis.vsl.tass.morph.Morphic;
import edu.udel.cis.vsl.tass.symbolic.IF.SymbolicExpressionIF;

public class SymbolicValue extends Value {

	private static int classHashCode = SymbolicValue.class.hashCode();

	public SymbolicValue(SymbolicExpressionIF symExpression,
			ValueTypeIF valueType) {
		super(valueType);
		assert symExpression != null;
		commit();
		setSymbolicExpression(symExpression);
	}

	@Override
	protected int computeHashCode() {
		return super.computeHashCode() + classHashCode
				+ getSymbolicExpression().hashCode();
	}

	@Override
	protected boolean computeEquals(Morphic component) {
		if (component instanceof SymbolicValue) {
			SymbolicValue that = (SymbolicValue) component;

			return super.computeEquals(that)
					&& getSymbolicExpression().equals(
							that.getSymbolicExpression());
		}
		return false;
	}

	@Override
	public String toString() {
		SymbolicExpressionIF symExpression = getSymbolicExpression();
		return (symExpression == null ? "null" : symExpression.toString());
	}
}