]> git.lizzy.rs Git - rust.git/commitdiff
Use Vec::extend in SmallVec::extend when applicable
authorljedrz <ljedrz@gmail.com>
Mon, 30 Jul 2018 12:54:33 +0000 (14:54 +0200)
committerljedrz <ljedrz@gmail.com>
Mon, 30 Jul 2018 18:23:37 +0000 (20:23 +0200)
src/librustc_data_structures/small_vec.rs

index 83eb54fade177faaf7d8eb852de19ea03f2587ec..bfa580eb1866026042a3695f61d30ae2f400815d 100644 (file)
@@ -169,10 +169,18 @@ fn from_iter<I>(iter: I) -> Self where I: IntoIterator<Item=A::Element> {
 
 impl<A: Array> Extend<A::Element> for SmallVec<A> {
     fn extend<I: IntoIterator<Item=A::Element>>(&mut self, iter: I) {
-        let iter = iter.into_iter();
-        self.reserve(iter.size_hint().0);
-        for el in iter {
-            self.push(el);
+        if self.is_array() {
+            let iter = iter.into_iter();
+            self.reserve(iter.size_hint().0);
+
+            for el in iter {
+                self.push(el);
+            }
+        } else {
+            match self.0 {
+                AccumulateVec::Heap(ref mut vec) => vec.extend(iter),
+                _ => unreachable!()
+            }
         }
     }
 }