optimizations to IntPairMap.java
[sbp.git] / src / edu / berkeley / sbp / util / GraphViz.java
index b3132d7..1d85e11 100644 (file)
@@ -1,3 +1,5 @@
+// Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
+
 package edu.berkeley.sbp.util;
 import edu.berkeley.sbp.util.*;
 import edu.berkeley.sbp.*;
@@ -8,18 +10,18 @@ import java.lang.ref.*;
 
 public class GraphViz {
 
-    IdentityHashMap<ToGraphViz,Node> ihm = new IdentityHashMap<ToGraphViz,Node>();
-    HashMap<Node,Group> groups = new HashMap<Node,Group>();
+    IdentityHashMap<ToGraphViz,StateNode> ihm = new IdentityHashMap<ToGraphViz,StateNode>();
+    HashMap<StateNode,Group> groups = new HashMap<StateNode,Group>();
 
-    public class Group extends Node {
+    public class Group extends StateNode {
         private final int idx = master_idx++;
         public boolean cluster = false;
         public boolean primary = true;
         public Group() { }
-        public void add(Node n) { groups.put(n, this); }
+        public void add(StateNode n) { groups.put(n, this); }
         public String name() { return cluster?("cluster_"+idx):("subgraph_"+idx); }
         public boolean simple() { return false; }
-        public void dump(PrintWriter pw, IdentityHashMap<Node,Node> done) {
+        public void dump(PrintWriter pw, IdentityHashMap<StateNode,StateNode> done) {
             Group g = this;
             if (done.get(g)!=null) return;
             done.put(g,g);
@@ -27,7 +29,7 @@ public class GraphViz {
             pw.println("  label=\""+StringUtil.escapify(label.toString(), "\\\"\r\n")+"\";\n");
             pw.println("  color="+g.color+";\n");
             pw.println("  shape="+g.shape+";\n");
-            for(Node n : groups.keySet())
+            for(StateNode n : groups.keySet())
                 if (groups.get(n)==g)
                     n.dump(pw, done);
             pw.println("  }\n");
@@ -36,7 +38,7 @@ public class GraphViz {
 
     private static int master_idx=0;
 
-    public class Node {
+    public class StateNode {
         private final int idx = master_idx++;
         public String label;
         public String comment;
@@ -44,11 +46,11 @@ public class GraphViz {
         public String color="black";
         public String fill="white";
         public String shape="ellipse";
-        public ArrayList<Node> edges = new ArrayList<Node>();
+        public ArrayList<StateNode> edges = new ArrayList<StateNode>();
         public ArrayList<Object> labels = new ArrayList<Object>();
-        public ArrayList<Node> inbound = new ArrayList<Node>();
+        public ArrayList<StateNode> inbound = new ArrayList<StateNode>();
         public void edge(ToGraphViz o, Object label) {
-            Node n = o.toGraphViz(GraphViz.this);
+            StateNode n = o.toGraphViz(GraphViz.this);
             if (n==null) return;
             edges.add(n);
             labels.add(label);
@@ -67,7 +69,7 @@ public class GraphViz {
         public void edges(PrintWriter pw) {
             if (simple()) return;
             for(int i=0; i<edges.size(); i++) {
-                Node n = edges.get(i);
+                StateNode n = edges.get(i);
                 Object label = labels.get(i);
                 pw.println("    "+name()+" -> " + n.name() + " [color="+color+" "
                            +(label==null?"":("label=\""+StringUtil.escapify(label.toString(), "\\\"\r\n")+"\""))+ "];\n");
@@ -78,17 +80,17 @@ public class GraphViz {
             boolean simple = true;
             if (label!=null && !label.equals("")) simple = false;
             if (simple)
-                for(Node n : edges)
+                for(StateNode n : edges)
                     //if (n.numEdges()>0) { simple = false; break; }
                     if (n.inbound.size() > 1) { simple = false; break; }
             return simple;
         }
-        public void dump(PrintWriter pw, IdentityHashMap<Node,Node> done) {
+        public void dump(PrintWriter pw, IdentityHashMap<StateNode,StateNode> done) {
             if (done.get(this)!=null) return;
             done.put(this, this);
             if (inbound.size() > 0) {
                 boolean good = false;
-                for(Node n : inbound)
+                for(StateNode n : inbound)
                     if (!n.simple())
                         { good = true; break; }
                 if (!good) return;
@@ -100,12 +102,12 @@ public class GraphViz {
                 pw.print(" shape=record ");
                 pw.print(" label=\"");
                 boolean complex = false;
-                for(Node n : edges)
+                for(StateNode n : edges)
                     if (n.edges.size()>0)
                         complex = true;
                 if (!complex) pw.print("{");
                 boolean first = true;
-                for(Node n : edges) {
+                for(StateNode n : edges) {
                     if (!first) pw.print("|");
                     first = false;
                     pw.print("<node_"+n.idx+">");
@@ -128,10 +130,10 @@ public class GraphViz {
         return ihm.get(o)!=null;
     }
 
-    public Node createNode(ToGraphViz o) {
-        Node n = ihm.get(o);
+    public StateNode createNode(ToGraphViz o) {
+        StateNode n = ihm.get(o);
         if (n!=null) return n;
-        n = new Node();
+        n = new StateNode();
         ihm.put(o, n);
         return n;
     }
@@ -145,9 +147,9 @@ public class GraphViz {
     }
 
     public static interface ToGraphViz {
-        public Node    toGraphViz(GraphViz gv);
-        public boolean isTransparent();
-        public boolean isHidden();
+        StateNode    toGraphViz(GraphViz gv);
+        boolean isTransparent();
+        boolean isHidden();
     }
 
     public void show() throws IOException {
@@ -156,17 +158,17 @@ public class GraphViz {
 
     public void dump(OutputStream os) { dump(new PrintWriter(new OutputStreamWriter(os))); }
     public void dump(PrintWriter pw) {
-        IdentityHashMap<Node,Node> done = new IdentityHashMap<Node,Node>();
+        IdentityHashMap<StateNode,StateNode> done = new IdentityHashMap<StateNode,StateNode>();
         pw.println("digraph G { rankdir=LR; ordering=out; compound=true; \n");
         for(Group g : groups.values())
             if (g.primary)
                 g.dump(pw, done);
-        for(Node n : ihm.values()) {
+        for(StateNode n : ihm.values()) {
             if (done.get(n)!=null) continue;
             if (n instanceof Group) continue;
             n.dump(pw, done);
         }
-        for(Node n : ihm.values()) n.edges(pw);
+        for(StateNode n : ihm.values()) n.edges(pw);
         pw.println("}\n");
         pw.flush();
     }