1use crate::iter::{Iter, IterMut};
4use crate::lock::{RwLockReadGuard, RwLockWriteGuard};
5use crate::mapref::entry::Entry;
6use crate::mapref::one::{Ref, RefMut};
7use crate::try_result::TryResult;
8use crate::HashMap;
9use core::borrow::Borrow;
10use core::hash::{BuildHasher, Hash};
11
12pub trait Map<'a, K: 'a + Eq + Hash, V: 'a, S: 'a + Clone + BuildHasher> {
14 fn _shard_count(&self) -> usize;
15
16 unsafe fn _get_read_shard(&'a self, i: usize) -> &'a HashMap<K, V>;
20
21 unsafe fn _yield_read_shard(&'a self, i: usize) -> RwLockReadGuard<'a, HashMap<K, V>>;
25
26 unsafe fn _yield_write_shard(&'a self, i: usize) -> RwLockWriteGuard<'a, HashMap<K, V>>;
30
31 unsafe fn _try_yield_read_shard(
35 &'a self,
36 i: usize,
37 ) -> Option<RwLockReadGuard<'a, HashMap<K, V>>>;
38
39 unsafe fn _try_yield_write_shard(
43 &'a self,
44 i: usize,
45 ) -> Option<RwLockWriteGuard<'a, HashMap<K, V>>>;
46
47 fn _insert(&self, key: K, value: V) -> Option<V>;
48
49 fn _remove<Q>(&self, key: &Q) -> Option<(K, V)>
50 where
51 K: Borrow<Q>,
52 Q: Hash + Eq + ?Sized;
53
54 fn _remove_if<Q>(&self, key: &Q, f: impl FnOnce(&K, &V) -> bool) -> Option<(K, V)>
55 where
56 K: Borrow<Q>,
57 Q: Hash + Eq + ?Sized;
58
59 fn _remove_if_mut<Q>(&self, key: &Q, f: impl FnOnce(&K, &mut V) -> bool) -> Option<(K, V)>
60 where
61 K: Borrow<Q>,
62 Q: Hash + Eq + ?Sized;
63
64 fn _iter(&'a self) -> Iter<'a, K, V, S, Self>
65 where
66 Self: Sized;
67
68 fn _iter_mut(&'a self) -> IterMut<'a, K, V, S, Self>
69 where
70 Self: Sized;
71
72 fn _get<Q>(&'a self, key: &Q) -> Option<Ref<'a, K, V>>
73 where
74 K: Borrow<Q>,
75 Q: Hash + Eq + ?Sized;
76
77 fn _get_mut<Q>(&'a self, key: &Q) -> Option<RefMut<'a, K, V>>
78 where
79 K: Borrow<Q>,
80 Q: Hash + Eq + ?Sized;
81
82 fn _try_get<Q>(&'a self, key: &Q) -> TryResult<Ref<'a, K, V>>
83 where
84 K: Borrow<Q>,
85 Q: Hash + Eq + ?Sized;
86
87 fn _try_get_mut<Q>(&'a self, key: &Q) -> TryResult<RefMut<'a, K, V>>
88 where
89 K: Borrow<Q>,
90 Q: Hash + Eq + ?Sized;
91
92 fn _shrink_to_fit(&self);
93
94 fn _retain(&self, f: impl FnMut(&K, &mut V) -> bool);
95
96 fn _len(&self) -> usize;
97
98 fn _capacity(&self) -> usize;
99
100 fn _alter<Q>(&self, key: &Q, f: impl FnOnce(&K, V) -> V)
101 where
102 K: Borrow<Q>,
103 Q: Hash + Eq + ?Sized;
104
105 fn _alter_all(&self, f: impl FnMut(&K, V) -> V);
106
107 fn _view<Q, R>(&self, key: &Q, f: impl FnOnce(&K, &V) -> R) -> Option<R>
108 where
109 K: Borrow<Q>,
110 Q: Hash + Eq + ?Sized;
111
112 fn _entry(&'a self, key: K) -> Entry<'a, K, V>;
113
114 fn _try_entry(&'a self, key: K) -> Option<Entry<'a, K, V>>;
115
116 fn _hasher(&self) -> S;
117
118 fn _clear(&self) {
120 self._retain(|_, _| false)
121 }
122
123 fn _contains_key<Q>(&'a self, key: &Q) -> bool
124 where
125 K: Borrow<Q>,
126 Q: Hash + Eq + ?Sized,
127 {
128 self._get(key).is_some()
129 }
130
131 fn _is_empty(&self) -> bool {
132 self._len() == 0
133 }
134}