datasize/
smallvec.rs

1use super::DataSize;
2use core::mem::size_of;
3
4impl<A> DataSize for smallvec::SmallVec<A>
5where
6    A: smallvec::Array,
7    A::Item: DataSize,
8{
9    const IS_DYNAMIC: bool = true;
10
11    const STATIC_HEAP_SIZE: usize = 0;
12
13    #[inline]
14    fn estimate_heap_size(&self) -> usize {
15        if !self.spilled() {
16            return 0;
17        }
18
19        // At this point, we're very similar to a regular `Vec`.
20
21        let sz_base = self.capacity() * size_of::<A::Item>();
22
23        let sz_used = if A::Item::IS_DYNAMIC {
24            self.iter().map(DataSize::estimate_heap_size).sum()
25        } else {
26            self.len() * A::Item::STATIC_HEAP_SIZE
27        };
28
29        sz_base + sz_used
30    }
31}