1717
1818use core:: cmp:: { min, max} ;
1919use core:: iter:: { DoubleEndedIterator , FusedIterator , Iterator , TrustedLen } ;
20- use core:: num:: NonZeroI16 ;
20+ use core:: num:: { NonZeroI16 , NonZeroUsize } ;
2121use core:: ops:: { Add , AddAssign , Sub , SubAssign , Neg , Index , IndexMut } ;
2222use core:: option:: { Option } ;
2323use either:: { Either , Left , Right } ;
@@ -142,11 +142,10 @@ impl Iterator for Range1d {
142142 if self . is_empty ( ) { None } else { Some ( self . end ) }
143143 }
144144
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) {
148147 self . start = self . end ;
149- return Err ( len ) ;
148+ return Err ( rem ) ;
150149 }
151150 self . start = self . start . wrapping_add ( n as u16 as i16 ) ;
152151 Ok ( ( ) )
@@ -166,11 +165,10 @@ impl DoubleEndedIterator for Range1d {
166165 }
167166 }
168167
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) {
172170 self . end = self . start ;
173- return Err ( len ) ;
171+ return Err ( rem ) ;
174172 }
175173 self . end = self . end . wrapping_sub ( n as u16 as i16 ) ;
176174 Ok ( ( ) )
@@ -662,13 +660,11 @@ impl Iterator for RectPoints {
662660 if self . rect . is_empty ( ) { None } else { Some ( self . rect . br_inner ( ) ) }
663661 }
664662
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) ;
672668 }
673669 let n = n as u32 ;
674670 let current_line_last = self . rect . r ( ) . wrapping_sub ( self . x ) as u16 as u32 ;
0 commit comments