File tree Expand file tree Collapse file tree 1 file changed +11
-12
lines changed Expand file tree Collapse file tree 1 file changed +11
-12
lines changed Original file line number Diff line number Diff line change @@ -362,31 +362,30 @@ pub fn seq_le(
362
362
pub struct SeqMul < ' a > {
363
363
seq : & ' a dyn SimpleSeq ,
364
364
repetitions : usize ,
365
- iter : DynPyIter < ' a > ,
366
- }
367
- impl SeqMul < ' _ > {
368
- fn next_iter ( & mut self ) {
369
- self . repetitions -= 1 ;
370
- self . iter = self . seq . iter ( ) ;
371
- }
365
+ iter : Option < DynPyIter < ' a > > ,
372
366
}
373
367
impl < ' a > Iterator for SeqMul < ' a > {
374
368
type Item = & ' a PyObjectRef ;
375
369
fn next ( & mut self ) -> Option < Self :: Item > {
376
- match self . iter . next ( ) {
370
+ if self . seq . len ( ) == 0 {
371
+ return None ;
372
+ }
373
+ match self . iter . as_mut ( ) . and_then ( Iterator :: next) {
377
374
Some ( item) => Some ( item) ,
378
375
None => {
379
376
if self . repetitions == 0 {
380
377
None
381
378
} else {
382
- self . next_iter ( ) ;
379
+ self . repetitions -= 1 ;
380
+ self . iter = Some ( self . seq . iter ( ) ) ;
383
381
self . next ( )
384
382
}
385
383
}
386
384
}
387
385
}
388
386
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
389
- let size = self . iter . len ( ) + ( self . repetitions * self . seq . len ( ) ) ;
387
+ let size = self . iter . as_ref ( ) . map_or ( 0 , ExactSizeIterator :: len)
388
+ + ( self . repetitions * self . seq . len ( ) ) ;
390
389
( size, Some ( size) )
391
390
}
392
391
}
@@ -395,8 +394,8 @@ impl ExactSizeIterator for SeqMul<'_> {}
395
394
pub fn seq_mul ( seq : & dyn SimpleSeq , repetitions : isize ) -> SeqMul {
396
395
SeqMul {
397
396
seq,
398
- repetitions : repetitions. max ( 0 ) as usize - 1 ,
399
- iter : seq . iter ( ) ,
397
+ repetitions : repetitions. max ( 0 ) as usize ,
398
+ iter : None ,
400
399
}
401
400
}
402
401
You can’t perform that action at this time.
0 commit comments