aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/query/tree/intermediate.h
blob: 83e804a85cbd9cbb0dec6ea31fb69d67a2d485c5 (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
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once

#include "node.h"
#include <vector>

namespace search::query {

class Intermediate : public Node
{
    std::vector<Node *> _children;
 public:
    using UP = std::unique_ptr<Intermediate>;

    Intermediate(const Intermediate & rhs) = delete;
    Intermediate & operator = (const Intermediate & rhs) = delete;

    Intermediate() = default;
    virtual ~Intermediate() = 0;
    bool isIntermediate() const override { return true; }

    const std::vector<Node *> &getChildren() const { return _children; }
    Intermediate &reserve(size_t sz) { _children.reserve(sz); return *this; }
    Intermediate &prepend(Node::UP child);
    Intermediate &append(Node::UP child);
    Node::UP stealFirst();
};

}