mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-23 02:27:40 +08:00
Introduce a BytesDecodeOwned trait in heed_codecs
This commit is contained in:
parent
a61ca4066e
commit
9680e1e41f
@ -23,3 +23,9 @@ pub use self::roaring_bitmap_length::{
|
|||||||
pub use self::script_language_codec::ScriptLanguageCodec;
|
pub use self::script_language_codec::ScriptLanguageCodec;
|
||||||
pub use self::str_beu32_codec::{StrBEU16Codec, StrBEU32Codec};
|
pub use self::str_beu32_codec::{StrBEU16Codec, StrBEU32Codec};
|
||||||
pub use self::str_str_u8_codec::{U8StrStrCodec, UncheckedU8StrStrCodec};
|
pub use self::str_str_u8_codec::{U8StrStrCodec, UncheckedU8StrStrCodec};
|
||||||
|
|
||||||
|
pub trait BytesDecodeOwned {
|
||||||
|
type DItem;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem>;
|
||||||
|
}
|
||||||
|
@ -2,8 +2,11 @@ use std::borrow::Cow;
|
|||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
use std::mem::size_of;
|
use std::mem::size_of;
|
||||||
|
|
||||||
|
use heed::BytesDecode;
|
||||||
use roaring::RoaringBitmap;
|
use roaring::RoaringBitmap;
|
||||||
|
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
pub struct BoRoaringBitmapCodec;
|
pub struct BoRoaringBitmapCodec;
|
||||||
|
|
||||||
impl BoRoaringBitmapCodec {
|
impl BoRoaringBitmapCodec {
|
||||||
@ -13,7 +16,7 @@ impl BoRoaringBitmapCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl heed::BytesDecode<'_> for BoRoaringBitmapCodec {
|
impl BytesDecode<'_> for BoRoaringBitmapCodec {
|
||||||
type DItem = RoaringBitmap;
|
type DItem = RoaringBitmap;
|
||||||
|
|
||||||
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
@ -28,6 +31,14 @@ impl heed::BytesDecode<'_> for BoRoaringBitmapCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for BoRoaringBitmapCodec {
|
||||||
|
type DItem = RoaringBitmap;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
Self::bytes_decode(bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl heed::BytesEncode<'_> for BoRoaringBitmapCodec {
|
impl heed::BytesEncode<'_> for BoRoaringBitmapCodec {
|
||||||
type EItem = RoaringBitmap;
|
type EItem = RoaringBitmap;
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ use std::mem::size_of;
|
|||||||
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||||
use roaring::RoaringBitmap;
|
use roaring::RoaringBitmap;
|
||||||
|
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
/// This is the limit where using a byteorder became less size efficient
|
/// This is the limit where using a byteorder became less size efficient
|
||||||
/// than using a direct roaring encoding, it is also the point where we are able
|
/// than using a direct roaring encoding, it is also the point where we are able
|
||||||
/// to determine the encoding used only by using the array of bytes length.
|
/// to determine the encoding used only by using the array of bytes length.
|
||||||
@ -103,6 +105,14 @@ impl heed::BytesDecode<'_> for CboRoaringBitmapCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for CboRoaringBitmapCodec {
|
||||||
|
type DItem = RoaringBitmap;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
Self::deserialize_from(bytes).ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl heed::BytesEncode<'_> for CboRoaringBitmapCodec {
|
impl heed::BytesEncode<'_> for CboRoaringBitmapCodec {
|
||||||
type EItem = RoaringBitmap;
|
type EItem = RoaringBitmap;
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ use std::borrow::Cow;
|
|||||||
|
|
||||||
use roaring::RoaringBitmap;
|
use roaring::RoaringBitmap;
|
||||||
|
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
pub struct RoaringBitmapCodec;
|
pub struct RoaringBitmapCodec;
|
||||||
|
|
||||||
impl heed::BytesDecode<'_> for RoaringBitmapCodec {
|
impl heed::BytesDecode<'_> for RoaringBitmapCodec {
|
||||||
@ -12,6 +14,14 @@ impl heed::BytesDecode<'_> for RoaringBitmapCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for RoaringBitmapCodec {
|
||||||
|
type DItem = RoaringBitmap;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
RoaringBitmap::deserialize_from(bytes).ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl heed::BytesEncode<'_> for RoaringBitmapCodec {
|
impl heed::BytesEncode<'_> for RoaringBitmapCodec {
|
||||||
type EItem = RoaringBitmap;
|
type EItem = RoaringBitmap;
|
||||||
|
|
||||||
|
@ -1,11 +1,23 @@
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
use heed::BytesDecode;
|
||||||
|
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
pub struct BoRoaringBitmapLenCodec;
|
pub struct BoRoaringBitmapLenCodec;
|
||||||
|
|
||||||
impl heed::BytesDecode<'_> for BoRoaringBitmapLenCodec {
|
impl BytesDecode<'_> for BoRoaringBitmapLenCodec {
|
||||||
type DItem = u64;
|
type DItem = u64;
|
||||||
|
|
||||||
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
Some((bytes.len() / mem::size_of::<u32>()) as u64)
|
Some((bytes.len() / mem::size_of::<u32>()) as u64)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for BoRoaringBitmapLenCodec {
|
||||||
|
type DItem = u64;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
Self::bytes_decode(bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
use heed::BytesDecode;
|
||||||
|
|
||||||
use super::{BoRoaringBitmapLenCodec, RoaringBitmapLenCodec};
|
use super::{BoRoaringBitmapLenCodec, RoaringBitmapLenCodec};
|
||||||
use crate::heed_codec::roaring_bitmap::cbo_roaring_bitmap_codec::THRESHOLD;
|
use crate::heed_codec::roaring_bitmap::cbo_roaring_bitmap_codec::THRESHOLD;
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
pub struct CboRoaringBitmapLenCodec;
|
pub struct CboRoaringBitmapLenCodec;
|
||||||
|
|
||||||
impl heed::BytesDecode<'_> for CboRoaringBitmapLenCodec {
|
impl BytesDecode<'_> for CboRoaringBitmapLenCodec {
|
||||||
type DItem = u64;
|
type DItem = u64;
|
||||||
|
|
||||||
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
@ -20,3 +23,11 @@ impl heed::BytesDecode<'_> for CboRoaringBitmapLenCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for CboRoaringBitmapLenCodec {
|
||||||
|
type DItem = u64;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
Self::bytes_decode(bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,6 +3,8 @@ use std::mem;
|
|||||||
|
|
||||||
use byteorder::{LittleEndian, ReadBytesExt};
|
use byteorder::{LittleEndian, ReadBytesExt};
|
||||||
|
|
||||||
|
use crate::heed_codec::BytesDecodeOwned;
|
||||||
|
|
||||||
const SERIAL_COOKIE_NO_RUNCONTAINER: u32 = 12346;
|
const SERIAL_COOKIE_NO_RUNCONTAINER: u32 = 12346;
|
||||||
const SERIAL_COOKIE: u16 = 12347;
|
const SERIAL_COOKIE: u16 = 12347;
|
||||||
|
|
||||||
@ -59,6 +61,14 @@ impl heed::BytesDecode<'_> for RoaringBitmapLenCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl BytesDecodeOwned for RoaringBitmapLenCodec {
|
||||||
|
type DItem = u64;
|
||||||
|
|
||||||
|
fn bytes_decode_owned(bytes: &[u8]) -> Option<Self::DItem> {
|
||||||
|
RoaringBitmapLenCodec::deserialize_from_slice(bytes).ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use heed::BytesEncode;
|
use heed::BytesEncode;
|
||||||
|
Loading…
Reference in New Issue
Block a user