blitz_query_cpp
27 строк · 842.0 Байт
1#include <syntax/syntax_node.hpp>
2
3using namespace blitz_query_cpp;
4
5
6bool syntax_node::add_child(syntax_node *child_node)
7{
8size_t current_size = children.size();
9if (static_storage *storage = std::get_if<static_storage>(&child_storage))
10{
11if (current_size < storage->max_size())
12{
13children = node_span(storage->begin(), current_size + 1);
14children.back() = child_node;
15return true;
16}
17dynamic_storage dyn_store{storage->begin(), storage->end()};
18child_storage = std::move(dyn_store);
19}
20if (dynamic_storage *storage = std::get_if<dynamic_storage>(&child_storage))
21{
22storage->push_back(child_node);
23children = node_span(storage->begin(), storage->end());
24return true;
25}
26return false;
27}