Skip to content

Commit 7423210

Browse files
committed
impl FusedIterator for all iterators
1 parent 3a44f89 commit 7423210

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/map.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::vec::{self, Vec};
1212
use ::core::cmp::Ordering;
1313
use ::core::fmt;
1414
use ::core::hash::{BuildHasher, Hash, Hasher};
15-
use ::core::iter::FromIterator;
15+
use ::core::iter::{FromIterator, FusedIterator};
1616
use ::core::ops::{Index, IndexMut, RangeBounds};
1717
use ::core::slice::{Iter as SliceIter, IterMut as SliceIterMut};
1818

@@ -822,6 +822,8 @@ impl<K, V> ExactSizeIterator for Keys<'_, K, V> {
822822
}
823823
}
824824

825+
impl<K, V> FusedIterator for Keys<'_, K, V> {}
826+
825827
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
826828
impl<K, V> Clone for Keys<'_, K, V> {
827829
fn clone(&self) -> Self {
@@ -864,6 +866,8 @@ impl<K, V> ExactSizeIterator for IntoKeys<K, V> {
864866
}
865867
}
866868

869+
impl<K, V> FusedIterator for IntoKeys<K, V> {}
870+
867871
impl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> {
868872
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
869873
let iter = self.iter.as_slice().iter().map(Bucket::key_ref);
@@ -898,6 +902,8 @@ impl<K, V> ExactSizeIterator for Values<'_, K, V> {
898902
}
899903
}
900904

905+
impl<K, V> FusedIterator for Values<'_, K, V> {}
906+
901907
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
902908
impl<K, V> Clone for Values<'_, K, V> {
903909
fn clone(&self) -> Self {
@@ -940,6 +946,8 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
940946
}
941947
}
942948

949+
impl<K, V> FusedIterator for ValuesMut<'_, K, V> {}
950+
943951
/// An owning iterator over the values of a `IndexMap`.
944952
///
945953
/// This `struct` is created by the [`into_values`] method on [`IndexMap`].
@@ -967,6 +975,8 @@ impl<K, V> ExactSizeIterator for IntoValues<K, V> {
967975
}
968976
}
969977

978+
impl<K, V> FusedIterator for IntoValues<K, V> {}
979+
970980
impl<K, V: fmt::Debug> fmt::Debug for IntoValues<K, V> {
971981
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
972982
let iter = self.iter.as_slice().iter().map(Bucket::value_ref);
@@ -1001,6 +1011,8 @@ impl<K, V> ExactSizeIterator for Iter<'_, K, V> {
10011011
}
10021012
}
10031013

1014+
impl<K, V> FusedIterator for Iter<'_, K, V> {}
1015+
10041016
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
10051017
impl<K, V> Clone for Iter<'_, K, V> {
10061018
fn clone(&self) -> Self {
@@ -1043,6 +1055,8 @@ impl<K, V> ExactSizeIterator for IterMut<'_, K, V> {
10431055
}
10441056
}
10451057

1058+
impl<K, V> FusedIterator for IterMut<'_, K, V> {}
1059+
10461060
/// An owning iterator over the entries of a `IndexMap`.
10471061
///
10481062
/// This `struct` is created by the [`into_iter`] method on [`IndexMap`]
@@ -1070,6 +1084,8 @@ impl<K, V> ExactSizeIterator for IntoIter<K, V> {
10701084
}
10711085
}
10721086

1087+
impl<K, V> FusedIterator for IntoIter<K, V> {}
1088+
10731089
impl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for IntoIter<K, V> {
10741090
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
10751091
let iter = self.iter.as_slice().iter().map(Bucket::refs);
@@ -1104,6 +1120,8 @@ impl<K, V> ExactSizeIterator for Drain<'_, K, V> {
11041120
}
11051121
}
11061122

1123+
impl<K, V> FusedIterator for Drain<'_, K, V> {}
1124+
11071125
impl<'a, K, V, S> IntoIterator for &'a IndexMap<K, V, S> {
11081126
type Item = (&'a K, &'a V);
11091127
type IntoIter = Iter<'a, K, V>;

src/set.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::vec::{self, Vec};
1010
use core::cmp::Ordering;
1111
use core::fmt;
1212
use core::hash::{BuildHasher, Hash};
13-
use core::iter::{Chain, FromIterator};
13+
use core::iter::{Chain, FromIterator, FusedIterator};
1414
use core::ops::{BitAnd, BitOr, BitXor, Index, RangeBounds, Sub};
1515
use core::slice;
1616

@@ -717,6 +717,8 @@ impl<T> ExactSizeIterator for IntoIter<T> {
717717
}
718718
}
719719

720+
impl<T> FusedIterator for IntoIter<T> {}
721+
720722
impl<T: fmt::Debug> fmt::Debug for IntoIter<T> {
721723
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
722724
let iter = self.iter.as_slice().iter().map(Bucket::key_ref);
@@ -751,6 +753,8 @@ impl<T> ExactSizeIterator for Iter<'_, T> {
751753
}
752754
}
753755

756+
impl<T> FusedIterator for Iter<'_, T> {}
757+
754758
impl<T> Clone for Iter<'_, T> {
755759
fn clone(&self) -> Self {
756760
Iter {
@@ -792,6 +796,8 @@ impl<T> ExactSizeIterator for Drain<'_, T> {
792796
}
793797
}
794798

799+
impl<T> FusedIterator for Drain<'_, T> {}
800+
795801
impl<'a, T, S> IntoIterator for &'a IndexSet<T, S> {
796802
type Item = &'a T;
797803
type IntoIter = Iter<'a, T>;
@@ -959,6 +965,13 @@ where
959965
}
960966
}
961967

968+
impl<T, S> FusedIterator for Difference<'_, T, S>
969+
where
970+
T: Eq + Hash,
971+
S: BuildHasher,
972+
{
973+
}
974+
962975
impl<T, S> Clone for Difference<'_, T, S> {
963976
fn clone(&self) -> Self {
964977
Difference {
@@ -1026,6 +1039,13 @@ where
10261039
}
10271040
}
10281041

1042+
impl<T, S> FusedIterator for Intersection<'_, T, S>
1043+
where
1044+
T: Eq + Hash,
1045+
S: BuildHasher,
1046+
{
1047+
}
1048+
10291049
impl<T, S> Clone for Intersection<'_, T, S> {
10301050
fn clone(&self) -> Self {
10311051
Intersection {
@@ -1098,6 +1118,14 @@ where
10981118
}
10991119
}
11001120

1121+
impl<T, S1, S2> FusedIterator for SymmetricDifference<'_, T, S1, S2>
1122+
where
1123+
T: Eq + Hash,
1124+
S1: BuildHasher,
1125+
S2: BuildHasher,
1126+
{
1127+
}
1128+
11011129
impl<T, S1, S2> Clone for SymmetricDifference<'_, T, S1, S2> {
11021130
fn clone(&self) -> Self {
11031131
SymmetricDifference {
@@ -1168,6 +1196,13 @@ where
11681196
}
11691197
}
11701198

1199+
impl<T, S> FusedIterator for Union<'_, T, S>
1200+
where
1201+
T: Eq + Hash,
1202+
S: BuildHasher,
1203+
{
1204+
}
1205+
11711206
impl<T, S> Clone for Union<'_, T, S> {
11721207
fn clone(&self) -> Self {
11731208
Union {

0 commit comments

Comments
 (0)