@@ -399,60 +399,6 @@ impl BooleanBufferBuilder {
399399        } 
400400    } 
401401
402-     /// Append `count` bits from `to_set` 
403- /// 
404- /// `to_set` is a slice of bits packed LSB-first into `[u8]` 
405- /// 
406- /// # Panics 
407- /// 
408- /// Panics if `to_set` does not contain `ceil(count / 8)` bytes 
409- #[ inline]  
410-     pub  fn  append_packed ( & mut  self ,  count :  usize ,  to_set :  & [ u8 ] )  { 
411-         assert_eq ! ( ( count + 7 )  >> 3 ,  to_set. len( ) ) ; 
412- 
413-         let  new_len = self . len  + count; 
414-         let  new_buf_len = ( new_len + 7 )  >> 3 ; 
415-         self . buffer . reserve ( new_buf_len - self . buffer . len ( ) ) ; 
416- 
417-         let  whole_bytes = count >> 3 ; 
418-         let  overrun = count &  7 ; 
419- 
420-         let  skew = self . len  &  7 ; 
421-         if  skew == 0  { 
422-             self . buffer . extend_from_slice ( & to_set[ ..whole_bytes] ) ; 
423-             if  overrun > 0  { 
424-                 let  masked = to_set[ whole_bytes]  &  ( ( 1  << overrun)  - 1 ) ; 
425-                 self . buffer . push ( masked) 
426-             } 
427- 
428-             self . len  = new_len; 
429-             debug_assert_eq ! ( self . buffer. len( ) ,  new_buf_len) ; 
430-             return ; 
431-         } 
432- 
433-         for  to_set_byte in  & to_set[ ..whole_bytes]  { 
434-             let  low = * to_set_byte << skew; 
435-             let  high = * to_set_byte >> ( 8  - skew) ; 
436- 
437-             * self . buffer . last_mut ( ) . unwrap ( )  |= low; 
438-             self . buffer . push ( high) ; 
439-         } 
440- 
441-         if  overrun > 0  { 
442-             let  masked = to_set[ whole_bytes]  &  ( ( 1  << overrun)  - 1 ) ; 
443-             let  low = masked << skew; 
444-             * self . buffer . last_mut ( ) . unwrap ( )  |= low; 
445- 
446-             if  overrun > 8  - skew { 
447-                 let  high = masked >> ( 8  - skew) ; 
448-                 self . buffer . push ( high) 
449-             } 
450-         } 
451- 
452-         self . len  = new_len; 
453-         debug_assert_eq ! ( self . buffer. len( ) ,  new_buf_len) ; 
454-     } 
455- 
456402    /// Append `range` bits from `to_set` 
457403/// 
458404/// `to_set` is a slice of bits packed LSB-first into `[u8]` 
@@ -461,31 +407,16 @@ impl BooleanBufferBuilder {
461407/// 
462408/// Panics if `to_set` does not contain `ceil(range.end / 8)` bytes 
463409pub  fn  append_packed_range ( & mut  self ,  range :  Range < usize > ,  to_set :  & [ u8 ] )  { 
464-         let  count = range. end  - range. start ; 
465-         if  count == 0  { 
466-             return ; 
467-         } 
468- 
469-         let  start_byte = range. start  >> 3 ; 
470-         let  end_byte = ( range. end  + 7 )  >> 3 ; 
471-         let  skew = range. start  &  7 ; 
472- 
473-         // `append_packed` requires the provided `to_set` to be byte aligned, therefore 
474-         // if the range being copied is not byte aligned we must first append 
475-         // the leading bits to reach a byte boundary 
476-         if  skew == 0  { 
477-             // No skew can simply append bytes directly 
478-             self . append_packed ( count,  & to_set[ start_byte..end_byte] ) 
479-         }  else  if  start_byte + 1  == end_byte { 
480-             // Append bits from single byte 
481-             self . append_packed ( count,  & [ to_set[ start_byte]  >> skew] ) 
482-         }  else  { 
483-             // Append trailing bits from first byte to reach byte boundary, then append 
484-             // bits from the remaining byte-aligned mask 
485-             let  offset = 8  - skew; 
486-             self . append_packed ( offset,  & [ to_set[ start_byte]  >> skew] ) ; 
487-             self . append_packed ( count - offset,  & to_set[ ( start_byte + 1 ) ..end_byte] ) ; 
488-         } 
410+         let  offset_write = self . len ; 
411+         let  len = range. end  - range. start ; 
412+         self . advance ( len) ; 
413+         crate :: util:: bit_mask:: set_bits ( 
414+             self . buffer . as_slice_mut ( ) , 
415+             to_set, 
416+             offset_write, 
417+             range. start , 
418+             len, 
419+         ) ; 
489420    } 
490421
491422    #[ inline]  
@@ -2925,37 +2856,6 @@ mod tests {
29252856        assert ! ( buffer. get_bit( 11 ) ) ; 
29262857    } 
29272858
2928-     #[ test]  
2929-     fn  test_bit_append_packed ( )  { 
2930-         let  mut  buffer = BooleanBufferBuilder :: new ( 0 ) ; 
2931- 
2932-         buffer. append_packed ( 8 ,  & [ 0b11111111 ] ) ; 
2933-         assert_eq ! ( buffer. buffer. as_slice( ) ,  & [ 0b11111111 ] ) ; 
2934-         assert_eq ! ( buffer. len( ) ,  8 ) ; 
2935- 
2936-         buffer. append_packed ( 3 ,  & [ 0b01010010 ] ) ; 
2937-         assert_eq ! ( buffer. buffer. as_slice( ) ,  & [ 0b11111111 ,  0b00000010 ] ) ; 
2938-         assert_eq ! ( buffer. len( ) ,  11 ) ; 
2939- 
2940-         buffer. append_packed ( 5 ,  & [ 0b00010100 ] ) ; 
2941-         assert_eq ! ( buffer. buffer. as_slice( ) ,  & [ 0b11111111 ,  0b10100010 ] ) ; 
2942-         assert_eq ! ( buffer. len( ) ,  16 ) ; 
2943- 
2944-         buffer. append_packed ( 2 ,  & [ 0b11110010 ] ) ; 
2945-         assert_eq ! ( 
2946-             buffer. buffer. as_slice( ) , 
2947-             & [ 0b11111111 ,  0b10100010 ,  0b00000010 ] 
2948-         ) ; 
2949-         assert_eq ! ( buffer. len( ) ,  18 ) ; 
2950- 
2951-         buffer. append_packed ( 15 ,  & [ 0b11011010 ,  0b01010101 ] ) ; 
2952-         assert_eq ! ( 
2953-             buffer. buffer. as_slice( ) , 
2954-             & [ 0b11111111 ,  0b10100010 ,  0b01101010 ,  0b01010111 ,  0b00000001 ] 
2955-         ) ; 
2956-         assert_eq ! ( buffer. len( ) ,  33 ) ; 
2957-     } 
2958- 
29592859    #[ test]  
29602860    fn  test_bool_buffer_fuzz ( )  { 
29612861        use  rand:: prelude:: * ; 
@@ -2964,19 +2864,6 @@ mod tests {
29642864        let  mut  all_bools = vec ! [ ] ; 
29652865        let  mut  rng = rand:: thread_rng ( ) ; 
29662866
2967-         for  _ in  0 ..100  { 
2968-             let  mask_length = ( rng. next_u32 ( )  % 50 )  as  usize ; 
2969-             let  bools:  Vec < _ >  = std:: iter:: from_fn ( || Some ( rng. next_u32 ( )  &  1  == 0 ) ) 
2970-                 . take ( mask_length) 
2971-                 . collect ( ) ; 
2972- 
2973-             let  mut  compacted = BooleanBufferBuilder :: new ( mask_length) ; 
2974-             compacted. append_slice ( & bools) ; 
2975- 
2976-             buffer. append_packed ( mask_length,  compacted. buffer . as_slice ( ) ) ; 
2977-             all_bools. extend_from_slice ( & bools) ; 
2978-         } 
2979- 
29802867        let  src_len = 32 ; 
29812868        let  ( src,  compacted_src)  = { 
29822869            let  src:  Vec < _ >  = std:: iter:: from_fn ( || Some ( rng. next_u32 ( )  &  1  == 0 ) ) 
0 commit comments