mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-06 09:12:55 +00:00
* Added sstable and enabling it by default, and parallel boolean query. * Added async API for FileSlice. * Added async get_doc * Reduce blocksize to 32_000 * Added debug logs Quickwit specific feature a hidden behind the quickwit feature flag.
96 lines
2.0 KiB
Rust
96 lines
2.0 KiB
Rust
use std::io;
|
|
|
|
use super::{vint, BlockReader};
|
|
|
|
pub trait ValueReader: Default {
|
|
type Value;
|
|
|
|
fn value(&self, idx: usize) -> &Self::Value;
|
|
|
|
fn read(&mut self, reader: &mut BlockReader) -> io::Result<()>;
|
|
}
|
|
|
|
pub trait ValueWriter: Default {
|
|
type Value;
|
|
|
|
fn write(&mut self, val: &Self::Value);
|
|
|
|
fn write_block(&mut self, writer: &mut Vec<u8>);
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub struct VoidReader;
|
|
|
|
impl ValueReader for VoidReader {
|
|
type Value = ();
|
|
|
|
fn value(&self, _idx: usize) -> &() {
|
|
&()
|
|
}
|
|
|
|
fn read(&mut self, _reader: &mut BlockReader) -> io::Result<()> {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub struct VoidWriter;
|
|
|
|
impl ValueWriter for VoidWriter {
|
|
type Value = ();
|
|
|
|
fn write(&mut self, _val: &()) {}
|
|
|
|
fn write_block(&mut self, _writer: &mut Vec<u8>) {}
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub struct U64MonotonicWriter {
|
|
vals: Vec<u64>,
|
|
}
|
|
|
|
impl ValueWriter for U64MonotonicWriter {
|
|
type Value = u64;
|
|
|
|
fn write(&mut self, val: &Self::Value) {
|
|
self.vals.push(*val);
|
|
}
|
|
|
|
fn write_block(&mut self, writer: &mut Vec<u8>) {
|
|
let mut prev_val = 0u64;
|
|
vint::serialize_into_vec(self.vals.len() as u64, writer);
|
|
for &val in &self.vals {
|
|
let delta = val - prev_val;
|
|
vint::serialize_into_vec(delta, writer);
|
|
prev_val = val;
|
|
}
|
|
self.vals.clear();
|
|
}
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub struct U64MonotonicReader {
|
|
vals: Vec<u64>,
|
|
}
|
|
|
|
impl ValueReader for U64MonotonicReader {
|
|
type Value = u64;
|
|
|
|
fn value(&self, idx: usize) -> &Self::Value {
|
|
&self.vals[idx]
|
|
}
|
|
|
|
fn read(&mut self, reader: &mut BlockReader) -> io::Result<()> {
|
|
let len = reader.deserialize_u64() as usize;
|
|
self.vals.clear();
|
|
let mut prev_val = 0u64;
|
|
for _ in 0..len {
|
|
let delta = reader.deserialize_u64() as u64;
|
|
let val = prev_val + delta;
|
|
self.vals.push(val);
|
|
prev_val = val;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|