37 , max_leaves(1 << depth)
42 assert(num_default_values > 0);
45 default_leaves.reserve(num_default_values);
47 for (
size_t i = 0; i < num_default_values; ++i) {
49 default_leaves.push_back(LeafType::padding(i + 1));
55 for (
size_t i = 0; i < default_leaves.size(); ++i) {
57 index_t next_index = i == (default_leaves.size() - 1) ? 0 : i + 1;
58 FF next_key = i == (default_leaves.size() - 1) ? 0 : default_leaves.at(i + 1).get_key();
65 tree.update_element(i, leaf_hash);
119 for (
const auto& leaf_to_insert : leaves_to_insert) {
120 FF key = leaf_to_insert.get_key();
125 low_leaf, find_low_leaf_result.
index, tree.get_sibling_path(find_low_leaf_result.
index)));
130 index_t insertion_index = leaves.size();
135 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
137 append_leaf(new_indexed_leaf);
139 tree.update_element(insertion_index, new_leaf_hash);
142 new_indexed_leaf, insertion_index, tree.get_sibling_path(insertion_index)));
144 }
else if (LeafType::is_updateable()) {
148 tree.update_element(find_low_leaf_result.
index, low_leaf_hash);
154 throw std::runtime_error(
"Leaf is not updateable");