From fe363996282a069bb38a3449da59bc411fa9d066 Mon Sep 17 00:00:00 2001 From: Clark Gaebel Date: Tue, 28 Oct 2014 10:36:41 -0700 Subject: [PATCH] use size hints --- components/util/smallvec.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/components/util/smallvec.rs b/components/util/smallvec.rs index 00c43b76b9e..139c1d09300 100644 --- a/components/util/smallvec.rs +++ b/components/util/smallvec.rs @@ -405,6 +405,12 @@ macro_rules! def_small_vector( fn from_iter>(mut iter: I) -> $name { let mut v = $name::new(); + let (lower_size_bound, _) = iter.size_hint(); + + if lower_size_bound > v.cap() { + v.grow(lower_size_bound); + } + for elem in iter { v.push(elem); } @@ -415,6 +421,14 @@ macro_rules! def_small_vector( impl Extendable for $name { fn extend>(&mut self, mut iter: I) { + let (lower_size_bound, _) = iter.size_hint(); + + let target_len = self.len() + lower_size_bound; + + if target_len > self.cap() { + v.grow(target_len); + } + for elem in iter { self.push(elem); }