17
17
18
18
use core:: cmp:: { min, max} ;
19
19
use core:: iter:: { DoubleEndedIterator , FusedIterator , Iterator , TrustedLen } ;
20
- use core:: num:: NonZeroI16 ;
20
+ use core:: num:: { NonZeroI16 , NonZeroUsize } ;
21
21
use core:: ops:: { Add , AddAssign , Sub , SubAssign , Neg , Index , IndexMut } ;
22
22
use core:: option:: { Option } ;
23
23
use either:: { Either , Left , Right } ;
@@ -142,11 +142,10 @@ impl Iterator for Range1d {
142
142
if self . is_empty ( ) { None } else { Some ( self . end ) }
143
143
}
144
144
145
- fn advance_by ( & mut self , n : usize ) -> Result < ( ) , usize > {
146
- let len = self . len ( ) ;
147
- if n > len {
145
+ fn advance_by ( & mut self , n : usize ) -> Result < ( ) , NonZeroUsize > {
146
+ if let Some ( rem) = n. checked_sub ( self . len ( ) ) . and_then ( NonZeroUsize :: new) {
148
147
self . start = self . end ;
149
- return Err ( len ) ;
148
+ return Err ( rem ) ;
150
149
}
151
150
self . start = self . start . wrapping_add ( n as u16 as i16 ) ;
152
151
Ok ( ( ) )
@@ -166,11 +165,10 @@ impl DoubleEndedIterator for Range1d {
166
165
}
167
166
}
168
167
169
- fn advance_back_by ( & mut self , n : usize ) -> Result < ( ) , usize > {
170
- let len = self . len ( ) ;
171
- if n > len {
168
+ fn advance_back_by ( & mut self , n : usize ) -> Result < ( ) , NonZeroUsize > {
169
+ if let Some ( rem) = n. checked_sub ( self . len ( ) ) . and_then ( NonZeroUsize :: new) {
172
170
self . end = self . start ;
173
- return Err ( len ) ;
171
+ return Err ( rem ) ;
174
172
}
175
173
self . end = self . end . wrapping_sub ( n as u16 as i16 ) ;
176
174
Ok ( ( ) )
@@ -662,13 +660,11 @@ impl Iterator for RectPoints {
662
660
if self . rect . is_empty ( ) { None } else { Some ( self . rect . br_inner ( ) ) }
663
661
}
664
662
665
- fn advance_by ( & mut self , n : usize ) -> Result < ( ) , usize > {
666
- if let Some ( size) = self . size_hint ( ) . 1 {
667
- if n > size {
668
- self . x = self . rect . l ( ) ;
669
- self . rect . tl = self . rect . bl ( ) ;
670
- return Err ( size) ;
671
- }
663
+ fn advance_by ( & mut self , n : usize ) -> Result < ( ) , NonZeroUsize > {
664
+ if let Some ( rem) = self . size_hint ( ) . 1 . and_then ( |len| n. checked_sub ( len) ) . and_then ( NonZeroUsize :: new) {
665
+ self . x = self . rect . l ( ) ;
666
+ self . rect . tl = self . rect . bl ( ) ;
667
+ return Err ( rem) ;
672
668
}
673
669
let n = n as u32 ;
674
670
let current_line_last = self . rect . r ( ) . wrapping_sub ( self . x ) as u16 as u32 ;
0 commit comments