1 extern crate heapsize; 2 3 use self::heapsize::{HeapSizeOf, heap_size_of}; 4 use std::hash::{Hash, BuildHasher}; 5 6 use {LinkedHashMap, KeyRef, 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 K: HeapSizeOf, 16 V: HeapSizeOf 17 { heap_size_of_children(&self) -> usize18 fn heap_size_of_children(&self) -> usize { 19 self.key.heap_size_of_children() + self.value.heap_size_of_children() 20 } 21 } 22 23 impl<K, V, S> HeapSizeOf for LinkedHashMap<K, V, S> 24 where K: HeapSizeOf + Hash + Eq, 25 V: HeapSizeOf, 26 S: BuildHasher 27 { heap_size_of_children(&self) -> usize28 fn heap_size_of_children(&self) -> usize { 29 unsafe { 30 let mut size = self.map.heap_size_of_children(); 31 for &value in self.map.values() { 32 size += (*value).heap_size_of_children(); 33 size += heap_size_of(value as *const _ as *const _); 34 } 35 36 if !self.head.is_null() { 37 size += heap_size_of(self.head as *const _ as *const _); 38 } 39 40 let mut free = self.free; 41 while !free.is_null() { 42 size += heap_size_of(free as *const _ as *const _); 43 free = (*free).next 44 } 45 46 size 47 } 48 } 49 } 50