File tree Expand file tree Collapse file tree 1 file changed +16
-1
lines changed Expand file tree Collapse file tree 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> {
28092809#[ stable( feature = "rust1" , since = "1.0.0" ) ]
28102810impl < A > Extend < A > for VecDeque < A > {
28112811 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+ }
28132828 }
28142829}
28152830
You can’t perform that action at this time.
0 commit comments