Skip to main content

graphrecords_python/
conversion_lut.rs

1use 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}