From a176a870987f61b04e001a7c4d0863fdeb427083 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Wed, 18 Dec 2024 13:38:49 -0800 Subject: [PATCH 1/3] Simplify extend_impl --- src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 42c04c3..e0f7328 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1502,11 +1502,11 @@ impl SmallVec { let mut iter = iter.fuse(); let (lower_bound, _) = iter.size_hint(); self.reserve(lower_bound); - let mut len = self.len(); let mut capacity = self.capacity(); let mut ptr = self.as_mut_ptr(); unsafe { loop { + let mut len = self.len(); // SAFETY: ptr is valid for `capacity - len` writes ptr = ptr.add(len); let mut guard = DropGuard { ptr, len: 0 }; @@ -1520,7 +1520,6 @@ impl SmallVec { // At this point we either consumed all capacity or the iterator is exhausted (fused) if let Some(item) = iter.next() { self.push(item); - len += 1; } else { return; } From 1289db6817c5369c5450afc2d97622bf513282a7 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Wed, 15 Jan 2025 15:47:17 -0800 Subject: [PATCH 2/3] Impl Send/Sync for IntoIter (#368) Closes #367. --- src/lib.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index e0f7328..37c2123 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -500,6 +500,11 @@ pub struct IntoIter { _marker: PhantomData, } +// SAFETY: IntoIter has unique ownership of its contents. Sending (or sharing) an `IntoIter` +// is equivalent to sending (or sharing) a `SmallVec`. +unsafe impl Send for IntoIter where T: Send {} +unsafe impl Sync for IntoIter where T: Sync {} + impl IntoIter { #[inline] const fn is_zst() -> bool { From 9a23ebf1883247f91c50d429714773b46957a688 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Wed, 15 Jan 2025 15:48:28 -0800 Subject: [PATCH 3/3] Version 2.0.0-alpha.10 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 220f8b2..f77070f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smallvec" -version = "2.0.0-alpha.9" +version = "2.0.0-alpha.10" edition = "2021" rust-version = "1.57" authors = ["The Servo Project Developers"]