25
25
//! assert_eq!(map[&3], 30);
26
26
//!
27
27
//! let items: Vec<(i32, i32)> = map.iter().map(|t| (*t.0, *t.1)).collect();
28
- //! assert_eq!(vec! [(2, 20), (1, 10), (3, 30)], items );
28
+ //! assert_eq!(items, [(2, 20), (1, 10), (3, 30)]);
29
29
//! ```
30
30
31
31
#![ feature( hashmap_hasher) ]
32
32
#![ feature( box_raw) ]
33
33
#![ feature( iter_order) ]
34
34
35
35
use std:: borrow:: Borrow ;
36
- use std:: cmp:: { PartialEq , Eq , Ordering } ;
36
+ use std:: cmp:: Ordering ;
37
37
use std:: collections:: hash_map:: { self , HashMap } ;
38
38
use std:: collections:: hash_state:: HashState ;
39
- use std:: default:: Default ;
40
39
use std:: fmt;
41
40
use std:: hash:: { Hash , Hasher } ;
42
- use std:: iter:: IntoIterator ;
43
41
use std:: iter;
44
42
use std:: marker;
45
43
use std:: mem;
@@ -260,12 +258,9 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
260
258
( Some ( unsafe { & mut ( * node_ptr) . value } ) , Some ( node_ptr) )
261
259
}
262
260
} ;
263
- match node_ptr_opt {
264
- None => ( ) ,
265
- Some ( node_ptr) => {
266
- self . detach ( node_ptr) ;
267
- self . attach ( node_ptr) ;
268
- }
261
+ if let Some ( node_ptr) = node_ptr_opt {
262
+ self . detach ( node_ptr) ;
263
+ self . attach ( node_ptr) ;
269
264
}
270
265
return value;
271
266
}
@@ -416,7 +411,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
416
411
}
417
412
}
418
413
419
- /// A double-ended iterator visiting all key-value pairs in order of insertion.
414
+ /// Returns a double-ended iterator visiting all key-value pairs in order of insertion.
420
415
/// Iterator element type is `(&'a K, &'a V)`
421
416
///
422
417
/// # Examples
@@ -443,7 +438,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
443
438
}
444
439
}
445
440
446
- /// A double-ended iterator visiting all key-value pairs in order of insertion.
441
+ /// Returns a double-ended iterator visiting all key-value pairs in order of insertion.
447
442
/// Iterator element type is `(&'a K, &'a mut V)`
448
443
/// # Examples
449
444
/// ```
@@ -468,11 +463,11 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
468
463
head : unsafe { ( * self . head ) . prev } ,
469
464
tail : self . head ,
470
465
remaining : self . len ( ) ,
471
- marker : marker:: PhantomData
466
+ marker : marker:: PhantomData ,
472
467
}
473
468
}
474
469
475
- /// A double-ended iterator visiting all key in order of insertion.
470
+ /// Returns a double-ended iterator visiting all key in order of insertion.
476
471
///
477
472
/// # Examples
478
473
/// ```
@@ -496,7 +491,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
496
491
Keys { inner : self . iter ( ) . map ( first) }
497
492
}
498
493
499
- /// A double-ended iterator visiting all values in order of insertion.
494
+ /// Returns a double-ended iterator visiting all values in order of insertion.
500
495
///
501
496
/// # Examples
502
497
/// ```
@@ -605,7 +600,11 @@ impl<A: fmt::Debug + Hash + Eq, B: fmt::Debug, S: HashState> fmt::Debug for Link
605
600
606
601
impl < K : Hash + Eq , V : PartialEq , S : HashState > PartialEq for LinkedHashMap < K , V , S > {
607
602
fn eq ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
608
- self . len ( ) == other. len ( ) && self . iter ( ) . zip ( other. iter ( ) ) . all ( |( l, r) | l == r)
603
+ self . len ( ) == other. len ( ) && iter:: order:: eq ( self . iter ( ) , other. iter ( ) )
604
+ }
605
+
606
+ fn ne ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
607
+ self . len ( ) != other. len ( ) || iter:: order:: ne ( self . iter ( ) , other. iter ( ) )
609
608
}
610
609
}
611
610
@@ -615,6 +614,22 @@ impl<K: Hash + Eq + PartialOrd, V: PartialOrd, S: HashState> PartialOrd for Link
615
614
fn partial_cmp ( & self , other : & LinkedHashMap < K , V , S > ) -> Option < Ordering > {
616
615
iter:: order:: partial_cmp ( self . iter ( ) , other. iter ( ) )
617
616
}
617
+
618
+ fn lt ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
619
+ iter:: order:: lt ( self . iter ( ) , other. iter ( ) )
620
+ }
621
+
622
+ fn le ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
623
+ iter:: order:: le ( self . iter ( ) , other. iter ( ) )
624
+ }
625
+
626
+ fn ge ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
627
+ iter:: order:: ge ( self . iter ( ) , other. iter ( ) )
628
+ }
629
+
630
+ fn gt ( & self , other : & LinkedHashMap < K , V , S > ) -> bool {
631
+ iter:: order:: gt ( self . iter ( ) , other. iter ( ) )
632
+ }
618
633
}
619
634
620
635
impl < K : Hash + Eq + Ord , V : Ord , S : HashState > Ord for LinkedHashMap < K , V , S > {
@@ -732,9 +747,13 @@ impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V> {
732
747
}
733
748
}
734
749
735
- impl < ' a , K , V > ExactSizeIterator for Iter < ' a , K , V > { }
750
+ impl < ' a , K , V > ExactSizeIterator for Iter < ' a , K , V > {
751
+ fn len ( & self ) -> usize { self . remaining }
752
+ }
736
753
737
- impl < ' a , K , V > ExactSizeIterator for IterMut < ' a , K , V > { }
754
+ impl < ' a , K , V > ExactSizeIterator for IterMut < ' a , K , V > {
755
+ fn len ( & self ) -> usize { self . remaining }
756
+ }
738
757
739
758
740
759
pub struct Keys < ' a , K : ' a , V : ' a > {
@@ -756,7 +775,9 @@ impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V> {
756
775
#[ inline] fn next_back ( & mut self ) -> Option < ( & ' a K ) > { self . inner . next_back ( ) }
757
776
}
758
777
759
- impl < ' a , K , V > ExactSizeIterator for Keys < ' a , K , V > { }
778
+ impl < ' a , K , V > ExactSizeIterator for Keys < ' a , K , V > {
779
+ fn len ( & self ) -> usize { self . inner . len ( ) }
780
+ }
760
781
761
782
762
783
pub struct Values < ' a , K : ' a , V : ' a > {
@@ -778,7 +799,9 @@ impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V> {
778
799
#[ inline] fn next_back ( & mut self ) -> Option < ( & ' a V ) > { self . inner . next_back ( ) }
779
800
}
780
801
781
- impl < ' a , K , V > ExactSizeIterator for Values < ' a , K , V > { }
802
+ impl < ' a , K , V > ExactSizeIterator for Values < ' a , K , V > {
803
+ fn len ( & self ) -> usize { self . inner . len ( ) }
804
+ }
782
805
783
806
impl < ' a , K : Hash + Eq , V , S : HashState > IntoIterator for & ' a LinkedHashMap < K , V , S > {
784
807
type Item = ( & ' a K , & ' a V ) ;
0 commit comments