summaryrefslogtreecommitdiff
path: root/src/traverser.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-08-04 02:58:17 (GMT)
committerMarius Kintel <marius@kintel.net>2011-08-04 02:58:17 (GMT)
commitcf4821c589dc5a43895c7ea781f6a916c8b5821c (patch)
tree5d3cf7a69f39187d2cc9b639cacfb68a812ae467 /src/traverser.cc
parente3e31c0f4f1049cb983906cc8fea83ef78611231 (diff)
De-Qt-ified AbstractNode
Diffstat (limited to 'src/traverser.cc')
-rw-r--r--src/traverser.cc18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/traverser.cc b/src/traverser.cc
index 27bb116..a87449b 100644
--- a/src/traverser.cc
+++ b/src/traverser.cc
@@ -2,6 +2,7 @@
#include "visitor.h"
#include "node.h"
#include "state.h"
+#include <algorithm>
void Traverser::execute()
{
@@ -9,6 +10,15 @@ void Traverser::execute()
traverse(this->root, state);
}
+struct TraverseNode
+{
+ Traverser *traverser;
+ const State &state;
+ TraverseNode(Traverser *traverser, const State &state) :
+ traverser(traverser), state(state) {}
+ void operator()(const AbstractNode *node) { traverser->traverse(*node, state); }
+};
+
void Traverser::traverse(const AbstractNode &node, const State &state)
{
// FIXME: Handle abort
@@ -23,13 +33,7 @@ void Traverser::traverse(const AbstractNode &node, const State &state)
}
newstate.setParent(&node);
- const std::list<AbstractNode*> &children = node.getChildren();
- for (std::list<AbstractNode*>::const_iterator iter = children.begin();
- iter != children.end();
- iter++) {
-
- traverse(**iter, newstate);
- }
+ std::for_each(node.getChildren().begin(), node.getChildren().end(), TraverseNode(this, newstate));
if (traversaltype == POSTFIX || traversaltype == PRE_AND_POSTFIX) {
newstate.setParent(state.parent());
contact: Jan Huwald // Impressum