Mercurial > lcfOS
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 = [] +