summaryrefslogtreecommitdiff
path: root/src/nodedumper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nodedumper.h')
-rw-r--r--src/nodedumper.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/nodedumper.h b/src/nodedumper.h
new file mode 100644
index 0000000..568d578
--- /dev/null
+++ b/src/nodedumper.h
@@ -0,0 +1,37 @@
+#ifndef NODEDUMPER_H_
+#define NODEDUMPER_H_
+
+#include <string>
+#include <map>
+#include <list>
+#include "visitor.h"
+#include "nodecache.h"
+
+using std::string;
+using std::map;
+using std::list;
+
+class NodeDumper : public Visitor
+{
+public:
+ NodeDumper() : root(NULL) {}
+ virtual ~NodeDumper() {}
+
+ virtual Response visit(const State &state, const AbstractNode &node);
+
+ const string &getDump() const;
+private:
+ void handleVisitedChildren(const State &state, const AbstractNode &node);
+ bool isCached(const AbstractNode &node);
+ void handleIndent(const State &state);
+ string dumpChildren(const AbstractNode &node);
+
+ string currindent;
+ const AbstractNode *root;
+ typedef list<const AbstractNode *> ChildList;
+ map<int, ChildList> visitedchildren;
+ NodeCache<string> cache;
+};
+
+
+#endif
contact: Jan Huwald // Impressum