CommonValueAtExpression.java
package dev.civl.mc.model.common.expression;
import java.util.HashSet;
import java.util.Set;
import dev.civl.mc.model.IF.CIVLSource;
import dev.civl.mc.model.IF.Scope;
import dev.civl.mc.model.IF.expression.Expression;
import dev.civl.mc.model.IF.expression.ValueAtExpression;
import dev.civl.mc.model.IF.variable.Variable;
public class CommonValueAtExpression extends CommonExpression
implements
ValueAtExpression {
private Expression state;
private Expression pid;
private Expression expression;
public CommonValueAtExpression(CIVLSource source, Expression state,
Expression pid, Expression expression) {
super(source, null, null, expression.getExpressionType());
this.state = state;
this.pid = pid;
this.expression = expression;
}
@Override
public ExpressionKind expressionKind() {
return ExpressionKind.VALUE_AT;
}
@Override
public Set<Variable> variableAddressedOf(Scope scope) {
Set<Variable> result = new HashSet<>(),
subResult = state.variableAddressedOf(scope);
if (subResult != null)
result.addAll(subResult);
subResult = pid.variableAddressedOf(scope);
if (subResult != null)
result.addAll(subResult);
if (result.isEmpty())
return null;
return result;
}
@Override
public Set<Variable> variableAddressedOf() {
Set<Variable> result = new HashSet<>(),
subResult = state.variableAddressedOf();
if (subResult != null)
result.addAll(subResult);
subResult = pid.variableAddressedOf();
if (subResult != null)
result.addAll(subResult);
if (result.isEmpty())
return null;
return result;
}
@Override
public Expression state() {
return state;
}
@Override
public Expression expression() {
return expression;
}
@Override
protected boolean expressionEquals(Expression expression) {
if (expression instanceof ValueAtExpression) {
ValueAtExpression that = (ValueAtExpression) expression;
return state.equals(that.state()) && pid.equals(that.pid())
&& this.expression.equals(that.expression());
}
return false;
}
@Override
public Expression pid() {
return this.pid;
}
@Override
public String toString() {
StringBuffer result = new StringBuffer("$value_at (");
result.append(state);
result.append(", ");
result.append(pid);
result.append(", ");
result.append(expression);
result.append(")");
return result.toString();
}
@Override
protected void addFreeVariables(Set<Variable> result) {
((CommonExpression) expression).addFreeVariables(result);
((CommonExpression) pid).addFreeVariables(result);
((CommonExpression) state).addFreeVariables(result);
}
}