CommonMemberReference.java

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

import edu.udel.cis.vsl.abc.ast.type.IF.Field;
import edu.udel.cis.vsl.abc.ast.type.IF.PointerType;
import edu.udel.cis.vsl.abc.ast.value.IF.AddressValue;
import edu.udel.cis.vsl.abc.ast.value.IF.MemberReference;

public class CommonMemberReference extends CommonAddressValue implements
		MemberReference {

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

	private AddressValue structureOrUnionReference;

	private Field field;

	public CommonMemberReference(PointerType type,
			AddressValue structureOrUnionReference, Field field) {
		super(type);
		this.structureOrUnionReference = structureOrUnionReference;
		this.field = field;
	}

	@Override
	public String toString() {
		return "MemberReference[" + structureOrUnionReference + ", " + field
				+ "]";
	}

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

			return structureOrUnionReference
					.equals(that.structureOrUnionReference)
					&& field.equals(that.field);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return classCode + structureOrUnionReference.hashCode()
				+ field.hashCode();
	}

	@Override
	public Field getField() {
		return field;
	}

	@Override
	public AddressValue getStructureOrUnionReference() {
		return structureOrUnionReference;
	}

}