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>>;