@@ -139,7 +139,7 @@ pub struct TupleWindows<I, T>
139139 where I : Iterator < Item = T :: Item > ,
140140 T : HomogeneousTuple
141141{
142- iter : Fuse < I > ,
142+ iter : I ,
143143 last : Option < T > ,
144144}
145145
@@ -151,7 +151,7 @@ pub fn tuple_windows<I, T>(iter: I) -> TupleWindows<I, T>
151151{
152152 TupleWindows {
153153 last : None ,
154- iter : iter . fuse ( ) ,
154+ iter,
155155 }
156156}
157157
@@ -166,25 +166,24 @@ impl<I, T> Iterator for TupleWindows<I, T>
166166 if T :: num_items ( ) == 1 {
167167 return T :: collect_from_iter_no_buf ( & mut self . iter )
168168 }
169- if let Some ( ref mut last ) = self . last {
170- if let Some ( new ) = self . iter . next ( ) {
169+ if let Some ( new ) = self . iter . next ( ) {
170+ if let Some ( ref mut last ) = self . last {
171171 last. left_shift_push ( new) ;
172- return Some ( last. clone ( ) ) ;
173- }
174- } else {
175- use std:: iter:: once;
176- if let Some ( item) = self . iter . next ( ) {
177- let iter = once ( item) . chain ( & mut self . iter ) ;
172+ Some ( last. clone ( ) )
173+ } else {
174+ use std:: iter:: once;
175+ let iter = once ( new) . chain ( & mut self . iter ) ;
178176 self . last = T :: collect_from_iter_no_buf ( iter) ;
179- return self . last . clone ( ) ;
177+ self . last . clone ( )
180178 }
179+ } else {
180+ None
181181 }
182- None
183182 }
184183}
185184
186185impl < I , T > FusedIterator for TupleWindows < I , T >
187- where I : Iterator < Item = T :: Item > ,
186+ where I : FusedIterator < Item = T :: Item > ,
188187 T : HomogeneousTuple + Clone ,
189188 T :: Item : Clone
190189{ }
0 commit comments