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 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}