EvaluatedFunctionExpression.java
package edu.udel.cis.vsl.tass.model.impl.expression;
import java.util.Arrays;
import edu.udel.cis.vsl.tass.model.IF.AbstractFunctionIF;
import edu.udel.cis.vsl.tass.model.IF.ModelFactoryIF;
import edu.udel.cis.vsl.tass.model.IF.expression.EvaluatedFunctionExpressionIF;
import edu.udel.cis.vsl.tass.model.IF.expression.ExpressionIF;
public class EvaluatedFunctionExpression extends Expression implements
EvaluatedFunctionExpressionIF {
protected AbstractFunctionIF function;
protected ExpressionIF[] arguments;
public EvaluatedFunctionExpression(ModelFactoryIF factory,
AbstractFunctionIF function, ExpressionIF[] arguments) {
super(factory, ExpressionKind.FUNCTION);
type = function.returnType();
this.function = function;
this.arguments = new ExpressionIF[arguments.length];
for(int i = 0; i < arguments.length; i++) {
this.arguments[i] = arguments[i];
}
}
public boolean equals(Object object) {
if (object instanceof EvaluatedFunctionExpression) {
EvaluatedFunctionExpression that = (EvaluatedFunctionExpression) object;
if (function.equals(that.function)) {
if (!Arrays.equals(arguments, that.arguments)) {
return false;
}
return true;
}
}
return false;
}
public int hashCode() {
return function.hashCode() + Arrays.hashCode(arguments);
}
public String atomString() {
return toString();
}
public String toString() {
String result = function.name() + "(";
for (int i = 0; i < arguments.length; i++) {
if (i != 0) {
result += ", ";
}
result += arguments[i].toString();
}
result += ")";
return result;
}
public AbstractFunctionIF function() {
return function;
}
public ExpressionIF getArgument(int i) {
return arguments[i];
}
}