about summary refs log tree commit diff stats
path: root/miasm2/core/graph.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2015-01-06 14:58:00 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-01-09 14:28:51 +0100
commita4ff9d43483aa01361ab6d1c9afaa50527257ad4 (patch)
tree4f100900d1eab7e6faa0199884033bf204c7f21e /miasm2/core/graph.py
parentdc7815099e1006701477665c34819416ce96b052 (diff)
downloadmiasm-a4ff9d43483aa01361ab6d1c9afaa50527257ad4.tar.gz
miasm-a4ff9d43483aa01361ab6d1c9afaa50527257ad4.zip
Graph: Add get_all_parents/del_node
Diffstat (limited to 'miasm2/core/graph.py')
-rw-r--r--miasm2/core/graph.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/miasm2/core/graph.py b/miasm2/core/graph.py
index 47047269..ad159771 100644
--- a/miasm2/core/graph.py
+++ b/miasm2/core/graph.py
@@ -27,6 +27,14 @@ class DiGraph:
         self._nodes_to[n] = []
         self._nodes_from[n] = []
 
+    def del_node(self, n):
+        if n in self._nodes:
+            self._nodes.remove(n)
+        for pred in self.predecessors(n):
+            self.del_edge(pred, n)
+        for succ in self.successors(n):
+            self.del_edge(n, succ)
+
     def add_edge(self, a, b):
         if not a in self._nodes:
             self.add_node(a)
@@ -97,6 +105,20 @@ class DiGraph:
                     out.append(path + [b])
         return out
 
+    def get_all_parents(self, node):
+        """Return every parents nodes for a given @node"""
+
+        todo = set([node])
+        done = set()
+        while todo:
+            node = todo.pop()
+            if node in done:
+                continue
+            done.add(node)
+            for parent in self.predecessors(node):
+                todo.add(parent)
+        return done
+
     def node2str(self, n):
         return str(n)