1212// to TreeMap
1313
1414use core:: cmp:: Ordering :: { self , Less , Greater , Equal } ;
15+ use core:: cmp:: { min, max} ;
1516use core:: fmt:: Debug ;
1617use core:: fmt;
1718use core:: iter:: { Peekable , FromIterator } ;
@@ -703,7 +704,9 @@ impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
703704 }
704705}
705706#[ 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+ }
707710
708711
709712#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -724,7 +727,9 @@ impl<T> DoubleEndedIterator for IntoIter<T> {
724727 }
725728}
726729#[ 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+ }
728733
729734
730735impl < ' a , T > Clone for Range < ' a , T > {
@@ -780,6 +785,12 @@ impl<'a, T: Ord> Iterator for Difference<'a, T> {
780785 }
781786 }
782787 }
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+ }
783794}
784795
785796impl < ' a , T > Clone for SymmetricDifference < ' a , T > {
@@ -806,6 +817,10 @@ impl<'a, T: Ord> Iterator for SymmetricDifference<'a, T> {
806817 }
807818 }
808819 }
820+
821+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
822+ ( 0 , Some ( self . a . len ( ) + self . b . len ( ) ) )
823+ }
809824}
810825
811826impl < ' a , T > Clone for Intersection < ' a , T > {
@@ -842,6 +857,10 @@ impl<'a, T: Ord> Iterator for Intersection<'a, T> {
842857 }
843858 }
844859 }
860+
861+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
862+ ( 0 , Some ( min ( self . a . len ( ) , self . b . len ( ) ) ) )
863+ }
845864}
846865
847866impl < ' a , T > Clone for Union < ' a , T > {
@@ -868,4 +887,10 @@ impl<'a, T: Ord> Iterator for Union<'a, T> {
868887 }
869888 }
870889 }
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+ }
871896}
0 commit comments