diff options
| author | Charles Gleason <charles_gleason@alumni.brown.edu> | 2019-11-12 13:01:10 -0500 |
|---|---|---|
| committer | Charles Gleason <charles_gleason@alumni.brown.edu> | 2019-11-13 11:56:30 -0500 |
| commit | 164d1a205d21e0bc54b60cb4e9badf27b3883ffd (patch) | |
| tree | 3869a98a9f264bee44e0e6929b4d4fd72c75d80e /src/liballoc/collections | |
| parent | 5dda3ee9314cfee9c4e30a7b17dcd5ebdec081a7 (diff) | |
| download | rust-164d1a205d21e0bc54b60cb4e9badf27b3883ffd.tar.gz rust-164d1a205d21e0bc54b60cb4e9badf27b3883ffd.zip | |
Match VecDeque::extend to Vec::extend
Diffstat (limited to 'src/liballoc/collections')
| -rw-r--r-- | src/liballoc/collections/vec_deque.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/liballoc/collections/vec_deque.rs b/src/liballoc/collections/vec_deque.rs index 7795083e058..ebd3f010077 100644 --- a/src/liballoc/collections/vec_deque.rs +++ b/src/liballoc/collections/vec_deque.rs @@ -2809,7 +2809,22 @@ impl<'a, T> IntoIterator for &'a mut VecDeque<T> { #[stable(feature = "rust1", since = "1.0.0")] impl<A> Extend<A> for VecDeque<A> { fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T) { - iter.into_iter().for_each(move |elt| self.push_back(elt)); + // This function should be the moral equivalent of: + // + // for item in iter.into_iter() { + // self.push_back(item); + // } + let mut iter = iter.into_iter(); + while let Some(element) = iter.next() { + if self.len() == self.capacity() { + let (lower, _) = iter.size_hint(); + self.reserve(lower.saturating_add(1)); + } + + let head = self.head; + self.head = self.wrap_add(self.head, 1); + unsafe { self.buffer_write(head, element); } + } } } |
