From b316cd337aad4db1e58df4fe1fc8432d1cc9c407 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Sat, 27 May 2017 16:38:46 +0900 Subject: [PATCH] Optimization in bitpacker --- src/common/bitpacker.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/common/bitpacker.rs b/src/common/bitpacker.rs index 364da3cfb..b259bd335 100644 --- a/src/common/bitpacker.rs +++ b/src/common/bitpacker.rs @@ -119,15 +119,18 @@ impl BitUnpacker 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) } }