[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