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