@@ -92,6 +92,8 @@ use core::ptr::copy;
9292use core:: ptr:: copy_nonoverlapping;
9393use core:: ptr:: NonNull ;
9494
95+ #[ cfg( feature = "malloc_size_of" ) ]
96+ use malloc_size_of:: { MallocShallowSizeOf , MallocSizeOf , MallocSizeOfOps } ;
9597#[ cfg( feature = "serde" ) ]
9698use serde:: {
9799 de:: { Deserialize , Deserializer , SeqAccess , Visitor } ,
@@ -2176,6 +2178,28 @@ where
21762178 }
21772179}
21782180
2181+ #[ cfg( feature = "malloc_size_of" ) ]
2182+ impl < T , const N : usize > MallocShallowSizeOf for SmallVec < T , N > {
2183+ fn shallow_size_of ( & self , ops : & mut MallocSizeOfOps ) -> usize {
2184+ if self . spilled ( ) {
2185+ unsafe { ops. malloc_size_of ( self . as_ptr ( ) ) }
2186+ } else {
2187+ 0
2188+ }
2189+ }
2190+ }
2191+
2192+ #[ cfg( feature = "malloc_size_of" ) ]
2193+ impl < T : MallocSizeOf , const N : usize > MallocSizeOf for SmallVec < T , N > {
2194+ fn size_of ( & self , ops : & mut MallocSizeOfOps ) -> usize {
2195+ let mut n = self . shallow_size_of ( ops) ;
2196+ for elem in self . iter ( ) {
2197+ n += elem. size_of ( ops) ;
2198+ }
2199+ n
2200+ }
2201+ }
2202+
21792203#[ cfg( feature = "std" ) ]
21802204#[ cfg_attr( docsrs, doc( cfg( feature = "std" ) ) ) ]
21812205impl < const N : usize > io:: Write for SmallVec < u8 , N > {
0 commit comments