CommonAssignOffset.java

package edu.udel.cis.vsl.abc.analysis.pointsTo.common;

import edu.udel.cis.vsl.abc.analysis.pointsTo.IF.AssignOffsetIF;

public class CommonAssignOffset implements AssignOffsetIF {

	private Integer constantValue;

	private boolean hasConstantValue;

	CommonAssignOffset(Integer constantValue) {
		this.hasConstantValue = true;
		this.constantValue = constantValue;
	}

	CommonAssignOffset() {
		this.hasConstantValue = false;
		this.constantValue = null;
	}

	@Override
	public Integer constantValue() {
		return constantValue;
	}

	@Override
	public boolean hasConstantValue() {
		return hasConstantValue;
	}

	@Override
	public String toString() {
		if (this.hasConstantValue())
			return constantValue.toString();
		else
			return "*";
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof CommonAssignOffset) {
			CommonAssignOffset that = (CommonAssignOffset) obj;

			if (that.hasConstantValue() != hasConstantValue())
				return false;
			if (hasConstantValue())
				return this.constantValue().equals(that.constantValue());
			else
				return true;
		}
		return false;
	}

	@Override
	public int hashCode() {
		if (hasConstantValue())
			return constantValue >= 0
					? constantValue
					: 32767 * Math.abs(constantValue);
		else
			return -1;
	}
}