SharedVariable.java
package edu.udel.cis.vsl.tass.model.impl.variable;
import edu.udel.cis.vsl.tass.model.IF.ModelIF;
import edu.udel.cis.vsl.tass.model.IF.SyntaxException;
import edu.udel.cis.vsl.tass.model.IF.expression.ExpressionIF;
import edu.udel.cis.vsl.tass.model.IF.type.TypeIF;
import edu.udel.cis.vsl.tass.model.IF.variable.SharedVariableIF;
import edu.udel.cis.vsl.tass.model.impl.scope.ModelScope;
public class SharedVariable extends Variable implements SharedVariableIF {
public enum SharedKind {
INPUT, OUTPUT, GENERAL
};
private SharedKind kind;
private ExpressionIF assumption = null;
private SharedVariableIF correspondingVariable = null;
public SharedVariable(String name, TypeIF type, SharedKind kind,
ModelScope scope) {
super(name, type, scope);
this.kind = kind;
}
public ModelScope scope() {
return (ModelScope) super.scope();
}
public boolean isInput() {
return kind == SharedKind.INPUT;
}
public boolean isOutput() {
return kind == SharedKind.OUTPUT;
}
public void setAssumption(ExpressionIF assumption) {
this.assumption = assumption;
}
public ExpressionIF assumption() {
return assumption;
}
public void setCorrespondingVariable(SharedVariableIF correspondingVariable) {
this.correspondingVariable = correspondingVariable;
}
/**
* Returns the variable that corresponds to this one, if there is one, else
* returns null. The corresponding variable is set using the
* setCorrespondingVariable method of class ModelIF.
*
* @return
*/
public SharedVariableIF correspondingVariable() {
return correspondingVariable;
}
public void setInitializationExpression(ExpressionIF expression)
throws SyntaxException {
if (isInput() || isOutput()) {
throw new SyntaxException(this,
"Cannot assign initial value to input or output variable");
}
super.setInitializationExpression(expression);
}
@Override
public ModelIF model() {
return scope().model();
}
}