38 , max_leaves(1 << depth)
43 BB_ASSERT_GT(num_default_values,
static_cast<size_t>(0),
"Number of default values is not greater than 0");
46 default_leaves.reserve(num_default_values);
48 for (
size_t i = 0; i < num_default_values; ++i) {
50 default_leaves.push_back(LeafType::padding(i + 1));
56 for (
size_t i = 0; i < default_leaves.size(); ++i) {
58 index_t next_index = i == (default_leaves.size() - 1) ? 0 : i + 1;
59 FF next_key = i == (default_leaves.size() - 1) ? 0 : default_leaves.at(i + 1).get_key();
66 tree.update_element(i, leaf_hash);
147 for (
const auto& leaf_to_insert : leaves_to_insert) {
148 FF key = leaf_to_insert.get_key();
153 low_leaf, find_low_leaf_result.
index, tree.get_sibling_path(find_low_leaf_result.
index)));
158 index_t insertion_index = leaves.size();
163 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
165 append_leaf(new_indexed_leaf);
167 tree.update_element(insertion_index, new_leaf_hash);
170 new_indexed_leaf, insertion_index, tree.get_sibling_path(insertion_index)));
172 }
else if (LeafType::is_updateable()) {
176 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
182 throw std::runtime_error(
"Leaf is not updateable");