};
template<typename T>
-class NodeGatherer: public TraversingVisitor
+class NodeGatherer: private TraversingVisitor
{
private:
std::vector<T *> nodes;
public:
- const std::vector<T *> &apply(Stage &s) { visit(s.content); return nodes; }
+ const std::vector<T *> &apply(Stage &s) { nodes.clear(); visit(s.content); return nodes; }
+private:
using TraversingVisitor::visit;
virtual void visit(T &n) { nodes.push_back(&n); }
};
-class NodeRemover: public TraversingVisitor
+class NodeRemover: private TraversingVisitor
{
private:
Stage *stage;
- std::set<Node *> to_remove;
+ const std::set<Node *> *to_remove;
public:
- NodeRemover(const std::set<Node *> &);
+ NodeRemover();
- void apply(Stage &);
+ void apply(Stage &, const std::set<Node *> &);
+private:
using TraversingVisitor::visit;
virtual void visit(Block &);
virtual void visit(VariableDeclaration &);