@@ -51,18 +51,18 @@ use std::ptr;
51
51
52
52
struct KeyRef < K > { k : * const K }
53
53
54
- struct LinkedHashMapEntry < K , V > {
55
- next : * mut LinkedHashMapEntry < K , V > ,
56
- prev : * mut LinkedHashMapEntry < K , V > ,
54
+ struct Node < K , V > {
55
+ next : * mut Node < K , V > ,
56
+ prev : * mut Node < K , V > ,
57
57
key : K ,
58
58
value : V ,
59
59
}
60
60
61
61
/// A linked hash map.
62
62
pub struct LinkedHashMap < K , V , S = hash_map:: RandomState > {
63
- map : HashMap < KeyRef < K > , * mut LinkedHashMapEntry < K , V > , S > ,
64
- head : * mut LinkedHashMapEntry < K , V > ,
65
- free : * mut LinkedHashMapEntry < K , V > ,
63
+ map : HashMap < KeyRef < K > , * mut Node < K , V > , S > ,
64
+ head : * mut Node < K , V > ,
65
+ free : * mut Node < K , V > ,
66
66
}
67
67
68
68
impl < K : Hash > Hash for KeyRef < K > {
@@ -95,9 +95,9 @@ impl<K, Q: ?Sized> Borrow<Qey<Q>> for KeyRef<K> where K: Borrow<Q> {
95
95
}
96
96
}
97
97
98
- impl < K , V > LinkedHashMapEntry < K , V > {
98
+ impl < K , V > Node < K , V > {
99
99
fn new ( k : K , v : V ) -> Self {
100
- LinkedHashMapEntry {
100
+ Node {
101
101
key : k,
102
102
value : v,
103
103
next : ptr:: null_mut ( ) ,
@@ -106,9 +106,9 @@ impl<K, V> LinkedHashMapEntry<K, V> {
106
106
}
107
107
}
108
108
109
- unsafe fn drop_empty_entry_box < K , V > ( the_box : * mut LinkedHashMapEntry < K , V > ) {
109
+ unsafe fn drop_empty_node < K , V > ( the_box : * mut Node < K , V > ) {
110
110
// Prevent compiler from trying to drop the un-initialized key and values in the node.
111
- let LinkedHashMapEntry { key, value, .. } = * Box :: from_raw ( the_box) ;
111
+ let Node { key, value, .. } = * Box :: from_raw ( the_box) ;
112
112
mem:: forget ( key) ;
113
113
mem:: forget ( value) ;
114
114
}
@@ -139,7 +139,7 @@ impl<K, V, S> LinkedHashMap<K, V, S> {
139
139
let mut free = self . free ;
140
140
while ! free. is_null ( ) {
141
141
let next_free = ( * free) . next ;
142
- drop_empty_entry_box ( free) ;
142
+ drop_empty_node ( free) ;
143
143
free = next_free;
144
144
}
145
145
self . free = ptr:: null_mut ( ) ;
@@ -148,7 +148,7 @@ impl<K, V, S> LinkedHashMap<K, V, S> {
148
148
}
149
149
150
150
impl < K : Hash + Eq , V , S : BuildHasher > LinkedHashMap < K , V , S > {
151
- fn with_map ( map : HashMap < KeyRef < K > , * mut LinkedHashMapEntry < K , V > , S > ) -> Self {
151
+ fn with_map ( map : HashMap < KeyRef < K > , * mut Node < K , V > , S > ) -> Self {
152
152
LinkedHashMap {
153
153
map : map,
154
154
head : ptr:: null_mut ( ) ,
@@ -212,13 +212,13 @@ impl<K: Hash + Eq, V, S: BuildHasher> LinkedHashMap<K, V, S> {
212
212
}
213
213
None => {
214
214
let node = if self . free . is_null ( ) {
215
- Box :: into_raw ( Box :: new ( LinkedHashMapEntry :: new ( k, v) ) )
215
+ Box :: into_raw ( Box :: new ( Node :: new ( k, v) ) )
216
216
} else {
217
217
// use a recycled box
218
218
unsafe {
219
219
let free = self . free ;
220
220
self . free = ( * free) . next ;
221
- ptr:: write ( free, LinkedHashMapEntry :: new ( k, v) ) ;
221
+ ptr:: write ( free, Node :: new ( k, v) ) ;
222
222
free
223
223
}
224
224
} ;
@@ -617,15 +617,15 @@ impl<'a, K, V, S, Q: ?Sized> IndexMut<&'a Q> for LinkedHashMap<K, V, S>
617
617
618
618
impl < K : Hash + Eq , V , S : BuildHasher > LinkedHashMap < K , V , S > {
619
619
#[ inline]
620
- fn detach ( & mut self , node : * mut LinkedHashMapEntry < K , V > ) {
620
+ fn detach ( & mut self , node : * mut Node < K , V > ) {
621
621
unsafe {
622
622
( * ( * node) . prev ) . next = ( * node) . next ;
623
623
( * ( * node) . next ) . prev = ( * node) . prev ;
624
624
}
625
625
}
626
626
627
627
#[ inline]
628
- fn attach ( & mut self , node : * mut LinkedHashMapEntry < K , V > ) {
628
+ fn attach ( & mut self , node : * mut Node < K , V > ) {
629
629
unsafe {
630
630
( * node) . next = ( * self . head ) . next ;
631
631
( * node) . prev = self . head ;
@@ -742,7 +742,7 @@ impl<K, V, S> Drop for LinkedHashMap<K, V, S> {
742
742
if !self . head . is_null ( ) {
743
743
unsafe {
744
744
self . drop_entries ( ) ;
745
- drop_empty_entry_box ( self . head ) ;
745
+ drop_empty_node ( self . head ) ;
746
746
}
747
747
}
748
748
self . clear_free_list ( ) ;
@@ -752,25 +752,25 @@ impl<K, V, S> Drop for LinkedHashMap<K, V, S> {
752
752
/// An insertion-order iterator over a `LinkedHashMap`'s entries, with immutable references to the
753
753
/// values.
754
754
pub struct Iter < ' a , K : ' a , V : ' a > {
755
- head : * const LinkedHashMapEntry < K , V > ,
756
- tail : * const LinkedHashMapEntry < K , V > ,
755
+ head : * const Node < K , V > ,
756
+ tail : * const Node < K , V > ,
757
757
remaining : usize ,
758
758
marker : marker:: PhantomData < ( & ' a K , & ' a V ) > ,
759
759
}
760
760
761
761
/// An insertion-order iterator over a `LinkedHashMap`'s entries, with mutable references to the
762
762
/// values.
763
763
pub struct IterMut < ' a , K : ' a , V : ' a > {
764
- head : * mut LinkedHashMapEntry < K , V > ,
765
- tail : * mut LinkedHashMapEntry < K , V > ,
764
+ head : * mut Node < K , V > ,
765
+ tail : * mut Node < K , V > ,
766
766
remaining : usize ,
767
767
marker : marker:: PhantomData < ( & ' a K , & ' a mut V ) > ,
768
768
}
769
769
770
770
/// A consuming insertion-order iterator over a `LinkedHashMap`'s entries.
771
771
pub struct IntoIter < K , V > {
772
- head : * mut LinkedHashMapEntry < K , V > ,
773
- tail : * mut LinkedHashMapEntry < K , V > ,
772
+ head : * mut Node < K , V > ,
773
+ tail : * mut Node < K , V > ,
774
774
remaining : usize ,
775
775
marker : marker:: PhantomData < ( K , V ) > ,
776
776
}
@@ -797,20 +797,20 @@ impl<K, V> Clone for IntoIter<K, V> where K: Clone, V: Clone {
797
797
return IntoIter { ..* self }
798
798
}
799
799
800
- fn clone_entry < K , V > ( e : * mut LinkedHashMapEntry < K , V > ) -> * mut LinkedHashMapEntry < K , V >
800
+ fn clone_node < K , V > ( e : * mut Node < K , V > ) -> * mut Node < K , V >
801
801
where K : Clone , V : Clone ,
802
802
{
803
- Box :: into_raw ( Box :: new ( LinkedHashMapEntry :: new (
803
+ Box :: into_raw ( Box :: new ( Node :: new (
804
804
unsafe { ( * e) . key . clone ( ) } , unsafe { ( * e) . value . clone ( ) }
805
805
) ) )
806
806
}
807
807
808
808
let mut cur = self . head ;
809
- let head = clone_entry ( cur) ;
809
+ let head = clone_node ( cur) ;
810
810
let mut tail = head;
811
811
for _ in 1 ..self . remaining {
812
812
unsafe {
813
- ( * tail) . prev = clone_entry ( ( * cur) . prev ) ;
813
+ ( * tail) . prev = clone_node ( ( * cur) . prev ) ;
814
814
( * ( * tail) . prev ) . next = tail;
815
815
tail = ( * tail) . prev ;
816
816
cur = ( * cur) . prev ;
@@ -1030,7 +1030,7 @@ impl<K: Hash + Eq, V, S: BuildHasher> IntoIterator for LinkedHashMap<K, V, S> {
1030
1030
let len = self . len ( ) ;
1031
1031
1032
1032
if !self . head . is_null ( ) {
1033
- unsafe { drop_empty_entry_box ( self . head ) }
1033
+ unsafe { drop_empty_node ( self . head ) }
1034
1034
}
1035
1035
self . clear_free_list ( ) ;
1036
1036
// drop the HashMap but not the LinkedHashMap
0 commit comments