Serializing a RoaringBitmap into a Vec cannot fail

This commit is contained in:
Kerollmops 2021-06-09 11:28:38 +02:00
parent ff9414a6ba
commit 93978ec38a
No known key found for this signature in database
GPG key ID: 92ADA4E935E71FA4
3 changed files with 8 additions and 10 deletions

View file

@ -23,18 +23,17 @@ impl CboRoaringBitmapCodec {
}
}
pub fn serialize_into(roaring: &RoaringBitmap, vec: &mut Vec<u8>) -> io::Result<()> {
pub fn serialize_into(roaring: &RoaringBitmap, vec: &mut Vec<u8>) {
if roaring.len() <= THRESHOLD as u64 {
// If the number of items (u32s) to encode is less than or equal to the threshold
// it means that it would weigh the same or less than the RoaringBitmap
// header, so we directly encode them using ByteOrder instead.
for integer in roaring {
vec.write_u32::<NativeEndian>(integer)?;
vec.write_u32::<NativeEndian>(integer).unwrap();
}
Ok(())
} else {
// Otherwise, we use the classic RoaringBitmapCodec that writes a header.
roaring.serialize_into(vec)
roaring.serialize_into(vec).unwrap();
}
}
@ -68,7 +67,7 @@ impl heed::BytesEncode<'_> for CboRoaringBitmapCodec {
fn bytes_encode(item: &Self::EItem) -> Option<Cow<[u8]>> {
let mut vec = Vec::with_capacity(Self::serialized_size(item));
Self::serialize_into(item, &mut vec).ok()?;
Self::serialize_into(item, &mut vec);
Some(Cow::Owned(vec))
}
}