Skip to content

Commit bf3247f

Browse files
author
Cole Miller
committed
Replace some custom unsafe code with array::map
`<[T; N]>::map` was recently stabilized. It's not on any stable or beta yet, but we're only using it here with `cfg(feature = "nightly")`.
1 parent d5002fa commit bf3247f

File tree

1 file changed

+3
-23
lines changed

1 file changed

+3
-23
lines changed

src/map.rs

+3-23
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ use core::hash::{BuildHasher, Hash};
88
use core::iter::{FromIterator, FusedIterator};
99
use core::marker::PhantomData;
1010
use core::mem;
11-
#[cfg(feature = "nightly")]
12-
use core::mem::MaybeUninit;
1311
use core::ops::Index;
1412

1513
/// Default hasher for `HashMap`.
@@ -1149,16 +1147,7 @@ where
11491147
K: Borrow<Q>,
11501148
Q: Hash + Eq,
11511149
{
1152-
let mut pairs = self.get_each_inner_mut(ks);
1153-
// TODO use `MaybeUninit::uninit_array` here instead once that's stable.
1154-
let mut out: [MaybeUninit<Result<&'_ mut V, UnavailableMutError>>; N] =
1155-
unsafe { MaybeUninit::uninit().assume_init() };
1156-
for i in 0..N {
1157-
out[i] = MaybeUninit::new(
1158-
mem::replace(&mut pairs[i], Err(UnavailableMutError::Absent)).map(|(_, v)| v),
1159-
);
1160-
}
1161-
unsafe { MaybeUninit::array_assume_init(out) }
1150+
self.get_each_inner_mut(ks).map(|res| res.map(|(_, v)| v))
11621151
}
11631152

11641153
/// Attempts to get mutable references to `N` values in the map at once, with immutable
@@ -1208,17 +1197,8 @@ where
12081197
K: Borrow<Q>,
12091198
Q: Hash + Eq,
12101199
{
1211-
let mut pairs = self.get_each_inner_mut(ks);
1212-
// TODO use `MaybeUninit::uninit_array` here instead once that's stable.
1213-
let mut out: [MaybeUninit<Result<(&'_ K, &'_ mut V), UnavailableMutError>>; N] =
1214-
unsafe { MaybeUninit::uninit().assume_init() };
1215-
for i in 0..N {
1216-
out[i] = MaybeUninit::new(
1217-
mem::replace(&mut pairs[i], Err(UnavailableMutError::Absent))
1218-
.map(|(k, v)| (&*k, v)),
1219-
);
1220-
}
1221-
unsafe { MaybeUninit::array_assume_init(out) }
1200+
self.get_each_inner_mut(ks)
1201+
.map(|res| res.map(|(k, v)| (&*k, v)))
12221202
}
12231203

12241204
#[cfg(feature = "nightly")]

0 commit comments

Comments
 (0)