cfx_storage/impls/delta_mpt/
delta_mpt_iterator.rs1#[derive(Clone)]
6pub struct DeltaMptIterator {
7 pub mpt: Arc<DeltaMpt>,
8 pub maybe_root_node: Option<NodeRefDeltaMpt>,
9}
10
11impl DeltaMptIterator {
12 pub fn iterate<'a, DeltaMptDumper: KVInserter<MptKeyValue>>(
13 &self, dumper: &mut DeltaMptDumper,
14 ) -> Result<()> {
15 match &self.maybe_root_node {
16 None => {}
17 Some(root_node) => {
18 let arc_db = self.mpt.get_arc_db()?;
19 let db = &mut *arc_db.to_owned_read()?;
20 let owned_node_set = Default::default();
21 let mut cow_root_node = CowNodeRef::new(
22 root_node.clone(),
23 &owned_node_set,
24 self.mpt.get_mpt_id(),
25 );
26 let guarded_trie_node =
27 GuardedValue::take(cow_root_node.get_trie_node(
28 self.mpt.get_node_memory_manager(),
29 &self.mpt.get_node_memory_manager().get_allocator(),
30 db,
31 )?);
32 cow_root_node.iterate_internal(
33 &owned_node_set,
34 &self.mpt,
35 guarded_trie_node,
36 CompressedPathRaw::new_zeroed(0, 0),
37 dumper,
38 db,
39 )?;
40 }
41 }
42
43 Ok(())
44 }
45}
46
47use crate::{
48 impls::{
49 delta_mpt::{CowNodeRef, DeltaMpt, NodeRefDeltaMpt},
50 errors::Result,
51 merkle_patricia_trie::{CompressedPathRaw, KVInserter, MptKeyValue},
52 },
53 utils::guarded_value::GuardedValue,
54};
55use std::sync::Arc;