38 , max_leaves(1 << depth)
43 assert(num_default_values > 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);
146 for (
const auto& leaf_to_insert : leaves_to_insert) {
147 FF key = leaf_to_insert.get_key();
152 low_leaf, find_low_leaf_result.
index, tree.get_sibling_path(find_low_leaf_result.
index)));
157 index_t insertion_index = leaves.size();
162 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
164 append_leaf(new_indexed_leaf);
166 tree.update_element(insertion_index, new_leaf_hash);
169 new_indexed_leaf, insertion_index, tree.get_sibling_path(insertion_index)));
171 }
else if (LeafType::is_updateable()) {
175 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
181 throw std::runtime_error(
"Leaf is not updateable");