aboutsummaryrefslogtreecommitdiffstats
path: root/eval/src/vespa/eval/eval/delete_node.cpp
blob: f57c7f2bd680d93920b18bb244485d32cc319ae8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "key_gen.h"
#include "node_visitor.h"
#include "node_traverser.h"

namespace vespalib::eval {

namespace {

struct ChildReaper : public NodeTraverser, public NodeHandler {
    void handle(nodes::Node_UP) override {}
    bool open(const nodes::Node &) override { return true; }
    void close(const nodes::Node &node) override {
        nodes::Node &mutable_node = const_cast<nodes::Node&>(node);
        mutable_node.detach_children(*this);
    }
};

} // namespace vespalib::nodes::<unnamed>

void
delete_node(nodes::Node_UP node)
{
    if (node) {
        ChildReaper reaper;
        node->traverse(reaper);
    }
}

}