12
12
// to TreeMap
13
13
14
14
use core:: cmp:: Ordering :: { self , Less , Greater , Equal } ;
15
+ use core:: cmp:: { min, max} ;
15
16
use core:: fmt:: Debug ;
16
17
use core:: fmt;
17
18
use core:: iter:: { Peekable , FromIterator } ;
@@ -703,7 +704,9 @@ impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
703
704
}
704
705
}
705
706
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
706
- impl < ' a , T > ExactSizeIterator for Iter < ' a , T > { }
707
+ impl < ' a , T > ExactSizeIterator for Iter < ' a , T > {
708
+ fn len ( & self ) -> usize { self . iter . len ( ) }
709
+ }
707
710
708
711
709
712
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -724,7 +727,9 @@ impl<T> DoubleEndedIterator for IntoIter<T> {
724
727
}
725
728
}
726
729
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
727
- impl < T > ExactSizeIterator for IntoIter < T > { }
730
+ impl < T > ExactSizeIterator for IntoIter < T > {
731
+ fn len ( & self ) -> usize { self . iter . len ( ) }
732
+ }
728
733
729
734
730
735
impl < ' a , T > Clone for Range < ' a , T > {
@@ -780,6 +785,12 @@ impl<'a, T: Ord> Iterator for Difference<'a, T> {
780
785
}
781
786
}
782
787
}
788
+
789
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
790
+ let a_len = self . a . len ( ) ;
791
+ let b_len = self . b . len ( ) ;
792
+ ( a_len. saturating_sub ( b_len) , Some ( a_len) )
793
+ }
783
794
}
784
795
785
796
impl < ' a , T > Clone for SymmetricDifference < ' a , T > {
@@ -806,6 +817,10 @@ impl<'a, T: Ord> Iterator for SymmetricDifference<'a, T> {
806
817
}
807
818
}
808
819
}
820
+
821
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
822
+ ( 0 , Some ( self . a . len ( ) + self . b . len ( ) ) )
823
+ }
809
824
}
810
825
811
826
impl < ' a , T > Clone for Intersection < ' a , T > {
@@ -842,6 +857,10 @@ impl<'a, T: Ord> Iterator for Intersection<'a, T> {
842
857
}
843
858
}
844
859
}
860
+
861
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
862
+ ( 0 , Some ( min ( self . a . len ( ) , self . b . len ( ) ) ) )
863
+ }
845
864
}
846
865
847
866
impl < ' a , T > Clone for Union < ' a , T > {
@@ -868,4 +887,10 @@ impl<'a, T: Ord> Iterator for Union<'a, T> {
868
887
}
869
888
}
870
889
}
890
+
891
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
892
+ let a_len = self . a . len ( ) ;
893
+ let b_len = self . b . len ( ) ;
894
+ ( max ( a_len, b_len) , Some ( a_len + b_len) )
895
+ }
871
896
}
0 commit comments