diff --git a/src/arrayvec.rs b/src/arrayvec.rs index 3b86dd5..c9285ca 100644 --- a/src/arrayvec.rs +++ b/src/arrayvec.rs @@ -343,8 +343,7 @@ impl ArrayVec { pub fn pop(&mut self) -> Option { if self.len > 0 { self.len -= 1; - let out = - replace(&mut self.data.as_slice_mut()[self.len], A::Item::default()); + let out = take(&mut self.data.as_slice_mut()[self.len]); Some(out) } else { None @@ -759,8 +758,7 @@ impl Iterator for ArrayVecIterator { #[inline] fn next(&mut self) -> Option { if self.base < self.len { - let out = - replace(&mut self.data.as_slice_mut()[self.base], A::Item::default()); + let out = take(&mut self.data.as_slice_mut()[self.base]); self.base += 1; Some(out) } else { @@ -779,13 +777,13 @@ impl Iterator for ArrayVecIterator { } #[inline] fn last(mut self) -> Option { - Some(replace(&mut self.data.as_slice_mut()[self.len], A::Item::default())) + Some(take(&mut self.data.as_slice_mut()[self.len])) } #[inline] fn nth(&mut self, n: usize) -> Option { let i = self.base + (n - 1); if i < self.len { - let out = replace(&mut self.data.as_slice_mut()[i], A::Item::default()); + let out = take(&mut self.data.as_slice_mut()[i]); self.base = i + 1; Some(out) } else { diff --git a/src/lib.rs b/src/lib.rs index 2100b1e..7bc34a1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -84,3 +84,8 @@ pub use arrayvec::*; mod tinyvec; #[cfg(feature = "alloc")] pub use tinyvec::*; + +// Replace with mem::take as soon as MSRV allows it +fn take(from: &mut T) -> T { + replace(from, T::default()) +}