cfx_storage/impls/delta_mpt/
delta_mpt_iterator.rs

1// Copyright 2019 Conflux Foundation. All rights reserved.
2// Conflux is free software and distributed under GNU General Public License.
3// See http://www.gnu.org/licenses/
4
5#[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;