Skip to content

Commit 5fe6533

Browse files
committed
Extend implement separately from insert_slice for microbenchmark improvement
1 parent e7246e9 commit 5fe6533

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

lib.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,10 +433,19 @@ impl<A: Array> FromIterator<A::Item> for SmallVec<A> {
433433
}
434434

435435
impl<A: Array> Extend<A::Item> for SmallVec<A> {
436-
#[inline]
437436
fn extend<I: IntoIterator<Item=A::Item>>(&mut self, iterable: I) {
438-
let len = self.len();
439-
self.insert_many(len, iterable);
437+
let iter = iterable.into_iter();
438+
let (lower_size_bound, _) = iter.size_hint();
439+
440+
let target_len = self.len + lower_size_bound;
441+
442+
if target_len > self.capacity() {
443+
self.grow(target_len);
444+
}
445+
446+
for elem in iter {
447+
self.push(elem);
448+
}
440449
}
441450
}
442451

0 commit comments

Comments
 (0)