fast_btree/
btree_map.rs

1use crate::btree_base::{
2    btree::BTree,
3    btree_traits::{BTreeParams, InnerValueType},
4    iter::TreeIterator,
5    DefaultBTreeConfig,
6};
7
8pub struct BTreeMap<T: BTreeParams>
9where
10    [(); T::LEAF_SLOTMAX]: Sized,
11    [(); T::INNER_SLOTMAX + 1]: Sized,
12{
13    _tree: BTree<T>,
14}
15
16impl<T: BTreeParams> BTreeMap<T>
17where
18    [(); T::LEAF_SLOTMAX]: Sized,
19    [(); T::INNER_SLOTMAX + 1]: Sized,
20{
21    pub fn is_empty(&self) -> bool {
22        self._tree.empty()
23    }
24
25    pub fn len(&self) -> usize {
26        self._tree.size()
27    }
28
29    pub fn contains_key(&self, key: &T::KeyType) -> bool {
30        self._tree.exists(key)
31    }
32
33    pub fn put(&mut self, key: T::KeyType, value: T::ValueType) {
34        if self._tree.exists(&key) {
35            self._tree.erase(&key);
36        }
37        self._tree.insert(InnerValueType(key, value));
38    }
39
40    pub fn get(&self, key: &T::KeyType) -> Option<&T::ValueType> {
41        let it = self._tree.find(key);
42        if it.equals(&self._tree.end()) {
43            None
44        } else {
45            let val = unsafe { (*it.curr_leaf).slotdata[it.curr_slot as usize].assume_init_ref() };
46
47            Some(val.value())
48        }
49    }
50
51    pub fn remove(&mut self, key: &T::KeyType) {
52        self._tree.erase(key);
53    }
54
55    pub fn new() -> Self {
56        Self {
57            _tree: BTree::new(),
58        }
59    }
60}
61
62pub type DefaultBTreeMap<K, V> = BTreeMap<DefaultBTreeConfig<K, V>>;