66#![ allow( rustdoc:: private_intra_doc_links) ]
77
88use std:: cmp:: Ordering ;
9+ use std:: collections:: VecDeque ;
910use std:: ffi:: OsString ;
1011use std:: io:: { self , BufReader , ErrorKind } ;
1112use std:: {
@@ -530,7 +531,7 @@ where
530531 I : Iterator < Item = ( usize , UResult < String > ) > ,
531532{
532533 iter : I ,
533- buffer : Vec < <I as Iterator >:: Item > ,
534+ buffer : VecDeque < <I as Iterator >:: Item > ,
534535 /// the number of elements the buffer may hold
535536 size : usize ,
536537 /// flag to indicate content off the buffer should be returned instead of off the wrapped
@@ -545,7 +546,7 @@ where
545546 fn new ( iter : I ) -> Self {
546547 Self {
547548 iter,
548- buffer : Vec :: new ( ) ,
549+ buffer : VecDeque :: new ( ) ,
549550 rewind : false ,
550551 size : 1 ,
551552 }
@@ -584,14 +585,14 @@ where
584585 /// option.
585586 fn add_line_to_buffer ( & mut self , ln : usize , line : String ) -> Option < String > {
586587 if self . rewind {
587- self . buffer . insert ( 0 , ( ln, Ok ( line) ) ) ;
588+ self . buffer . push_front ( ( ln, Ok ( line) ) ) ;
588589 None
589590 } else if self . buffer . len ( ) >= self . size {
590- let ( _, head_line) = self . buffer . remove ( 0 ) ;
591- self . buffer . push ( ( ln, Ok ( line) ) ) ;
591+ let ( _, head_line) = self . buffer . pop_front ( ) . unwrap ( ) ;
592+ self . buffer . push_back ( ( ln, Ok ( line) ) ) ;
592593 Some ( head_line. unwrap ( ) )
593594 } else {
594- self . buffer . push ( ( ln, Ok ( line) ) ) ;
595+ self . buffer . push_back ( ( ln, Ok ( line) ) ) ;
595596 None
596597 }
597598 }
@@ -611,7 +612,7 @@ where
611612 fn next ( & mut self ) -> Option < Self :: Item > {
612613 if self . rewind {
613614 if !self . buffer . is_empty ( ) {
614- return Some ( self . buffer . remove ( 0 ) ) ;
615+ return Some ( self . buffer . pop_front ( ) . unwrap ( ) ) ;
615616 }
616617 self . rewind = false ;
617618 }
0 commit comments