Skip to main content

get_size2/impls/feature/
dashmap.rs

1use std::hash::{BuildHasher, Hash};
2
3use crate::{GetSize, GetSizeTracker};
4
5impl<K, V, S> GetSize for dashmap::DashMap<K, V, S>
6where
7    K: GetSize + Eq + Hash,
8    V: GetSize,
9    S: BuildHasher + Clone,
10{
11    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
12        let (size, tracker) = self.iter().fold((0, tracker), |(size, tracker), entry| {
13            let (k_size, tracker) = K::get_heap_size_with_tracker(entry.key(), tracker);
14            let (v_size, tracker) = V::get_heap_size_with_tracker(entry.value(), tracker);
15            (size + k_size + v_size, tracker)
16        });
17
18        let allocation_size = self.capacity() * <(K, V)>::get_stack_size();
19        (size + allocation_size, tracker)
20    }
21}
22
23impl<T, S> GetSize for dashmap::DashSet<T, S>
24where
25    T: GetSize + Eq + Hash,
26    S: BuildHasher + Clone,
27{
28    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
29        let (size, tracker) = self.iter().fold((0, tracker), |(size, tracker), entry| {
30            let (elem_size, tracker) = T::get_heap_size_with_tracker(entry.key(), tracker);
31            (size + elem_size, tracker)
32        });
33
34        let allocation_size = self.capacity() * T::get_stack_size();
35        (size + allocation_size, tracker)
36    }
37}