use crate::{GetSize, GetSizeTracker};
impl GetSize for roaring::RoaringBitmap {
fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
let s = self.statistics();
let bytes =
s.n_bytes_array_containers + s.n_bytes_bitset_containers + s.n_bytes_run_containers;
debug_assert!(bytes <= usize::MAX as u64);
(usize::try_from(bytes).unwrap_or(usize::MAX), tracker)
}
}
impl GetSize for roaring::RoaringTreemap {
fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
self.bitmaps()
.fold((0, tracker), |(size, tracker), (key, bitmap)| {
let (key_size, tracker) = u32::get_size_with_tracker(&key, tracker);
let (bm_size, tracker) =
roaring::RoaringBitmap::get_size_with_tracker(bitmap, tracker);
(size + key_size + bm_size, tracker)
})
}
}