package synthesijer.scheduler; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; public class IRWriter { private final String name; public IRWriter(String name){ this.name = name; } public void generate(SchedulerInfo info) throws IOException{ try( PrintStream ir = new PrintStream(new FileOutputStream(new File(name + ".ir"))); ){ ir.println("(MODULE " + info.getName()); //genVariables(ir, info.getModuleVarList().toArray(new VariableOperand[]{})); genVariables(ir, info.getModuleVarList().toArray(new Operand[]{})); for(SchedulerBoard b: info.getBoardsList()){ genSchedulerBoard(ir, b); } ir.println(")"); ir.close(); }catch(IOException e){ throw new IOException(e); } } private void genSchedulerBoard(PrintStream ir, SchedulerBoard b){ ir.println(" (BOARD " + b.getReturnType() + " " + b.getName()); //genVariables(ir, b.getVarList().toArray(new VariableOperand[]{})); genVariables(ir, b.getVarList().toArray(new Operand[]{})); ir.println(" (SEQUENCER " + b.getName()); for(SchedulerSlot s: b.getSlots()){ genSchedulerSlot(ir, s); } ir.println(" )"); ir.println(" )"); } private void genSchedulerSlot(PrintStream ir, SchedulerSlot slot){ ir.println(" (SLOT " + slot.getStepId()); for(SchedulerItem i: slot.getItems()){ genSchedulerItem(ir, i); } ir.println(" )"); } private void genSchedulerItem(PrintStream ir, SchedulerItem item){ ir.println(" " + item.toSexp()); } //private void genVariables(PrintStream ir, VariableOperand[] vars){ private void genVariables(PrintStream ir, Operand[] vars){ ir.println(" (VARIABLES "); //for(VariableOperand v: vars){ for(Operand v: vars){ gen_variable(ir, v); } ir.println(" )"); } //private void gen_variable(PrintStream ir, VariableOperand v){ private void gen_variable(PrintStream ir, Operand v){ String s = " " + v.toSexp(); ir.println(s); } }