diff python/graph.py @ 269:5f8c04a8d26b

Towards better modularity
author Windel Bouwman
date Sun, 18 Aug 2013 17:43:18 +0200
parents
children cdc76d183bcc
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/graph.py	Sun Aug 18 17:43:18 2013 +0200
@@ -0,0 +1,45 @@
+
+class Graph:
+    """
+       Generic graph base class.
+       Can dump to graphiz dot format for example!
+    """
+    def __init__(self):
+        self.nodes = []
+        self.edges = []
+
+    def newNode(self):
+        n = Node(self)
+        self.nodes.append(n)
+        return n
+
+    def addEdge(self, n, m):
+        """ Add an edge from n to m """
+        if (n, m) not in self.edges and (m, n) not in self.edges:
+            self.edges.append((n, m))
+            n.succ.append(m)
+            m.pred.append(n)
+
+    def delEdge(self):
+        # TODO
+        pass
+        
+    def to_dot(self, f):
+        """ Generate graphviz dot representation """
+        print('digraph G {', file=f)
+        for node in self.nodes:
+            print('{} [label="{}" shape=box3d];'.format(id(node), node), file=f)
+        for n, m in self.edges:
+            print('{} -> {};'.format(id(n), id(m)), file=f)
+        print('}', file=f)
+
+
+class Node:
+    """
+       Node in a graph.
+    """
+    def __init__(self, g):
+        self.g = g
+        self.succ = []
+        self.pred = []
+