Skip to main content

get_size2/impls/feature/
hashbrown.rs

1use crate::{GetSize, GetSizeTracker};
2
3impl<K, V, H> GetSize for hashbrown::HashMap<K, V, H>
4where
5    K: GetSize + Eq + std::hash::Hash,
6    V: GetSize,
7    H: std::hash::BuildHasher,
8{
9    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
10        let (size, tracker) = self
11            .iter()
12            .fold((0, tracker), |(size, tracker), (key, value)| {
13                let (key_size, tracker) = K::get_heap_size_with_tracker(key, tracker);
14                let (value_size, tracker) = V::get_heap_size_with_tracker(value, tracker);
15                (size + key_size + value_size, tracker)
16            });
17
18        (size + self.allocation_size(), tracker)
19    }
20}
21
22impl<T, H> GetSize for hashbrown::HashSet<T, H>
23where
24    T: GetSize + Eq + std::hash::Hash,
25    H: std::hash::BuildHasher,
26{
27    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
28        let (size, tracker) = self.iter().fold((0, tracker), |(size, tracker), element| {
29            let (elem_size, tracker) = T::get_heap_size_with_tracker(element, tracker);
30            (size + elem_size, tracker)
31        });
32
33        (size + self.allocation_size(), tracker)
34    }
35}
36
37impl<T> GetSize for hashbrown::HashTable<T>
38where
39    T: GetSize,
40{
41    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
42        let (size, tracker) = self.iter().fold((0, tracker), |(size, tracker), element| {
43            let (elem_size, tracker) = T::get_heap_size_with_tracker(element, tracker);
44            (size + elem_size, tracker)
45        });
46
47        (size + self.allocation_size(), tracker)
48    }
49}