CommonCompleteArrayType.java
/**
*
*/
package edu.udel.cis.vsl.civl.model.common.type;
import edu.udel.cis.vsl.civl.model.IF.expression.Expression;
import edu.udel.cis.vsl.civl.model.IF.expression.Expression.ExpressionKind;
import edu.udel.cis.vsl.civl.model.IF.type.CIVLCompleteArrayType;
import edu.udel.cis.vsl.civl.model.IF.type.CIVLPrimitiveType;
import edu.udel.cis.vsl.civl.model.IF.type.CIVLType;
import edu.udel.cis.vsl.sarl.IF.SymbolicUniverse;
/**
* @author zirkel
*
*/
public class CommonCompleteArrayType extends CommonArrayType implements
CIVLCompleteArrayType {
private Expression extent;
/**
* @param baseType
*/
public CommonCompleteArrayType(CIVLType baseType, Expression extent) {
super(baseType);
this.extent = extent;
}
@Override
public Expression extent() {
return extent;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof CIVLCompleteArrayType) {
CIVLCompleteArrayType that = (CIVLCompleteArrayType) obj;
return this.elementType().equals(that.elementType())
&& this.extent.equals(that.extent());
}
return false;
}
@Override
public boolean isComplete() {
return true;
}
@Override
public boolean hasState() {
if (super.hasState())
return true;
return extent.expressionKind() != ExpressionKind.INTEGER_LITERAL;
}
public String toString() {
return elementType() + "[" + extent() + "]";
}
@Override
public TypeKind typeKind() {
return TypeKind.COMPLETE_ARRAY;
}
@Override
public CIVLType copyAs(CIVLPrimitiveType type, SymbolicUniverse universe) {
CIVLType newElementType = this.elementType().copyAs(type, universe);
if (newElementType.equals(this.elementType()))
return this;
return new CommonCompleteArrayType(newElementType, extent);
}
}