sparse_merkle_tree/
default_store.rs1use crate::{
2 collections,
3 error::Error,
4 traits::{StoreReadOps, StoreWriteOps},
5 tree::{BranchKey, BranchNode},
6 H256,
7};
8
9#[derive(Debug, Clone, Default)]
10pub struct DefaultStore<V> {
11 branches_map: Map<BranchKey, BranchNode>,
12 leaves_map: Map<H256, V>,
13}
14
15impl<V> DefaultStore<V> {
16 pub fn branches_map(&self) -> &Map<BranchKey, BranchNode> {
17 &self.branches_map
18 }
19 pub fn leaves_map(&self) -> &Map<H256, V> {
20 &self.leaves_map
21 }
22 pub fn clear(&mut self) {
23 self.branches_map.clear();
24 self.leaves_map.clear();
25 }
26}
27
28impl<V: Clone> StoreReadOps<V> for DefaultStore<V> {
29 fn get_branch(&self, branch_key: &BranchKey) -> Result<Option<BranchNode>, Error> {
30 Ok(self.branches_map.get(branch_key).map(Clone::clone))
31 }
32 fn get_leaf(&self, leaf_key: &H256) -> Result<Option<V>, Error> {
33 Ok(self.leaves_map.get(leaf_key).map(Clone::clone))
34 }
35}
36
37impl<V> StoreWriteOps<V> for DefaultStore<V> {
38 fn insert_branch(&mut self, branch_key: BranchKey, branch: BranchNode) -> Result<(), Error> {
39 self.branches_map.insert(branch_key, branch);
40 Ok(())
41 }
42 fn insert_leaf(&mut self, leaf_key: H256, leaf: V) -> Result<(), Error> {
43 self.leaves_map.insert(leaf_key, leaf);
44 Ok(())
45 }
46 fn remove_branch(&mut self, branch_key: &BranchKey) -> Result<(), Error> {
47 self.branches_map.remove(branch_key);
48 Ok(())
49 }
50 fn remove_leaf(&mut self, leaf_key: &H256) -> Result<(), Error> {
51 self.leaves_map.remove(leaf_key);
52 Ok(())
53 }
54}
55
56cfg_if::cfg_if! {
57 if #[cfg(feature = "std")] {
58 pub type Map<K, V> = collections::HashMap<K, V>;
59 pub type Entry<'a, K, V> = collections::hash_map::Entry<'a, K, V>;
60 } else {
61 pub type Map<K, V> = collections::BTreeMap<K, V>;
62 pub type Entry<'a, K, V> = collections::btree_map::Entry<'a, K, V>;
63 }
64}