use crate::collections::BTreeMap; use crate::{MMR, MMRStoreReadOps, MMRStoreWriteOps, Result, vec::Vec}; use core::cell::RefCell; #[derive(Clone)] pub struct MemStore(RefCell>); impl Default for MemStore { fn default() -> Self { Self::new() } } impl MemStore { fn new() -> Self { MemStore(RefCell::new(Default::default())) } } impl MMRStoreReadOps for &MemStore { fn get_elem(&self, pos: u64) -> Result> { Ok(self.0.borrow().get(&pos).cloned()) } } impl MMRStoreWriteOps for &MemStore { fn append(&mut self, pos: u64, elems: Vec) -> Result<()> { let mut store = self.0.borrow_mut(); for (i, elem) in elems.into_iter().enumerate() { store.insert(pos + i as u64, elem); } Ok(()) } } pub type MemMMR<'a, T, M> = MMR>;