mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-05-30 07:00:41 +00:00
merge traits
This commit is contained in:
@@ -27,7 +27,7 @@ mod tests {
|
||||
}
|
||||
fn bench_get<
|
||||
S: FastFieldCodecSerializer,
|
||||
R: FastFieldCodecDeserializer + FastFieldCodecReader,
|
||||
R: FastFieldCodecDeserializer + FastFieldDataAccess,
|
||||
>(
|
||||
b: &mut Bencher,
|
||||
data: &[u64],
|
||||
|
||||
@@ -5,8 +5,7 @@ use ownedbytes::OwnedBytes;
|
||||
use tantivy_bitpacker::{compute_num_bits, BitPacker, BitUnpacker};
|
||||
|
||||
use crate::{
|
||||
FastFieldCodecDeserializer, FastFieldCodecReader, FastFieldCodecSerializer, FastFieldCodecType,
|
||||
FastFieldDataAccess,
|
||||
FastFieldCodecDeserializer, FastFieldCodecSerializer, FastFieldCodecType, FastFieldDataAccess,
|
||||
};
|
||||
|
||||
/// Depending on the field type, a different
|
||||
@@ -40,7 +39,7 @@ impl FastFieldCodecDeserializer for BitpackedReader {
|
||||
})
|
||||
}
|
||||
}
|
||||
impl FastFieldCodecReader for BitpackedReader {
|
||||
impl FastFieldDataAccess for BitpackedReader {
|
||||
#[inline]
|
||||
fn get_val(&self, doc: u64) -> u64 {
|
||||
self.min_value_u64 + self.bit_unpacker.get(doc, &self.data)
|
||||
|
||||
@@ -19,8 +19,7 @@ use tantivy_bitpacker::{compute_num_bits, BitPacker, BitUnpacker};
|
||||
|
||||
use crate::linear::{get_calculated_value, get_slope};
|
||||
use crate::{
|
||||
FastFieldCodecDeserializer, FastFieldCodecReader, FastFieldCodecSerializer, FastFieldCodecType,
|
||||
FastFieldDataAccess,
|
||||
FastFieldCodecDeserializer, FastFieldCodecSerializer, FastFieldCodecType, FastFieldDataAccess,
|
||||
};
|
||||
|
||||
const CHUNK_SIZE: u64 = 512;
|
||||
@@ -160,7 +159,7 @@ impl FastFieldCodecDeserializer for BlockwiseLinearReader {
|
||||
}
|
||||
}
|
||||
|
||||
impl FastFieldCodecReader for BlockwiseLinearReader {
|
||||
impl FastFieldDataAccess for BlockwiseLinearReader {
|
||||
#[inline]
|
||||
fn get_val(&self, idx: u64) -> u64 {
|
||||
let interpolation = get_interpolation_function(idx, &self.footer.interpolations);
|
||||
|
||||
@@ -15,11 +15,10 @@ pub mod linear;
|
||||
pub trait FastFieldCodecDeserializer: Sized {
|
||||
/// Reads the metadata and returns the CodecReader
|
||||
fn open_from_bytes(bytes: OwnedBytes) -> std::io::Result<Self>
|
||||
where
|
||||
Self: FastFieldCodecReader;
|
||||
where Self: FastFieldDataAccess;
|
||||
}
|
||||
|
||||
pub trait FastFieldCodecReader: Sized {
|
||||
pub trait FastFieldDataAccess {
|
||||
fn get_val(&self, doc: u64) -> u64;
|
||||
fn min_value(&self) -> u64;
|
||||
fn max_value(&self) -> u64;
|
||||
@@ -95,31 +94,6 @@ pub trait FastFieldCodecSerializer {
|
||||
) -> io::Result<()>;
|
||||
}
|
||||
|
||||
/// FastFieldDataAccess is the trait to access fast field data during serialization and estimation.
|
||||
pub trait FastFieldDataAccess {
|
||||
/// Return the value associated to the given position.
|
||||
///
|
||||
/// Whenever possible use the Iterator passed to the fastfield creation instead, for performance
|
||||
/// reasons.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// May panic if `position` is greater than the index.
|
||||
fn get_val(&self, position: u64) -> u64;
|
||||
|
||||
/// Returns a iterator over the data
|
||||
fn iter(&self) -> Box<dyn Iterator<Item = u64> + '_>;
|
||||
|
||||
/// min value of the data
|
||||
fn min_value(&self) -> u64;
|
||||
|
||||
/// max value of the data
|
||||
fn max_value(&self) -> u64;
|
||||
|
||||
/// num vals
|
||||
fn num_vals(&self) -> u64;
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
/// Statistics are used in codec detection and stored in the fast field footer.
|
||||
pub struct FastFieldStats {
|
||||
@@ -181,7 +155,7 @@ mod tests {
|
||||
|
||||
pub fn create_and_validate<
|
||||
S: FastFieldCodecSerializer,
|
||||
R: FastFieldCodecDeserializer + FastFieldCodecReader,
|
||||
R: FastFieldCodecDeserializer + FastFieldDataAccess,
|
||||
>(
|
||||
data: &[u64],
|
||||
name: &str,
|
||||
@@ -244,7 +218,7 @@ mod tests {
|
||||
|
||||
fn test_codec<
|
||||
S: FastFieldCodecSerializer,
|
||||
R: FastFieldCodecReader + FastFieldCodecDeserializer,
|
||||
R: FastFieldDataAccess + FastFieldCodecDeserializer,
|
||||
>() {
|
||||
let codec_name = format!("{:?}", S::CODEC_TYPE);
|
||||
for (data, dataset_name) in get_codec_test_data_sets() {
|
||||
|
||||
@@ -6,8 +6,7 @@ use ownedbytes::OwnedBytes;
|
||||
use tantivy_bitpacker::{compute_num_bits, BitPacker, BitUnpacker};
|
||||
|
||||
use crate::{
|
||||
FastFieldCodecDeserializer, FastFieldCodecReader, FastFieldCodecSerializer, FastFieldCodecType,
|
||||
FastFieldDataAccess,
|
||||
FastFieldCodecDeserializer, FastFieldCodecSerializer, FastFieldCodecType, FastFieldDataAccess,
|
||||
};
|
||||
|
||||
/// Depending on the field type, a different
|
||||
@@ -78,7 +77,7 @@ impl FastFieldCodecDeserializer for LinearReader {
|
||||
}
|
||||
}
|
||||
|
||||
impl FastFieldCodecReader for LinearReader {
|
||||
impl FastFieldDataAccess for LinearReader {
|
||||
#[inline]
|
||||
fn get_val(&self, doc: u64) -> u64 {
|
||||
let calculated_value = get_calculated_value(self.footer.first_val, doc, self.slope);
|
||||
|
||||
@@ -3,7 +3,7 @@ use std::num::NonZeroU64;
|
||||
|
||||
use common::BinarySerializable;
|
||||
use fastdivide::DividerU64;
|
||||
use fastfield_codecs::{FastFieldCodecDeserializer, FastFieldCodecReader};
|
||||
use fastfield_codecs::{FastFieldCodecDeserializer, FastFieldDataAccess};
|
||||
use ownedbytes::OwnedBytes;
|
||||
|
||||
pub const GCD_DEFAULT: u64 = 1;
|
||||
@@ -19,7 +19,7 @@ pub struct GCDFastFieldCodec<CodecReader> {
|
||||
reader: CodecReader,
|
||||
}
|
||||
|
||||
impl<C: FastFieldCodecReader + FastFieldCodecDeserializer + Clone> FastFieldCodecDeserializer
|
||||
impl<C: FastFieldDataAccess + FastFieldCodecDeserializer + Clone> FastFieldCodecDeserializer
|
||||
for GCDFastFieldCodec<C>
|
||||
{
|
||||
fn open_from_bytes(bytes: OwnedBytes) -> std::io::Result<Self> {
|
||||
@@ -38,7 +38,7 @@ impl<C: FastFieldCodecReader + FastFieldCodecDeserializer + Clone> FastFieldCode
|
||||
}
|
||||
}
|
||||
|
||||
impl<C: FastFieldCodecReader + Clone> FastFieldCodecReader for GCDFastFieldCodec<C> {
|
||||
impl<C: FastFieldDataAccess + Clone> FastFieldDataAccess for GCDFastFieldCodec<C> {
|
||||
#[inline]
|
||||
fn get_val(&self, doc: u64) -> u64 {
|
||||
let mut data = self.reader.get_val(doc);
|
||||
|
||||
@@ -6,7 +6,7 @@ use common::BinarySerializable;
|
||||
use fastfield_codecs::bitpacked::BitpackedReader;
|
||||
use fastfield_codecs::blockwise_linear::BlockwiseLinearReader;
|
||||
use fastfield_codecs::linear::LinearReader;
|
||||
use fastfield_codecs::{FastFieldCodecDeserializer, FastFieldCodecReader, FastFieldCodecType};
|
||||
use fastfield_codecs::{FastFieldCodecDeserializer, FastFieldCodecType, FastFieldDataAccess};
|
||||
|
||||
use super::{FastValue, GCDFastFieldCodec};
|
||||
use crate::directory::{CompositeFile, Directory, FileSlice, OwnedBytes, RamDirectory, WritePtr};
|
||||
@@ -199,7 +199,7 @@ pub struct FastFieldReaderCodecWrapper<Item: FastValue, CodecReader> {
|
||||
_phantom: PhantomData<Item>,
|
||||
}
|
||||
|
||||
impl<Item: FastValue, C: FastFieldCodecReader + FastFieldCodecDeserializer>
|
||||
impl<Item: FastValue, C: FastFieldDataAccess + FastFieldCodecDeserializer>
|
||||
FastFieldReaderCodecWrapper<Item, C>
|
||||
{
|
||||
/// Opens a fast field given a file.
|
||||
@@ -251,7 +251,7 @@ impl<Item: FastValue, C: FastFieldCodecReader + FastFieldCodecDeserializer>
|
||||
}
|
||||
}
|
||||
|
||||
impl<Item: FastValue, C: FastFieldCodecReader + FastFieldCodecDeserializer + Clone>
|
||||
impl<Item: FastValue, C: FastFieldDataAccess + FastFieldCodecDeserializer + Clone>
|
||||
FastFieldReader<Item> for FastFieldReaderCodecWrapper<Item, C>
|
||||
{
|
||||
/// Return the value associated to the given document.
|
||||
|
||||
@@ -2,12 +2,13 @@ use std::collections::HashMap;
|
||||
use std::io;
|
||||
|
||||
use common;
|
||||
use fastfield_codecs::FastFieldDataAccess;
|
||||
use fnv::FnvHashMap;
|
||||
use tantivy_bitpacker::BlockedBitpacker;
|
||||
|
||||
use super::multivalued::MultiValuedFastFieldWriter;
|
||||
use super::serializer::FastFieldStats;
|
||||
use super::{FastFieldDataAccess, FastFieldType, FastValue};
|
||||
use super::{FastFieldType, FastValue};
|
||||
use crate::fastfield::{BytesFastFieldWriter, CompositeFastFieldSerializer};
|
||||
use crate::indexer::doc_id_mapping::DocIdMapping;
|
||||
use crate::postings::UnorderedTermId;
|
||||
|
||||
Reference in New Issue
Block a user