[Scummvm-cvs-logs] SF.net SVN: scummvm:[41597] tools/branches/gsoc2009-decompiler/decompiler
kjdf at users.sourceforge.net
kjdf at users.sourceforge.net
Tue Jun 16 23:42:04 CEST 2009
Revision: 41597
http://scummvm.svn.sourceforge.net/scummvm/?rev=41597&view=rev
Author: kjdf
Date: 2009-06-16 21:42:03 +0000 (Tue, 16 Jun 2009)
Log Message:
-----------
decompiler: graph library take 1
Modified Paths:
--------------
tools/branches/gsoc2009-decompiler/decompiler/misc.h
Added Paths:
-----------
tools/branches/gsoc2009-decompiler/decompiler/graph2.h
tools/branches/gsoc2009-decompiler/decompiler/test.cc
Added: tools/branches/gsoc2009-decompiler/decompiler/graph2.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph2.h (rev 0)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph2.h 2009-06-16 21:42:03 UTC (rev 41597)
@@ -0,0 +1,99 @@
+#ifndef GRAPH_H
+#define GRAPH_H
+
+typedef unsigned id_t;
+
+#include <map>
+#include <list>
+#include <string>
+#include <sstream>
+
+#include "misc.h"
+
+using namespace std;
+
+
+string escape(const string &s) {
+ string ret;
+ foreach (char c, s) {
+ if (c == '\\' || c == '"')
+ ret.push_back('\\');
+ ret.push_back(c);
+ }
+ return ret;
+};
+
+
+template<typename Data>
+struct Graph {
+
+
+ struct NodeInfo {
+ list<NodeInfo*> _in;
+ list<NodeInfo*> _out;
+ Data _data;
+ NodeInfo(Data data) : _data(data) {
+ }
+ };
+
+
+ struct Node {
+ Graph *_graph;
+ NodeInfo* _info;
+
+ Node(Graph *graph, NodeInfo *info): _graph(graph), _info(info) {
+ }
+
+ list<Node> out() {
+ list<Node> ret;
+ foreach (NodeInfo *v, _info->_out)
+ ret.push_back(Node(_graph, v));
+ return ret;
+ }
+
+ void addEdge(Node v) {
+ _graph->addEdge(*this, v);
+ }
+
+ Data &operator*() {
+ return _info->_data;
+ }
+
+ Data *operator->() {
+ return &_info->_data;
+ }
+ };
+
+ list<NodeInfo*> _nodes;
+
+ Graph() {
+ }
+
+ Node addNode(Data data) {
+ NodeInfo* info = new NodeInfo(data);
+ _nodes.push_back(info);
+ return Node(this, info);
+ }
+
+ void addEdge(Node from, Node to) {
+ from._info->_out.push_back(to._info);
+ to._info->_in.push_back(from._info);
+ }
+
+ // printer :: Data -> string
+ template<typename Printer>
+ string print(Printer printer) {
+ stringstream ret;
+ ret << "digraph G {" << endl;
+ foreach (NodeInfo *u, _nodes) {
+ ret << (unsigned) u << " [shape=box,label=\"" << escape(printer(u->_data)) << "\"];" << endl;
+ foreach (NodeInfo *v, u->_out)
+ ret << (unsigned) u << " -> " << (unsigned) v << ";" << endl;
+ }
+ ret << "}" << endl;
+ return ret.str();
+ }
+
+};
+
+#endif
Property changes on: tools/branches/gsoc2009-decompiler/decompiler/graph2.h
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Modified: tools/branches/gsoc2009-decompiler/decompiler/misc.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/misc.h 2009-06-16 21:23:26 UTC (rev 41596)
+++ tools/branches/gsoc2009-decompiler/decompiler/misc.h 2009-06-16 21:42:03 UTC (rev 41597)
@@ -3,6 +3,10 @@
#include <fstream>
+#include <boost/foreach.hpp>
+
+#define foreach BOOST_FOREACH
+
using namespace std;
typedef unsigned char uint8;
Added: tools/branches/gsoc2009-decompiler/decompiler/test.cc
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/test.cc (rev 0)
+++ tools/branches/gsoc2009-decompiler/decompiler/test.cc 2009-06-16 21:42:03 UTC (rev 41597)
@@ -0,0 +1,30 @@
+#include <cstdio>
+
+#include "graph2.h"
+
+#include <string>
+#include <sstream>
+#include <iostream>
+using namespace std;
+
+string printer(int i) {
+ stringstream ret;
+ ret << "node \\ containing \"" << i << "\"";
+ return ret.str();
+};
+
+typedef Graph<int>::Node node;
+
+int main() {
+ Graph<int> g;
+ node a = g.addNode(0);
+ g.addEdge(a, g.addNode(1));
+ g.addEdge(a, g.addNode(2));
+ g.addEdge(a, g.addNode(0));
+ g.addEdge(a, g.addNode(0));
+ *a = 6;
+ foreach (node u, a.out())
+ *u = 12;
+ cout << g.print(printer) << endl;
+ return 0;
+}
Property changes on: tools/branches/gsoc2009-decompiler/decompiler/test.cc
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
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