get_size2/impls/feature/
roaring.rs1use crate::{GetSize, GetSizeTracker};
2
3impl GetSize for roaring::RoaringBitmap {
10 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
11 let s = self.statistics();
12 let bytes =
13 s.n_bytes_array_containers + s.n_bytes_bitset_containers + s.n_bytes_run_containers;
14 debug_assert!(
17 usize::try_from(bytes).is_ok(),
18 "container byte total {bytes} exceeds usize::MAX"
19 );
20 (usize::try_from(bytes).unwrap_or(usize::MAX), tracker)
21 }
22}
23
24impl GetSize for roaring::RoaringTreemap {
28 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
29 self.bitmaps()
30 .fold((0, tracker), |(size, tracker), (key, bitmap)| {
31 let (key_size, tracker) = u32::get_size_with_tracker(&key, tracker);
32 let (bm_size, tracker) =
33 roaring::RoaringBitmap::get_size_with_tracker(bitmap, tracker);
34 (size + key_size + bm_size, tracker)
35 })
36 }
37}