mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-04 16:22:55 +00:00
Optimization in bitpacker
This commit is contained in:
@@ -119,15 +119,18 @@ impl<Data> BitUnpacker<Data>
|
||||
if self.num_bits == 0 {
|
||||
return 0;
|
||||
}
|
||||
let addr = (idx * self.num_bits) / 8;
|
||||
let bit_shift = idx * self.num_bits - addr * 8;
|
||||
let val_unshifted_unmasked: u64;
|
||||
debug_assert!(addr + 8 <= self.data.len(),
|
||||
let data: &[u8] = &*self.data;
|
||||
let num_bits = self.num_bits;
|
||||
let mask = self.mask;
|
||||
let addr_in_bits = idx * num_bits;
|
||||
let addr = addr_in_bits >> 3;
|
||||
let bit_shift = addr_in_bits & 7;
|
||||
debug_assert!(addr + 8 <= data.len(),
|
||||
"The fast field field should have been padded with 7 bytes.");
|
||||
val_unshifted_unmasked =
|
||||
unsafe { *(self.data.as_ptr().offset(addr as isize) as *const u64) };
|
||||
let val_unshifted_unmasked: u64 =
|
||||
unsafe { *(data.as_ptr().offset(addr as isize) as *const u64) };
|
||||
let val_shifted = (val_unshifted_unmasked >> bit_shift) as u64;
|
||||
(val_shifted & self.mask)
|
||||
(val_shifted & mask)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user