diff --git a/src/map.rs b/src/map.rs index 2faa19c..379d0fe 100644 --- a/src/map.rs +++ b/src/map.rs @@ -68,14 +68,18 @@ impl FrozenMap { } impl FrozenMap { + pub fn insert(&self, k: K, v: V) -> &V::Target { + self.insert_with(k, || v) + } + // these should never return &K or &V // these should never delete any entries - pub fn insert(&self, k: K, v: V) -> &V::Target { + pub fn insert_with(&self, k: K, v: impl FnOnce() -> V) -> &V::Target { assert!(!self.in_use.get()); self.in_use.set(true); let ret = unsafe { let map = self.map.get(); - &*(*map).entry(k).or_insert(v) + &*(*map).entry(k).or_insert_with(v) }; self.in_use.set(false); ret