summaryrefslogtreecommitdiffstats
path: root/src/postings/compression/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/postings/compression/mod.rs')
-rw-r--r--src/postings/compression/mod.rs13
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]
}