/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package datapath.graph.display.dot; import datapath.graph.display.Display; import datapath.graph.operations.Operation; import datapath.graph.type.FixedPoint; import datapath.graph.type.Type; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author jh */ public class DotDisplay extends Display<DisplayEdge, DisplayNode> { public DotDisplay(String name) { super(name); this.nodes = new HashSet<DisplayNode>(); this.edges = new HashSet<DisplayEdge>(); } private HashSet<DisplayNode> nodes; private HashSet<DisplayEdge> edges; @Override public void addNode(DisplayNode node) { nodes.add(node); } @Override public void addEdge(DisplayEdge edge) { edges.add(edge); } @Override public void display(String stage) { try { BufferedWriter out = new BufferedWriter( new FileWriter("junk_"+stage+".dot")); out.write("digraph {\n"); for(DisplayNode node : nodes){ Type t = node.getOperation().getType(); if (t == null) t = new FixedPoint(0, 0, false); String n = String.format("%s [label=\"%s %s Bits: %s Schedule: %d Cycles: %d\\nType: %s\\ndebug: %s\"];\n", node.getID(), node.getDisplayLabel(), node.getID(), t.getBitsize(), node.getOperation().getSchedule(), node.getOperation().getDelay(), t.toString().replace("\n", "\\n"), node.getOperation().getDebugMessage()); out.write(n); } for(DisplayEdge edge : edges){ String n = String.format("%s -> %s;\n", edge.getSource().getID(),edge.getTarget().getID()); out.write(n); } // for(HashSet<DisplayNode> set : getOperationScheduled().values()){ // out.write("{rank = same;"); // for(DisplayNode node : set ){ // out.write(node.getID()+";"); // } // out.write("}\n"); // } out.write("}\n"); out.flush(); out.close(); } catch (IOException ex) { Logger.getLogger(DotDisplay.class.getName()).log(Level.SEVERE, null, ex); } } @Override public void display() { display(""); } private HashMap<Integer,HashSet<DisplayNode>> getOperationScheduled() { HashMap<Integer, HashSet<DisplayNode>> map = new HashMap<Integer, HashSet<DisplayNode>>(); for(DisplayNode n : nodes) { Operation op = n.getOperation(); HashSet<DisplayNode> set = map.get(op.getSchedule()); if(set == null) { set = new HashSet<DisplayNode>(); map.put(op.getSchedule(), set); } set.add(n); } return map; } }