summaryrefslogtreecommitdiff
path: root/src/nodedumper.h
diff options
context:
space:
mode:
authorMarius Kintel <kintel@sim.no>2010-03-02 18:22:31 (GMT)
committerMarius Kintel <marius@kintel.net>2010-10-31 00:42:34 (GMT)
commit393c5a19fedfa4f97ca939fbcf52c2ccab1cde6a (patch)
treefbcb75d32e8763aac3f0ad28528936a0ec11930b /src/nodedumper.h
parent746159d1838e895e80725cdc892f7bef85feb1af (diff)
Committed current version of visitor refactoring
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