diff options
Diffstat (limited to 'src/postings/compression/mod.rs')
-rw-r--r-- | src/postings/compression/mod.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/postings/compression/mod.rs b/src/postings/compression/mod.rs index f35b6cd..d1bed4b 100644 --- a/src/postings/compression/mod.rs +++ b/src/postings/compression/mod.rs @@ -46,11 +46,11 @@ impl BlockEncoder { /// We ensure that the OutputBuffer is align on 128 bits /// in order to run SSE2 linear search on it. #[repr(align(128))] -struct OutputBuffer([u32; COMPRESSION_BLOCK_SIZE + 1]); +pub(crate) struct AlignedBuffer(pub [u32; COMPRESSION_BLOCK_SIZE]); pub struct BlockDecoder { bitpacker: BitPacker4x, - output: OutputBuffer, + output: AlignedBuffer, pub output_len: usize, } @@ -60,11 +60,9 @@ impl BlockDecoder { } pub fn with_val(val: u32) -> BlockDecoder { - let mut output = [val; COMPRESSION_BLOCK_SIZE + 1]; - output[COMPRESSION_BLOCK_SIZE] = 0u32; BlockDecoder { bitpacker: BitPacker4x::new(), - output: OutputBuffer(output), + output: AlignedBuffer([val; COMPRESSION_BLOCK_SIZE]), output_len: 0, } } @@ -92,6 +90,11 @@ impl BlockDecoder { } #[inline] + pub(crate) fn output_aligned(&self) -> (&AlignedBuffer, usize) { + (&self.output, self.output_len) + } + + #[inline] pub fn output(&self, idx: usize) -> u32 { self.output.0[idx] } |