package de.gaalop.algebra;
import de.gaalop.dfg.Expression;
import de.gaalop.dfg.FunctionArgument;
import de.gaalop.dfg.MacroCall;
import de.gaalop.dfg.Variable;
import de.gaalop.visitors.ReplaceVisitor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
*
* @author Christian Steinmetz
*/
public class MacroVariablesDFGReplacer extends ReplaceVisitor {
private HashMap<String, Expression> replaceMap;
public MacroVariablesDFGReplacer(HashMap<String, Expression> replaceMap) {
this.replaceMap = replaceMap;
}
@Override
public void visit(Variable node) {
if (replaceMap.containsKey(node.getName()))
result = replaceMap.get(node.getName()).copy();
super.visit(node);
}
@Override
public void visit(FunctionArgument node) {
result = replaceMap.get("_P("+node.getIndex()+")");
}
@Override
public void visit(MacroCall node) {
ArrayList<Expression> newArgs = new ArrayList<Expression>(node.getArguments().size());
for (Expression arg: node.getArguments()) {
arg.accept(this);
if (result == null)
newArgs.add(arg);
else {
newArgs.add(result);
result = null;
}
}
node.setArgs(newArgs);
}
}