1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
use std::sync::Arc; use std::sync::atomic::{AtomicUsize, Ordering}; use super::*; pub struct DB { tree: Arc<Tree>, esl: Arc<AtomicUsize>, } impl DB { pub fn new(path: Option<String>) -> DB { let tree = Tree::new(path); DB { tree: Arc::new(tree), esl: Arc::new(AtomicUsize::new(0)), } } pub fn insert(&self, k: Key, v: Value) { self.esl.fetch_add(1, Ordering::SeqCst); self.tree.set(k, v); } pub fn read(&self, k: Key) -> Option<Value> { self.tree.get(&*k) } pub fn del(&self, k: Key) { self.esl.fetch_add(1, Ordering::SeqCst); self.tree.del(&*k); } }