summaryrefslogtreecommitdiff
path: root/src/Tree.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Tree.cc')
-rw-r--r--src/Tree.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Tree.cc b/src/Tree.cc
new file mode 100644
index 0000000..a451f24
--- /dev/null
+++ b/src/Tree.cc
@@ -0,0 +1,30 @@
+#include "Tree.h"
+#include "nodedumper.h"
+
+#include <assert.h>
+
+/*!
+ Returns the cached string representation of the subtree rootet by \a node.
+ If node is not cached, the cache will be rebuilt.
+*/
+const std::string &Tree::getString(const AbstractNode &node) const
+{
+ assert(this->root_node);
+ if (!this->nodecache.contains(node)) {
+ NodeDumper dumper(this->nodecache, false);
+ Traverser trav(dumper, *this->root_node, Traverser::PRE_AND_POSTFIX);
+ trav.execute();
+ assert(this->nodecache.contains(*this->root_node) &&
+ "NodeDumper failed to create a cache");
+ }
+ return this->nodecache[node];
+}
+
+/*!
+ Sets a new root. Will clear the existing cache.
+ */
+void Tree::setRoot(const AbstractNode *root)
+{
+ this->root_node = root;
+ this->nodecache.clear();
+}
contact: Jan Huwald // Impressum