Skip to main content

get_size2/impls/feature/
thin_vec.rs

1use crate::{GetSize, GetSizeTracker};
2
3impl<T> GetSize for thin_vec::ThinVec<T>
4where
5    T: GetSize,
6{
7    fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
8        if self.capacity() == 0 {
9            // If it's the singleton we might not be a heap pointer.
10            return (0, tracker);
11        }
12
13        let (size, tracker) = self.iter().fold((0, tracker), |(size, tracker), element| {
14            let (elem_size, tracker) = T::get_heap_size_with_tracker(element, tracker);
15            (size + elem_size, tracker)
16        });
17
18        let metadata_size = std::mem::size_of::<usize>() * 2; // Capacity and length.
19        let allocation_size = self.capacity() * T::get_stack_size();
20        (size + metadata_size + allocation_size, tracker)
21    }
22}