package de.gaalop.visualCodeInserter2d; import de.gaalop.OptimizationException; import de.gaalop.VisualCodeInserterStrategy; import de.gaalop.cfg.AssignmentNode; import de.gaalop.cfg.ControlFlowGraph; import de.gaalop.cfg.ExpressionStatement; import de.gaalop.cfg.StoreResultNode; import de.gaalop.dfg.Expression; import de.gaalop.dfg.InnerProduct; import de.gaalop.dfg.MacroCall; import de.gaalop.dfg.Variable; import java.util.HashMap; import java.util.LinkedList; /** * Implements a strategy that inserts draw code in the cluscript * @author Christian Steinmetz */ public class VisualizerCodeInserter2d implements VisualCodeInserterStrategy { @Override public void transform(ControlFlowGraph graph) throws OptimizationException { //insert visualizing commands, if needed LinkedList<ExpressionStatement> statements = ExpressionStatementCollector.collectAllStatements(graph); String prefix = "_V_"; //2d HashMap<String, Expression> renderingExpressions = graph.getRenderingExpressions(); int i = 0; for (ExpressionStatement s : statements) { String productName = prefix + "PRODUCT" + i; AssignmentNode renderNode = new AssignmentNode(graph, new Variable(productName), s.getExpression()); graph.addLocalVariable(new Variable(productName)); s.insertAfter(renderNode); StoreResultNode outputRenderNode = new StoreResultNode(graph, new Variable(productName)); graph.addLocalVariable(new Variable(productName)); renderNode.insertAfter(outputRenderNode); renderingExpressions.put(productName, s.getExpression()); i++; } } }