graphrecords_python/
conversion_lut.rs1use graphrecords_utils::aliases::GrHashMap;
2use parking_lot::Mutex;
3use rustc_hash::FxBuildHasher;
4use std::hash::Hash;
5
6type FxGrHashMap<K, V> = GrHashMap<K, V, FxBuildHasher>;
7
8pub(crate) struct ConversionLut<K, V>(Mutex<FxGrHashMap<K, V>>);
9
10impl<K, V> ConversionLut<K, V> {
11 pub const fn new() -> Self {
12 Self(Mutex::new(FxGrHashMap::with_hasher(FxBuildHasher)))
13 }
14
15 pub fn get_or_insert<F>(&self, key: K, insert_fn: F) -> V
16 where
17 K: Eq + Hash,
18 V: Copy,
19 F: FnOnce() -> V,
20 {
21 let mut inner = self.0.lock();
22 *inner.entry(key).or_insert_with(insert_fn)
23 }
24}