merge traits

This commit is contained in:
Pascal Seitz
2022-08-26 10:01:10 +02:00
parent fd60e6fe08
commit fdd0f63787
8 changed files with 19 additions and 47 deletions

View File

@@ -27,7 +27,7 @@ mod tests {
}
fn bench_get<
S: FastFieldCodecSerializer,
R: FastFieldCodecDeserializer + FastFieldCodecReader,
R: FastFieldCodecDeserializer + FastFieldDataAccess,
>(
b: &mut Bencher,
data: &[u64],

View File

@@ -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)

View File

@@ -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);

View File

@@ -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() {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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.

View File

@@ -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;