File tree 1 file changed +12
-14
lines changed 1 file changed +12
-14
lines changed Original file line number Diff line number Diff line change @@ -167,30 +167,21 @@ where
167
167
I : Iterator < Item = T :: Item > ,
168
168
T : HomogeneousTuple ,
169
169
{
170
- iter : I ,
170
+ iter : Fuse < I > ,
171
171
last : Option < T > ,
172
172
}
173
173
174
174
/// Create a new tuple windows iterator.
175
- pub fn tuple_windows < I , T > ( mut iter : I ) -> TupleWindows < I , T >
175
+ pub fn tuple_windows < I , T > ( iter : I ) -> TupleWindows < I , T >
176
176
where
177
177
I : Iterator < Item = T :: Item > ,
178
178
T : HomogeneousTuple ,
179
179
T :: Item : Clone ,
180
180
{
181
- use std:: iter:: once;
182
-
183
- let mut last = None ;
184
- if T :: num_items ( ) != 1 {
185
- // put in a duplicate item in front of the tuple; this simplifies
186
- // .next() function.
187
- if let Some ( item) = iter. next ( ) {
188
- let iter = once ( item. clone ( ) ) . chain ( once ( item) ) . chain ( & mut iter) ;
189
- last = T :: collect_from_iter_no_buf ( iter) ;
190
- }
181
+ TupleWindows {
182
+ last : None ,
183
+ iter : iter. fuse ( ) ,
191
184
}
192
-
193
- TupleWindows { iter, last }
194
185
}
195
186
196
187
impl < I , T > Iterator for TupleWindows < I , T >
@@ -210,6 +201,13 @@ where
210
201
last. left_shift_push ( new) ;
211
202
return Some ( last. clone ( ) ) ;
212
203
}
204
+ } else {
205
+ use std:: iter:: once;
206
+ if let Some ( item) = self . iter . next ( ) {
207
+ let iter = once ( item) . chain ( & mut self . iter ) ;
208
+ self . last = T :: collect_from_iter_no_buf ( iter) ;
209
+ return self . last . clone ( ) ;
210
+ }
213
211
}
214
212
None
215
213
}
You can’t perform that action at this time.
0 commit comments