File tree 1 file changed +16
-1
lines changed
1 file changed +16
-1
lines changed Original file line number Diff line number Diff line change @@ -2809,7 +2809,22 @@ impl<'a, T> IntoIterator for &'a mut VecDeque<T> {
2809
2809
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2810
2810
impl < A > Extend < A > for VecDeque < A > {
2811
2811
fn extend < T : IntoIterator < Item = A > > ( & mut self , iter : T ) {
2812
- iter. into_iter ( ) . for_each ( move |elt| self . push_back ( elt) ) ;
2812
+ // This function should be the moral equivalent of:
2813
+ //
2814
+ // for item in iter.into_iter() {
2815
+ // self.push_back(item);
2816
+ // }
2817
+ let mut iter = iter. into_iter ( ) ;
2818
+ while let Some ( element) = iter. next ( ) {
2819
+ if self . len ( ) == self . capacity ( ) {
2820
+ let ( lower, _) = iter. size_hint ( ) ;
2821
+ self . reserve ( lower. saturating_add ( 1 ) ) ;
2822
+ }
2823
+
2824
+ let head = self . head ;
2825
+ self . head = self . wrap_add ( self . head , 1 ) ;
2826
+ unsafe { self . buffer_write ( head, element) ; }
2827
+ }
2813
2828
}
2814
2829
}
2815
2830
You can’t perform that action at this time.
0 commit comments