1 extern crate heapsize; 2 3 use self::heapsize::{heap_size_of, HeapSizeOf}; 4 use std::hash::{BuildHasher, Hash}; 5 6 use {KeyRef, LinkedHashMap, Node}; 7 8 impl<K> HeapSizeOf for KeyRef<K> { heap_size_of_children(&self) -> usize9 fn heap_size_of_children(&self) -> usize { 10 0 11 } 12 } 13 14 impl<K, V> HeapSizeOf for Node<K, V> 15 where 16 K: HeapSizeOf, 17 V: HeapSizeOf, 18 { heap_size_of_children(&self) -> usize19 fn heap_size_of_children(&self) -> usize { 20 self.key.heap_size_of_children() + self.value.heap_size_of_children() 21 } 22 } 23 24 impl<K, V, S> HeapSizeOf for LinkedHashMap<K, V, S> 25 where 26 K: HeapSizeOf + Hash + Eq, 27 V: HeapSizeOf, 28 S: BuildHasher, 29 { heap_size_of_children(&self) -> usize30 fn heap_size_of_children(&self) -> usize { 31 unsafe { 32 let mut size = self.map.heap_size_of_children(); 33 for &value in self.map.values() { 34 size += (*value).heap_size_of_children(); 35 size += heap_size_of(value as *const _ as *const _); 36 } 37 38 if !self.head.is_null() { 39 size += heap_size_of(self.head as *const _ as *const _); 40 } 41 42 let mut free = self.free; 43 while !free.is_null() { 44 size += heap_size_of(free as *const _ as *const _); 45 free = (*free).next 46 } 47 48 size 49 } 50 } 51 } 52