[Scummvm-cvs-logs] SF.net SVN: scummvm:[41828] tools/branches/gsoc2009-decompiler/decompiler/ graph.h

kjdf at users.sourceforge.net kjdf at users.sourceforge.net
Wed Jun 24 20:21:39 CEST 2009


Revision: 41828
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41828&view=rev
Author:   kjdf
Date:     2009-06-24 18:21:39 +0000 (Wed, 24 Jun 2009)

Log Message:
-----------
decompiler: graph _nodes unmutable again

Modified Paths:
--------------
    tools/branches/gsoc2009-decompiler/decompiler/graph.h

Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.h	2009-06-24 17:01:01 UTC (rev 41827)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.h	2009-06-24 18:21:39 UTC (rev 41828)
@@ -55,14 +55,13 @@
 		return _nodes;
 	}
 
-	mutable std::list<Node*> _nodes;
+	std::list<Node*> _nodes;
 	Node *_entry;
 
 	Graph() : _entry() {
 	}
 
 	Graph(const Graph &g) : _entry() {
-		g.removeHiddenNodes();
 		std::map<Node*, Node*> trans;
 		trans[0] = 0;
 		foreach (Node *u, g._nodes)
@@ -81,7 +80,6 @@
 		foreach (Node *u, _nodes)
 			delete u;
 		_nodes.clear();
-		g.removeHiddenNodes();
 		std::map<Node*, Node*> trans;
 		trans[0] = 0;
 		foreach (Node *u, g._nodes)
@@ -113,14 +111,6 @@
 		return node;
 	}
 
-	void removeNode(Node *u) {
-		foreach (Node *v, u->_in)
-			v->_out.remove(u);
-		foreach (Node *v, u->_out)
-			v->_in.remove(u);
-		u->_hidden = true;
-	}
-
 	void addEdge(Node *from, Node *to) {
 		from->_out.push_back(to);
 		to->_in.push_back(from);
@@ -142,7 +132,8 @@
 		visit(_entry);
 		foreach (Node *u, _nodes)
 			if (!u->_visited)
-				removeNode(u);
+				hideNode(u);
+		removeHiddenNodes();
 	}
 
 	std::list<Node*> intervals() const {
@@ -155,7 +146,6 @@
 	}
 
 	Graph derive() {
-		removeHiddenNodes();
 		assignIntervals();
 		Graph g;
 		std::map<Node*, Node*> trans;
@@ -176,9 +166,16 @@
 		return g;
 	}
 
+	//	std::list<Graph> derivedSequence() {
+	//		std::list<Graph> ret;
+	//		ret.push_back(*this);
+	//		while (ret.back().derive().nodes().size() < ret.back().nodes().size())
+	//			ret.push_back(ret.back().derive());
+	//		return ret;
+	//	}
+
 	template<typename Printer>   // printer is a functor taking Data and returning a string
 	std::string graphvizPrint(Printer printer, const std::string &fontname="Courier", int fontsize=14) const {
-		removeHiddenNodes();
 		std::stringstream ret;
 		ret << "digraph G {" << std::endl;
 		foreach (Node *interval, intervals()) {
@@ -206,6 +203,14 @@
 
 private:
 
+	void hideNode(Node *u) {
+		foreach (Node *v, u->_in)
+			v->_out.remove(u);
+		foreach (Node *v, u->_out)
+			v->_in.remove(u);
+		u->_hidden = true;
+	}
+
 	void visit(Node *u) {
 		u->_visited = true;
 		foreach (Node *v, u->_out)
@@ -240,7 +245,7 @@
 		}
 	}
 
-	void removeHiddenNodes() const {
+	void removeHiddenNodes() {
 		for (typename std::list<Node*>::iterator it = _nodes.begin(); it != _nodes.end(); )
 			if ((*it)->_hidden) {
 				delete *it;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list