package de.gaalop.testbenchTbaGapp.tba.framework; import de.gaalop.CodeGenerator; import de.gaalop.CodeGeneratorException; import de.gaalop.OutputFile; import de.gaalop.cfg.ControlFlowGraph; import de.gaalop.dfg.MultivectorComponent; import de.gaalop.dfg.Variable; import java.nio.charset.Charset; import java.util.*; /** * * @author Christian Steinmetz */ public class TBATestCodeGenerator implements CodeGenerator { private CFGInterpreter interpreter; private boolean sort; public TBATestCodeGenerator(HashMap<Variable, Double> inputVariables, boolean sort) { interpreter = new CFGInterpreter(inputVariables); this.sort = sort; } @Override public Set<OutputFile> generate(ControlFlowGraph in) throws CodeGeneratorException { in.accept(interpreter); StringBuilder contentMap = new StringBuilder(); StringBuilder contentOutput = new StringBuilder(); HashMap<Variable, Double> mapVariables = interpreter.getMapVariables(); HashSet<Variable> outputVariables = interpreter.getOutputVariables(); ArrayList<Variable> mapVariablesList = new ArrayList<Variable>(mapVariables.keySet()); ArrayList<Variable> outputVariablesList = new ArrayList<Variable>(outputVariables); if (sort) { Collections.sort(mapVariablesList, new Comparator<Variable>() { @Override public int compare(Variable o1, Variable o2) { return o1.toString().compareTo(o2.toString()); } }); } for (Variable v: mapVariablesList) { contentMap.append(v.toString()+" = "+mapVariables.get(v).toString()); contentMap.append("\n"); } for (Variable v: outputVariablesList) { LinkedList<Integer> indices = new LinkedList<Integer>(); for (String outputVarStr: in.getPragmaOutputVariables()) { String[] parts = outputVarStr.split("\\$"); if (parts[0].equals(v.getName())) indices.add(Integer.parseInt(parts[1])); } if (indices.isEmpty()) { for (Variable vi: mapVariablesList) if (vi.getName().equals(v.getName())) contentOutput.append(vi.toString()+" = "+mapVariables.get(vi).toString()+"\n"); } else { for (Variable vi: mapVariablesList) if (vi.getName().equals(v.getName()) && indices.contains(((MultivectorComponent) vi).getBladeIndex())) contentOutput.append(vi.toString()+" = "+mapVariables.get(vi).toString()+"\n"); } } HashSet<OutputFile> result = new HashSet<OutputFile>(); result.add(new OutputFile("Map Values", contentMap.toString(), Charset.forName("UTF-8"))); result.add(new OutputFile("Output Values", contentOutput.toString(), Charset.forName("UTF-8"))); return result; } }