@@ -122,6 +122,22 @@ impl<'a> Debug for LineReader<'a> {
122122 }
123123}
124124
125+ fn is_octal_digit ( c : & & u8 ) -> bool {
126+ ( b'0' ..=b'7' ) . contains ( * * c)
127+ }
128+
129+ fn decimal_reducer_usize ( r : usize , c : & u8 ) -> usize {
130+ r * 10 + usize:: from ( * c - b'0' )
131+ }
132+
133+ fn decimal_reducer_u32 ( r : u32 , c : & u8 ) -> u32 {
134+ r * 10 + u32:: from ( * c - b'0' )
135+ }
136+
137+ fn octal_reducer_u32 ( r : u32 , c : & u8 ) -> u32 {
138+ r * 8 + u32:: from ( * c - b'0' )
139+ }
140+
125141impl < ' a > LineReader < ' a > {
126142 fn is_empty ( & self ) -> bool {
127143 self . buf . is_empty ( )
@@ -185,14 +201,14 @@ impl<'a> LineReader<'a> {
185201 let iter = & mut buf. iter ( ) ;
186202 let old_start = iter
187203 . take_while ( |& & c| c. is_ascii_digit ( ) )
188- . fold ( 0 , |r , & c| r * 10 + u32 :: from ( c - b'0' ) ) ;
204+ . fold ( 0 , decimal_reducer_u32 ) ;
189205
190206 let c = * iter
191207 . next ( )
192208 . ok_or_else ( || ParsepatchError :: InvalidHunkHeader ( self . get_line ( ) ) ) ?;
193209 let old_lines = if c. is_ascii_digit ( ) {
194210 iter. take_while ( |& & c| c. is_ascii_digit ( ) )
195- . fold ( u32:: from ( c - b'0' ) , |r , & c| r * 10 + u32 :: from ( c - b'0' ) )
211+ . fold ( u32:: from ( c - b'0' ) , decimal_reducer_u32 )
196212 } else {
197213 1
198214 } ;
@@ -203,14 +219,14 @@ impl<'a> LineReader<'a> {
203219
204220 let new_start = iter
205221 . take_while ( |& & c| c. is_ascii_digit ( ) )
206- . fold ( 0 , |r , & c| r * 10 + u32 :: from ( c - b'0' ) ) ;
222+ . fold ( 0 , decimal_reducer_u32 ) ;
207223
208224 let c = * iter
209225 . next ( )
210226 . ok_or_else ( || ParsepatchError :: InvalidHunkHeader ( self . get_line ( ) ) ) ?;
211227 let new_lines = if c. is_ascii_digit ( ) {
212228 iter. take_while ( |& & c| c. is_ascii_digit ( ) )
213- . fold ( u32:: from ( c - b'0' ) , |r , & c| r * 10 + u32 :: from ( c - b'0' ) )
229+ . fold ( u32:: from ( c - b'0' ) , decimal_reducer_u32 )
214230 } else {
215231 1
216232 } ;
@@ -286,8 +302,8 @@ impl<'a> LineReader<'a> {
286302 // the following number is an octal number with 6 digits (so max is 8^6 - 1)
287303 let buf = unsafe { self . buf . get_unchecked ( start. len ( ) ..) } ;
288304 buf. iter ( )
289- . take_while ( | & & c| ( b'0' ..= b'7' ) . contains ( & c ) )
290- . fold ( 0 , |r , & c| r * 8 + u32 :: from ( c - b'0' ) )
305+ . take_while ( is_octal_digit )
306+ . fold ( 0 , octal_reducer_u32 )
291307 }
292308}
293309
@@ -656,7 +672,7 @@ impl<'a> PatchReader<'a> {
656672 fn parse_usize ( buf : & [ u8 ] ) -> usize {
657673 buf. iter ( )
658674 . take_while ( |& & c| c. is_ascii_digit ( ) )
659- . fold ( 0 , |r , & c| r * 10 + usize :: from ( c - b'0' ) )
675+ . fold ( 0 , decimal_reducer_usize )
660676 }
661677
662678 fn skip_binary ( & mut self ) -> Vec < BinaryHunk > {
0 commit comments