diff options
author | Marius Kintel <marius@kintel.net> | 2011-08-04 02:58:17 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-08-04 02:58:17 (GMT) |
commit | cf4821c589dc5a43895c7ea781f6a916c8b5821c (patch) | |
tree | 5d3cf7a69f39187d2cc9b639cacfb68a812ae467 /src/traverser.cc | |
parent | e3e31c0f4f1049cb983906cc8fea83ef78611231 (diff) |
De-Qt-ified AbstractNode
Diffstat (limited to 'src/traverser.cc')
-rw-r--r-- | src/traverser.cc | 18 |
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()); |