Trait ethcore_util::hashdb::HashDB [] [src]

pub trait HashDB: AsHashDB + Send + Sync {
    fn keys(&self) -> HashMap<H256, i32>;
    fn get(&self, key: &H256) -> Option<DBValue>;
    fn contains(&self, key: &H256) -> bool;
    fn insert(&mut self, value: &[u8]) -> H256;
    fn emplace(&mut self, key: H256, value: DBValue);
    fn remove(&mut self, key: &H256);
}

Trait modelling datastore keyed by a 32-byte Keccak hash.

Required Methods

Get the keys in the database together with number of underlying references.

Look up a given hash into the bytes that hash to it, returning None if the hash is not known.

Examples

extern crate ethcore_util;
use ethcore_util::hashdb::*;
use ethcore_util::memorydb::*;
fn main() {
  let mut m = MemoryDB::new();
  let hello_bytes = "Hello world!".as_bytes();
  let hash = m.insert(hello_bytes);
  assert_eq!(m.get(&hash).unwrap(), hello_bytes);
}

Check for the existance of a hash-key.

Examples

extern crate ethcore_util;
use ethcore_util::hashdb::*;
use ethcore_util::memorydb::*;
use ethcore_util::sha3::*;
fn main() {
  let mut m = MemoryDB::new();
  let hello_bytes = "Hello world!".as_bytes();
  assert!(!m.contains(&hello_bytes.sha3()));
  let key = m.insert(hello_bytes);
  assert!(m.contains(&key));
  m.remove(&key);
  assert!(!m.contains(&key));
}

Insert a datum item into the DB and return the datum's hash for a later lookup. Insertions are counted and the equivalent number of remove()s must be performed before the data is considered dead.

Examples

extern crate ethcore_util;
use ethcore_util::hashdb::*;
use ethcore_util::memorydb::*;
use ethcore_util::hash::*;
fn main() {
  let mut m = MemoryDB::new();
  let key = m.insert("Hello world!".as_bytes());
  assert!(m.contains(&key));
}

Like insert() , except you provide the key and the data is all moved.

Remove a datum previously inserted. Insertions can be "owed" such that the same number of insert()s may happen without the data being eventually being inserted into the DB.

Examples

extern crate ethcore_util;
use ethcore_util::hashdb::*;
use ethcore_util::memorydb::*;
use ethcore_util::sha3::*;
fn main() {
  let mut m = MemoryDB::new();
  let d = "Hello world!".as_bytes();
  let key = &d.sha3();
  m.remove(key);    // OK - we now owe an insertion.
  assert!(!m.contains(key));
  m.insert(d);  // OK - now it's "empty" again.
  assert!(!m.contains(key));
  m.insert(d);  // OK - now we've
  assert_eq!(m.get(key).unwrap(), d);
}

Implementors