@@ -139,7 +139,7 @@ pub struct TupleWindows<I, T>
139
139
where I : Iterator < Item = T :: Item > ,
140
140
T : HomogeneousTuple
141
141
{
142
- iter : Fuse < I > ,
142
+ iter : I ,
143
143
last : Option < T > ,
144
144
}
145
145
@@ -151,7 +151,7 @@ pub fn tuple_windows<I, T>(iter: I) -> TupleWindows<I, T>
151
151
{
152
152
TupleWindows {
153
153
last : None ,
154
- iter : iter . fuse ( ) ,
154
+ iter,
155
155
}
156
156
}
157
157
@@ -166,25 +166,24 @@ impl<I, T> Iterator for TupleWindows<I, T>
166
166
if T :: num_items ( ) == 1 {
167
167
return T :: collect_from_iter_no_buf ( & mut self . iter )
168
168
}
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 {
171
171
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 ) ;
178
176
self . last = T :: collect_from_iter_no_buf ( iter) ;
179
- return self . last . clone ( ) ;
177
+ self . last . clone ( )
180
178
}
179
+ } else {
180
+ None
181
181
}
182
- None
183
182
}
184
183
}
185
184
186
185
impl < I , T > FusedIterator for TupleWindows < I , T >
187
- where I : Iterator < Item = T :: Item > ,
186
+ where I : FusedIterator < Item = T :: Item > ,
188
187
T : HomogeneousTuple + Clone ,
189
188
T :: Item : Clone
190
189
{ }
0 commit comments