From 478a94757e9139a97146834de8e3d4507132aeb7 Mon Sep 17 00:00:00 2001 From: nicolassk Date: Wed, 11 Mar 2026 08:27:43 -0300 Subject: [PATCH] make iter_mut unsafe-less --- src/iter.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/iter.rs b/src/iter.rs index 403897c..06d5ade 100644 --- a/src/iter.rs +++ b/src/iter.rs @@ -248,7 +248,7 @@ impl Poptrie { pub struct IterMut<'a, P: Prefix, V> { entries: core::slice::Iter<'a, BTreeMap>>, current: btree_map::Iter<'a, PrefixId, Entry

>, - values: &'a mut [V], + values: Vec>, // Could be 15% faster with unsafe } impl<'a, P: Prefix, V> Iterator for IterMut<'a, P, V> { @@ -260,9 +260,7 @@ impl<'a, P: Prefix, V> Iterator for IterMut<'a, P, V> { if let Some(idx) = value_index.get() { // SAFETY: Each ValueIndex is unique across all entries so // no two yielded references alias. - return Some((prefix, unsafe { - &mut *self.values.as_mut_ptr().add(idx) - })); + return Some((prefix, self.values[idx].take().unwrap())); } } self.current = self.entries.next()?.iter(); @@ -297,7 +295,7 @@ impl Poptrie { IterMut { entries: entries_iter, current, - values: values.as_mut_slice(), + values: values.iter_mut().map(Some).collect(), } } }