@@ -12,7 +12,7 @@ use crate::vec::{self, Vec};
12
12
use :: core:: cmp:: Ordering ;
13
13
use :: core:: fmt;
14
14
use :: core:: hash:: { BuildHasher , Hash , Hasher } ;
15
- use :: core:: iter:: FromIterator ;
15
+ use :: core:: iter:: { FromIterator , FusedIterator } ;
16
16
use :: core:: ops:: { Index , IndexMut , RangeBounds } ;
17
17
use :: core:: slice:: { Iter as SliceIter , IterMut as SliceIterMut } ;
18
18
@@ -822,6 +822,8 @@ impl<K, V> ExactSizeIterator for Keys<'_, K, V> {
822
822
}
823
823
}
824
824
825
+ impl < K , V > FusedIterator for Keys < ' _ , K , V > { }
826
+
825
827
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
826
828
impl < K , V > Clone for Keys < ' _ , K , V > {
827
829
fn clone ( & self ) -> Self {
@@ -864,6 +866,8 @@ impl<K, V> ExactSizeIterator for IntoKeys<K, V> {
864
866
}
865
867
}
866
868
869
+ impl < K , V > FusedIterator for IntoKeys < K , V > { }
870
+
867
871
impl < K : fmt:: Debug , V > fmt:: Debug for IntoKeys < K , V > {
868
872
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
869
873
let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: key_ref) ;
@@ -898,6 +902,8 @@ impl<K, V> ExactSizeIterator for Values<'_, K, V> {
898
902
}
899
903
}
900
904
905
+ impl < K , V > FusedIterator for Values < ' _ , K , V > { }
906
+
901
907
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
902
908
impl < K , V > Clone for Values < ' _ , K , V > {
903
909
fn clone ( & self ) -> Self {
@@ -940,6 +946,8 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
940
946
}
941
947
}
942
948
949
+ impl < K , V > FusedIterator for ValuesMut < ' _ , K , V > { }
950
+
943
951
/// An owning iterator over the values of a `IndexMap`.
944
952
///
945
953
/// This `struct` is created by the [`into_values`] method on [`IndexMap`].
@@ -967,6 +975,8 @@ impl<K, V> ExactSizeIterator for IntoValues<K, V> {
967
975
}
968
976
}
969
977
978
+ impl < K , V > FusedIterator for IntoValues < K , V > { }
979
+
970
980
impl < K , V : fmt:: Debug > fmt:: Debug for IntoValues < K , V > {
971
981
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
972
982
let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: value_ref) ;
@@ -1001,6 +1011,8 @@ impl<K, V> ExactSizeIterator for Iter<'_, K, V> {
1001
1011
}
1002
1012
}
1003
1013
1014
+ impl < K , V > FusedIterator for Iter < ' _ , K , V > { }
1015
+
1004
1016
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
1005
1017
impl < K , V > Clone for Iter < ' _ , K , V > {
1006
1018
fn clone ( & self ) -> Self {
@@ -1043,6 +1055,8 @@ impl<K, V> ExactSizeIterator for IterMut<'_, K, V> {
1043
1055
}
1044
1056
}
1045
1057
1058
+ impl < K , V > FusedIterator for IterMut < ' _ , K , V > { }
1059
+
1046
1060
/// An owning iterator over the entries of a `IndexMap`.
1047
1061
///
1048
1062
/// This `struct` is created by the [`into_iter`] method on [`IndexMap`]
@@ -1070,6 +1084,8 @@ impl<K, V> ExactSizeIterator for IntoIter<K, V> {
1070
1084
}
1071
1085
}
1072
1086
1087
+ impl < K , V > FusedIterator for IntoIter < K , V > { }
1088
+
1073
1089
impl < K : fmt:: Debug , V : fmt:: Debug > fmt:: Debug for IntoIter < K , V > {
1074
1090
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
1075
1091
let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: refs) ;
@@ -1104,6 +1120,8 @@ impl<K, V> ExactSizeIterator for Drain<'_, K, V> {
1104
1120
}
1105
1121
}
1106
1122
1123
+ impl < K , V > FusedIterator for Drain < ' _ , K , V > { }
1124
+
1107
1125
impl < ' a , K , V , S > IntoIterator for & ' a IndexMap < K , V , S > {
1108
1126
type Item = ( & ' a K , & ' a V ) ;
1109
1127
type IntoIter = Iter < ' a , K , V > ;
0 commit comments