package de.gaalop.visualizer;
import de.gaalop.cfg.AssignmentNode;
import de.gaalop.dfg.Expression;
import de.gaalop.dfg.MultivectorComponent;
import de.gaalop.tba.cfgImport.optimization.ConstantFolding;
import java.util.LinkedList;
/**
* Differentiates an Expression directly in Gaalop with respect to an
* Multivector component
* @author Christian
*/
public class CFGDifferentiater implements Differentiater {
@Override
public LinkedList<AssignmentNode> differentiate(LinkedList<AssignmentNode> toDerive, MultivectorComponent variable) {
LinkedList<AssignmentNode> result = new LinkedList<AssignmentNode>();
for (AssignmentNode node : toDerive) {
Expression differentiated = DFGDifferentiater.differentiate(node.getValue(), variable);
ConstantFolding cF = new ConstantFolding();
differentiated.accept(cF);
result.add(new AssignmentNode(null, node.getVariable(), cF.getResultExpr()));
}
return result;
}
}