[−][src]Struct memory_db::MemoryDB
Reference-counted memory-based HashDB
implementation.
Use new()
to create a new database. Insert items with insert()
, remove items
with remove()
, check for existence with contains()
and lookup a hash to derive
the data with get()
. Clear with clear()
and purge the portions of the data
that have no references with purge()
.
Example
use hash_db::{Hasher, HashDB, EMPTY_PREFIX}; use keccak_hasher::KeccakHasher; use memory_db::{MemoryDB, HashKey}; fn main() { let mut m = MemoryDB::<KeccakHasher, HashKey<_>, Vec<u8>>::default(); let d = "Hello world!".as_bytes(); let k = m.insert(EMPTY_PREFIX, d); assert!(m.contains(&k, EMPTY_PREFIX)); assert_eq!(m.get(&k, EMPTY_PREFIX).unwrap(), d); m.insert(EMPTY_PREFIX, d); assert!(m.contains(&k, EMPTY_PREFIX)); m.remove(&k, EMPTY_PREFIX); assert!(m.contains(&k, EMPTY_PREFIX)); m.remove(&k, EMPTY_PREFIX); assert!(!m.contains(&k, EMPTY_PREFIX)); m.remove(&k, EMPTY_PREFIX); assert!(!m.contains(&k, EMPTY_PREFIX)); m.insert(EMPTY_PREFIX, d); assert!(!m.contains(&k, EMPTY_PREFIX)); m.insert(EMPTY_PREFIX, d); assert!(m.contains(&k, EMPTY_PREFIX)); assert_eq!(m.get(&k, EMPTY_PREFIX).unwrap(), d); m.remove(&k, EMPTY_PREFIX); assert!(!m.contains(&k, EMPTY_PREFIX)); }
Implementations
impl<H, KF, T> MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default,
KF: KeyFunction<H>,
[src]
H: KeyHasher,
T: Default,
KF: KeyFunction<H>,
Create a new MemoryDB
from a given null key/data
pub fn remove_and_purge(
&mut self,
key: &<H as KeyHasher>::Out,
prefix: Prefix<'_>
) -> Option<T>
[src]
&mut self,
key: &<H as KeyHasher>::Out,
prefix: Prefix<'_>
) -> Option<T>
Remove an element and delete it from storage if reference count reaches zero. If the value was purged, return the old value.
impl<'a, H: KeyHasher, KF, T> MemoryDB<H, KF, T> where
H: KeyHasher,
T: From<&'a [u8]>,
KF: KeyFunction<H>,
[src]
H: KeyHasher,
T: From<&'a [u8]>,
KF: KeyFunction<H>,
pub fn from_null_node(null_key: &'a [u8], null_node_data: T) -> Self
[src]
Create a new MemoryDB
from a given null key/data
pub fn new(data: &'a [u8]) -> Self
[src]
Create a new instance of Self
.
pub fn default_with_root() -> (Self, H::Out)
[src]
Create a new default instance of Self
and returns Self
and the root hash.
pub fn clear(&mut self)
[src]
Clear all data from the database.
Examples
extern crate hash_db; extern crate keccak_hasher; extern crate memory_db; use hash_db::{Hasher, HashDB, EMPTY_PREFIX}; use keccak_hasher::KeccakHasher; use memory_db::{MemoryDB, HashKey}; fn main() { let mut m = MemoryDB::<KeccakHasher, HashKey<_>, Vec<u8>>::default(); let hello_bytes = "Hello world!".as_bytes(); let hash = m.insert(EMPTY_PREFIX, hello_bytes); assert!(m.contains(&hash, EMPTY_PREFIX)); m.clear(); assert!(!m.contains(&hash, EMPTY_PREFIX)); }
pub fn purge(&mut self)
[src]
Purge all zero-referenced data from the database.
pub fn drain(&mut self) -> HashMap<KF::Key, (T, i32)>
[src]
Return the internal map of hashes to data, clearing the current state.
pub fn raw(
&self,
key: &<H as KeyHasher>::Out,
prefix: Prefix<'_>
) -> Option<(&T, i32)>
[src]
&self,
key: &<H as KeyHasher>::Out,
prefix: Prefix<'_>
) -> Option<(&T, i32)>
Grab the raw information associated with a key. Returns None if the key doesn't exist.
Even when Some is returned, the data is only guaranteed to be useful when the refs > 0.
pub fn consolidate(&mut self, other: Self)
[src]
Consolidate all the entries of other
into self
.
pub fn keys(&self) -> HashMap<KF::Key, i32>
[src]
Get the keys in the database together with number of underlying references.
Trait Implementations
impl<H, KF, T> AsHashDB<H, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
fn as_hash_db(&self) -> &dyn HashDB<H, T>
[src]
fn as_hash_db_mut(&mut self) -> &mut dyn HashDB<H, T>
[src]
impl<H, KF, T> AsPlainDB<<H as Hasher>::Out, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
fn as_plain_db(&self) -> &dyn PlainDB<H::Out, T>
[src]
fn as_plain_db_mut(&mut self) -> &mut dyn PlainDB<H::Out, T>
[src]
impl<H: KeyHasher, KF: KeyFunction<H>, T: Clone> Clone for MemoryDB<H, KF, T>
[src]
fn clone(&self) -> Self
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<'a, H, KF, T> Default for MemoryDB<H, KF, T> where
H: KeyHasher,
T: From<&'a [u8]>,
KF: KeyFunction<H>,
[src]
H: KeyHasher,
T: From<&'a [u8]>,
KF: KeyFunction<H>,
impl<H, KF, T> Eq for MemoryDB<H, KF, T> where
H: KeyHasher,
KF: KeyFunction<H>,
<KF as KeyFunction<H>>::Key: Eq + MaybeDebug,
T: Eq + MaybeDebug,
[src]
H: KeyHasher,
KF: KeyFunction<H>,
<KF as KeyFunction<H>>::Key: Eq + MaybeDebug,
T: Eq + MaybeDebug,
impl<H, KF, T> HashDB<H, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
fn get(&self, key: &H::Out, prefix: Prefix<'_>) -> Option<T>
[src]
fn contains(&self, key: &H::Out, prefix: Prefix<'_>) -> bool
[src]
fn emplace(&mut self, key: H::Out, prefix: Prefix<'_>, value: T)
[src]
fn insert(&mut self, prefix: Prefix<'_>, value: &[u8]) -> H::Out
[src]
fn remove(&mut self, key: &H::Out, prefix: Prefix<'_>)
[src]
impl<H, KF, T> HashDBRef<H, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
fn get(&self, key: &H::Out, prefix: Prefix<'_>) -> Option<T>
[src]
fn contains(&self, key: &H::Out, prefix: Prefix<'_>) -> bool
[src]
impl<H, KF, T> MallocSizeOf for MemoryDB<H, KF, T> where
H: KeyHasher,
H::Out: MallocSizeOf,
T: MallocSizeOf,
KF: KeyFunction<H>,
KF::Key: MallocSizeOf,
[src]
H: KeyHasher,
H::Out: MallocSizeOf,
T: MallocSizeOf,
KF: KeyFunction<H>,
KF::Key: MallocSizeOf,
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
[src]
impl<H, KF, T> PartialEq<MemoryDB<H, KF, T>> for MemoryDB<H, KF, T> where
H: KeyHasher,
KF: KeyFunction<H>,
<KF as KeyFunction<H>>::Key: Eq + MaybeDebug,
T: Eq + MaybeDebug,
[src]
H: KeyHasher,
KF: KeyFunction<H>,
<KF as KeyFunction<H>>::Key: Eq + MaybeDebug,
T: Eq + MaybeDebug,
fn eq(&self, other: &MemoryDB<H, KF, T>) -> bool
[src]
#[must_use]fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<H, KF, T> PlainDB<<H as Hasher>::Out, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
fn get(&self, key: &H::Out) -> Option<T>
[src]
fn contains(&self, key: &H::Out) -> bool
[src]
fn emplace(&mut self, key: H::Out, value: T)
[src]
fn remove(&mut self, key: &H::Out)
[src]
impl<H, KF, T> PlainDBRef<<H as Hasher>::Out, T> for MemoryDB<H, KF, T> where
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
[src]
H: KeyHasher,
T: Default + PartialEq<T> + for<'a> From<&'a [u8]> + Clone + Send + Sync,
KF: Send + Sync + KeyFunction<H>,
KF::Key: Borrow<[u8]> + for<'a> From<&'a [u8]>,
Auto Trait Implementations
impl<H, KF, T> RefUnwindSafe for MemoryDB<H, KF, T> where
KF: RefUnwindSafe,
T: RefUnwindSafe,
<KF as KeyFunction<H>>::Key: RefUnwindSafe,
<H as Hasher>::Out: RefUnwindSafe,
KF: RefUnwindSafe,
T: RefUnwindSafe,
<KF as KeyFunction<H>>::Key: RefUnwindSafe,
<H as Hasher>::Out: RefUnwindSafe,
impl<H, KF, T> Send for MemoryDB<H, KF, T> where
KF: Send,
T: Send,
<KF as KeyFunction<H>>::Key: Send,
<H as Hasher>::Out: Send,
KF: Send,
T: Send,
<KF as KeyFunction<H>>::Key: Send,
<H as Hasher>::Out: Send,
impl<H, KF, T> Sync for MemoryDB<H, KF, T> where
KF: Sync,
T: Sync,
<KF as KeyFunction<H>>::Key: Sync,
<H as Hasher>::Out: Sync,
KF: Sync,
T: Sync,
<KF as KeyFunction<H>>::Key: Sync,
<H as Hasher>::Out: Sync,
impl<H, KF, T> Unpin for MemoryDB<H, KF, T> where
KF: Unpin,
T: Unpin,
<KF as KeyFunction<H>>::Key: Unpin,
<H as Hasher>::Out: Unpin,
KF: Unpin,
T: Unpin,
<KF as KeyFunction<H>>::Key: Unpin,
<H as Hasher>::Out: Unpin,
impl<H, KF, T> UnwindSafe for MemoryDB<H, KF, T> where
KF: UnwindSafe,
T: UnwindSafe,
<KF as KeyFunction<H>>::Key: UnwindSafe,
<H as Hasher>::Out: UnwindSafe,
KF: UnwindSafe,
T: UnwindSafe,
<KF as KeyFunction<H>>::Key: UnwindSafe,
<H as Hasher>::Out: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> MallocSizeOfExt for T where
T: MallocSizeOf,
[src]
T: MallocSizeOf,
fn malloc_size_of(&self) -> usize
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,