in merkledb/src/merkledb_highlevel_v1.rs [42:68]
fn build_cas_nodes(&mut self, db: &mut (impl MerkleDBBase + ?Sized), flush: bool) {
if self.nodes_without_cas_entry_length >= self.cas_block_size {
let mut running_sum: usize = 0;
let mut start = 0;
for i in 0..self.nodes_without_cas_entry.len() {
running_sum += self.nodes_without_cas_entry[i].len();
if running_sum >= self.cas_block_size {
let end = i + 1;
let cas_root = merge(db, self.nodes_without_cas_entry[start..end].to_vec(), false, true);
self.cas_roots.push(cas_root);
for j in start..end {
self.ids_in_nodes_without_cas_entry
.remove(&self.nodes_without_cas_entry[j].id());
}
self.nodes_without_cas_entry_length -= running_sum;
start = end;
running_sum = 0;
}
}
self.nodes_without_cas_entry = self.nodes_without_cas_entry[start..].to_vec();
}
if flush && !self.nodes_without_cas_entry.is_empty() {
let cas_root = merge(db, std::mem::take(&mut self.nodes_without_cas_entry), false, true);
self.cas_roots.push(cas_root);
}
}