@@ -426,48 +426,47 @@ impl BitBuffer {
426426 return ;
427427 }
428428
429- let buffer_ptr = self . buffer . as_ptr ( ) ;
429+ let is_bit_set = |byte : u8 , bit_idx : usize | ( byte & ( 1 << bit_idx) ) != 0 ;
430+
431+ let mut buffer_ptr = self . buffer . as_ptr ( ) ;
430432 let offset = self . offset ;
431- let mut current_byte = offset / 8 ;
432433 let start_bit_in_byte = offset % 8 ;
433434 let mut bit_pos = 0 ;
434435
435436 // Handle incomplete first byte.
436437 if start_bit_in_byte > 0 {
437438 let bits_in_first_byte = ( 8 - start_bit_in_byte) . min ( total_bits) ;
438- let byte = unsafe { * buffer_ptr. add ( current_byte) } ;
439+ buffer_ptr = unsafe { buffer_ptr. add ( offset / 8 ) } ;
440+ let byte = unsafe { * buffer_ptr } ;
439441
440442 for bit_idx in 0 ..bits_in_first_byte {
441- let is_set = ( byte & ( 1 << ( start_bit_in_byte + bit_idx) ) ) != 0 ;
442- f ( bit_pos, is_set) ;
443+ f ( bit_pos, is_bit_set ( byte, start_bit_in_byte + bit_idx) ) ;
443444 }
444445
445446 bit_pos += bits_in_first_byte;
446- current_byte += 1 ;
447+ buffer_ptr = unsafe { buffer_ptr . add ( 1 ) } ;
447448 }
448449
449450 let complete_bytes = ( total_bits - bit_pos) / 8 ;
450451
451452 // Process complete bytes.
452453 for byte_idx in 0 ..complete_bytes {
453- let byte = unsafe { * buffer_ptr. add ( current_byte + byte_idx ) } ;
454+ let byte = unsafe { * buffer_ptr } ;
454455
455456 for bit_idx in 0 ..8 {
456- let is_set = ( byte & ( 1 << bit_idx) ) != 0 ;
457- f ( bit_pos + byte_idx * 8 + bit_idx, is_set) ;
457+ f ( bit_pos + byte_idx * 8 + bit_idx, is_bit_set ( byte, bit_idx) ) ;
458458 }
459+ buffer_ptr = unsafe { buffer_ptr. add ( 1 ) } ;
459460 }
460461 bit_pos += complete_bytes * 8 ;
461- current_byte += complete_bytes;
462462
463463 // Handle remaining bits at the end.
464464 let remaining_bits = ( total_bits - bit_pos) % 8 ;
465465 if remaining_bits > 0 {
466- let byte = unsafe { * buffer_ptr. add ( current_byte ) } ;
466+ let byte = unsafe { * buffer_ptr } ;
467467
468468 for bit_idx in 0 ..remaining_bits {
469- let is_set = ( byte & ( 1 << bit_idx) ) != 0 ;
470- f ( bit_pos + bit_idx, is_set) ;
469+ f ( bit_pos + bit_idx, is_bit_set ( byte, bit_idx) ) ;
471470 }
472471 }
473472 }
0 commit comments