Skip to main content

reifydb_runtime/sync/map/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use 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}