reifydb_runtime/sync/map/
mod.rs1use std::{borrow::Borrow, hash::Hash};
5
6use cfg_if::cfg_if;
7
8#[cfg(not(reifydb_single_threaded))]
9pub(crate) mod native;
10
11#[cfg(reifydb_single_threaded)]
12pub(crate) mod wasm;
13
14cfg_if! {
15 if #[cfg(not(reifydb_single_threaded))] {
16 type MapInnerImpl<K, V> = native::MapInner<K, V>;
17 } else {
18 type MapInnerImpl<K, V> = wasm::MapInner<K, V>;
19 }
20}
21
22pub struct Map<K, V>
23where
24 K: Eq + Hash,
25{
26 inner: MapInnerImpl<K, V>,
27}
28
29impl<K, V> Map<K, V>
30where
31 K: Eq + Hash,
32{
33 #[inline]
34 pub fn new() -> Self {
35 Self {
36 inner: MapInnerImpl::new(),
37 }
38 }
39
40 #[inline]
41 pub fn get_or_insert_with<F>(&self, key: K, f: F) -> V
42 where
43 F: FnOnce() -> V,
44 V: Clone,
45 K: Clone,
46 {
47 self.inner.get_or_insert_with(key, f)
48 }
49
50 #[inline]
51 pub fn get<Q>(&self, key: &Q) -> Option<V>
52 where
53 K: Borrow<Q>,
54 Q: Hash + Eq + ?Sized,
55 V: Clone,
56 {
57 self.inner.get(key)
58 }
59
60 #[inline]
61 pub fn contains_key<Q>(&self, key: &Q) -> bool
62 where
63 K: Borrow<Q>,
64 Q: Hash + Eq + ?Sized,
65 {
66 self.inner.contains_key(key)
67 }
68
69 #[inline]
70 pub fn with_read<Q, R, F>(&self, key: &Q, f: F) -> Option<R>
71 where
72 K: Borrow<Q>,
73 Q: Hash + Eq + ?Sized,
74 F: FnOnce(&V) -> R,
75 {
76 self.inner.with_read(key, f)
77 }
78
79 #[inline]
80 pub fn insert(&self, key: K, value: V)
81 where
82 K: Clone,
83 {
84 self.inner.insert(key, value);
85 }
86
87 #[inline]
88 pub fn remove<Q>(&self, key: &Q) -> Option<V>
89 where
90 K: Borrow<Q>,
91 Q: Hash + Eq + ?Sized,
92 {
93 self.inner.remove(key)
94 }
95
96 #[inline]
97 pub fn keys(&self) -> Vec<K>
98 where
99 K: Clone,
100 {
101 self.inner.keys()
102 }
103
104 #[inline]
105 pub fn keys_into(&self, buf: &mut Vec<K>)
106 where
107 K: Clone,
108 {
109 self.inner.keys_into(buf)
110 }
111
112 #[inline]
113 pub fn with_write<Q, R, F>(&self, key: &Q, f: F) -> Option<R>
114 where
115 K: Borrow<Q>,
116 Q: Hash + Eq + ?Sized,
117 F: FnOnce(&mut V) -> R,
118 {
119 self.inner.with_write(key, f)
120 }
121
122 #[inline]
123 pub fn clear(&self) {
124 self.inner.clear();
125 }
126}
127
128impl<K, V> Default for Map<K, V>
129where
130 K: Eq + Hash,
131{
132 #[inline]
133 fn default() -> Self {
134 Self::new()
135 }
136}