28
28
//! ```
29
29
30
30
#![ forbid( missing_docs) ]
31
- #![ feature( hashmap_hasher) ]
32
31
#![ cfg_attr( test, feature( test) ) ]
33
32
34
33
use std:: borrow:: Borrow ;
35
34
use std:: cmp:: Ordering ;
36
35
use std:: collections:: hash_map:: { self , HashMap } ;
37
- use std:: collections:: hash_state:: HashState ;
38
36
use std:: fmt;
39
- use std:: hash:: { Hash , Hasher } ;
37
+ use std:: hash:: { BuildHasher , Hash , Hasher } ;
40
38
use std:: iter;
41
39
use std:: marker;
42
40
use std:: mem;
@@ -131,7 +129,7 @@ impl<K, V, S> LinkedHashMap<K, V, S> {
131
129
}
132
130
}
133
131
134
- impl < K : Hash + Eq , V , S : HashState > LinkedHashMap < K , V , S > {
132
+ impl < K : Hash + Eq , V , S : BuildHasher > LinkedHashMap < K , V , S > {
135
133
fn with_map ( map : HashMap < KeyRef < K > , Box < LinkedHashMapEntry < K , V > > , S > ) -> Self {
136
134
LinkedHashMap {
137
135
map : map,
@@ -142,12 +140,12 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
142
140
143
141
/// Creates an empty linked hash map with the given initial hash state.
144
142
pub fn with_hash_state ( hash_state : S ) -> Self {
145
- Self :: with_map ( HashMap :: with_hash_state ( hash_state) )
143
+ Self :: with_map ( HashMap :: with_hasher ( hash_state) )
146
144
}
147
145
148
146
/// Creates an empty linked hash map with the given initial capacity and hash state.
149
147
pub fn with_capacity_and_hash_state ( capacity : usize , hash_state : S ) -> Self {
150
- Self :: with_map ( HashMap :: with_capacity_and_hash_state ( capacity, hash_state) )
148
+ Self :: with_map ( HashMap :: with_capacity_and_hasher ( capacity, hash_state) )
151
149
}
152
150
153
151
/// Reserves capacity for at least `additional` more elements to be inserted into the map. The
@@ -576,7 +574,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
576
574
}
577
575
578
576
impl < ' a , K , V , S , Q : ?Sized > Index < & ' a Q > for LinkedHashMap < K , V , S >
579
- where K : Hash + Eq + Borrow < Q > , S : HashState , Q : Eq + Hash
577
+ where K : Hash + Eq + Borrow < Q > , S : BuildHasher , Q : Eq + Hash
580
578
{
581
579
type Output = V ;
582
580
@@ -586,14 +584,14 @@ impl<'a, K, V, S, Q: ?Sized> Index<&'a Q> for LinkedHashMap<K, V, S>
586
584
}
587
585
588
586
impl < ' a , K , V , S , Q : ?Sized > IndexMut < & ' a Q > for LinkedHashMap < K , V , S >
589
- where K : Hash + Eq + Borrow < Q > , S : HashState , Q : Eq + Hash
587
+ where K : Hash + Eq + Borrow < Q > , S : BuildHasher , Q : Eq + Hash
590
588
{
591
589
fn index_mut ( & mut self , index : & ' a Q ) -> & mut V {
592
590
self . get_mut ( index) . expect ( "no entry found for key" )
593
591
}
594
592
}
595
593
596
- impl < K : Hash + Eq , V , S : HashState > LinkedHashMap < K , V , S > {
594
+ impl < K : Hash + Eq , V , S : BuildHasher > LinkedHashMap < K , V , S > {
597
595
#[ inline]
598
596
fn detach ( & mut self , node : * mut LinkedHashMapEntry < K , V > ) {
599
597
unsafe {
@@ -622,19 +620,19 @@ impl<K: Hash + Eq + Clone, V: Clone> Clone for LinkedHashMap<K, V> {
622
620
}
623
621
}
624
622
625
- impl < K : Hash + Eq , V , S : HashState + Default > Default for LinkedHashMap < K , V , S > {
623
+ impl < K : Hash + Eq , V , S : BuildHasher + Default > Default for LinkedHashMap < K , V , S > {
626
624
fn default ( ) -> Self { LinkedHashMap :: with_hash_state ( Default :: default ( ) ) }
627
625
}
628
626
629
- impl < K : Hash + Eq , V , S : HashState > Extend < ( K , V ) > for LinkedHashMap < K , V , S > {
627
+ impl < K : Hash + Eq , V , S : BuildHasher > Extend < ( K , V ) > for LinkedHashMap < K , V , S > {
630
628
fn extend < T : IntoIterator < Item =( K , V ) > > ( & mut self , iter : T ) {
631
629
for ( k, v) in iter {
632
630
self . insert ( k, v) ;
633
631
}
634
632
}
635
633
}
636
634
637
- impl < K : Hash + Eq , V , S : HashState + Default > iter:: FromIterator < ( K , V ) > for LinkedHashMap < K , V , S > {
635
+ impl < K : Hash + Eq , V , S : BuildHasher + Default > iter:: FromIterator < ( K , V ) > for LinkedHashMap < K , V , S > {
638
636
fn from_iter < I : IntoIterator < Item =( K , V ) > > ( iter : I ) -> Self {
639
637
let iter = iter. into_iter ( ) ;
640
638
let mut map = Self :: with_capacity_and_hash_state ( iter. size_hint ( ) . 0 , Default :: default ( ) ) ;
@@ -643,14 +641,14 @@ impl<K: Hash + Eq, V, S: HashState + Default> iter::FromIterator<(K, V)> for Lin
643
641
}
644
642
}
645
643
646
- impl < A : fmt:: Debug + Hash + Eq , B : fmt:: Debug , S : HashState > fmt:: Debug for LinkedHashMap < A , B , S > {
644
+ impl < A : fmt:: Debug + Hash + Eq , B : fmt:: Debug , S : BuildHasher > fmt:: Debug for LinkedHashMap < A , B , S > {
647
645
/// Returns a string that lists the key-value pairs in insertion order.
648
646
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
649
647
f. debug_map ( ) . entries ( self ) . finish ( )
650
648
}
651
649
}
652
650
653
- impl < K : Hash + Eq , V : PartialEq , S : HashState > PartialEq for LinkedHashMap < K , V , S > {
651
+ impl < K : Hash + Eq , V : PartialEq , S : BuildHasher > PartialEq for LinkedHashMap < K , V , S > {
654
652
fn eq ( & self , other : & Self ) -> bool {
655
653
self . len ( ) == other. len ( ) && self . iter ( ) . eq ( other)
656
654
}
@@ -660,9 +658,9 @@ impl<K: Hash + Eq, V: PartialEq, S: HashState> PartialEq for LinkedHashMap<K, V,
660
658
}
661
659
}
662
660
663
- impl < K : Hash + Eq , V : Eq , S : HashState > Eq for LinkedHashMap < K , V , S > { }
661
+ impl < K : Hash + Eq , V : Eq , S : BuildHasher > Eq for LinkedHashMap < K , V , S > { }
664
662
665
- impl < K : Hash + Eq + PartialOrd , V : PartialOrd , S : HashState > PartialOrd for LinkedHashMap < K , V , S > {
663
+ impl < K : Hash + Eq + PartialOrd , V : PartialOrd , S : BuildHasher > PartialOrd for LinkedHashMap < K , V , S > {
666
664
fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
667
665
self . iter ( ) . partial_cmp ( other)
668
666
}
@@ -684,13 +682,13 @@ impl<K: Hash + Eq + PartialOrd, V: PartialOrd, S: HashState> PartialOrd for Link
684
682
}
685
683
}
686
684
687
- impl < K : Hash + Eq + Ord , V : Ord , S : HashState > Ord for LinkedHashMap < K , V , S > {
685
+ impl < K : Hash + Eq + Ord , V : Ord , S : BuildHasher > Ord for LinkedHashMap < K , V , S > {
688
686
fn cmp ( & self , other : & Self ) -> Ordering {
689
687
self . iter ( ) . cmp ( other)
690
688
}
691
689
}
692
690
693
- impl < K : Hash + Eq , V : Hash , S : HashState > Hash for LinkedHashMap < K , V , S > {
691
+ impl < K : Hash + Eq , V : Hash , S : BuildHasher > Hash for LinkedHashMap < K , V , S > {
694
692
fn hash < H : Hasher > ( & self , h : & mut H ) { for e in self . iter ( ) { e. hash ( h) ; } }
695
693
}
696
694
@@ -867,13 +865,13 @@ impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> {
867
865
fn len ( & self ) -> usize { self . inner . len ( ) }
868
866
}
869
867
870
- impl < ' a , K : Hash + Eq , V , S : HashState > IntoIterator for & ' a LinkedHashMap < K , V , S > {
868
+ impl < ' a , K : Hash + Eq , V , S : BuildHasher > IntoIterator for & ' a LinkedHashMap < K , V , S > {
871
869
type Item = ( & ' a K , & ' a V ) ;
872
870
type IntoIter = Iter < ' a , K , V > ;
873
871
fn into_iter ( self ) -> Iter < ' a , K , V > { self . iter ( ) }
874
872
}
875
873
876
- impl < ' a , K : Hash + Eq , V , S : HashState > IntoIterator for & ' a mut LinkedHashMap < K , V , S > {
874
+ impl < ' a , K : Hash + Eq , V , S : BuildHasher > IntoIterator for & ' a mut LinkedHashMap < K , V , S > {
877
875
type Item = ( & ' a K , & ' a mut V ) ;
878
876
type IntoIter = IterMut < ' a , K , V > ;
879
877
fn into_iter ( self ) -> IterMut < ' a , K , V > { self . iter_mut ( ) }
0 commit comments