Skip to content

Commit 2ee9678

Browse files
authored
Rollup merge of #128261 - clarfonthey:iter-default, r=dtolnay
impl `Default` for collection iterators that don't already have it There is a pretty strong precedent for implementing `Default` for collection iterators, and this does so for some where this implementation was missed. I don't think this needs a separate ACP (since this precedent already exists, and these feel like they were just missed), however, it *will* need an FCP since these implementations are instantly stable.
2 parents 904f579 + 0b99720 commit 2ee9678

File tree

4 files changed

+70
-0
lines changed

4 files changed

+70
-0
lines changed

Diff for: library/alloc/src/collections/binary_heap/mod.rs

+14
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,20 @@ pub struct Iter<'a, T: 'a> {
14331433
iter: slice::Iter<'a, T>,
14341434
}
14351435

1436+
#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
1437+
impl<T> Default for Iter<'_, T> {
1438+
/// Creates an empty `binary_heap::Iter`.
1439+
///
1440+
/// ```
1441+
/// # use std::collections::binary_heap;
1442+
/// let iter: binary_heap::Iter<'_, u8> = Default::default();
1443+
/// assert_eq!(iter.len(), 0);
1444+
/// ```
1445+
fn default() -> Self {
1446+
Iter { iter: Default::default() }
1447+
}
1448+
}
1449+
14361450
#[stable(feature = "collection_debug", since = "1.17.0")]
14371451
impl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {
14381452
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

Diff for: library/alloc/src/collections/btree/map.rs

+28
Original file line numberDiff line numberDiff line change
@@ -2016,6 +2016,20 @@ impl<K, V> Default for Range<'_, K, V> {
20162016
}
20172017
}
20182018

2019+
#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
2020+
impl<K, V> Default for RangeMut<'_, K, V> {
2021+
/// Creates an empty `btree_map::RangeMut`.
2022+
///
2023+
/// ```
2024+
/// # use std::collections::btree_map;
2025+
/// let iter: btree_map::RangeMut<'_, u8, u8> = Default::default();
2026+
/// assert_eq!(iter.count(), 0);
2027+
/// ```
2028+
fn default() -> Self {
2029+
RangeMut { inner: Default::default(), _marker: PhantomData }
2030+
}
2031+
}
2032+
20192033
#[stable(feature = "map_values_mut", since = "1.10.0")]
20202034
impl<'a, K, V> Iterator for ValuesMut<'a, K, V> {
20212035
type Item = &'a mut V;
@@ -2050,6 +2064,20 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
20502064
#[stable(feature = "fused", since = "1.26.0")]
20512065
impl<K, V> FusedIterator for ValuesMut<'_, K, V> {}
20522066

2067+
#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
2068+
impl<K, V> Default for ValuesMut<'_, K, V> {
2069+
/// Creates an empty `btree_map::ValuesMut`.
2070+
///
2071+
/// ```
2072+
/// # use std::collections::btree_map;
2073+
/// let iter: btree_map::ValuesMut<'_, u8, u8> = Default::default();
2074+
/// assert_eq!(iter.count(), 0);
2075+
/// ```
2076+
fn default() -> Self {
2077+
ValuesMut { inner: Default::default() }
2078+
}
2079+
}
2080+
20532081
#[stable(feature = "map_into_keys_values", since = "1.54.0")]
20542082
impl<K, V, A: Allocator + Clone> Iterator for IntoKeys<K, V, A> {
20552083
type Item = K;

Diff for: library/alloc/src/collections/vec_deque/iter.rs

+14
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,20 @@ impl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {
2828
}
2929
}
3030

31+
#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
32+
impl<T> Default for Iter<'_, T> {
33+
/// Creates an empty `vec_deque::Iter`.
34+
///
35+
/// ```
36+
/// # use std::collections::vec_deque;
37+
/// let iter: vec_deque::Iter<'_, u8> = Default::default();
38+
/// assert_eq!(iter.len(), 0);
39+
/// ```
40+
fn default() -> Self {
41+
Iter { i1: Default::default(), i2: Default::default() }
42+
}
43+
}
44+
3145
// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
3246
#[stable(feature = "rust1", since = "1.0.0")]
3347
impl<T> Clone for Iter<'_, T> {

Diff for: library/alloc/src/collections/vec_deque/iter_mut.rs

+14
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,20 @@ impl<T: fmt::Debug> fmt::Debug for IterMut<'_, T> {
2828
}
2929
}
3030

31+
#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
32+
impl<T> Default for IterMut<'_, T> {
33+
/// Creates an empty `vec_deque::IterMut`.
34+
///
35+
/// ```
36+
/// # use std::collections::vec_deque;
37+
/// let iter: vec_deque::IterMut<'_, u8> = Default::default();
38+
/// assert_eq!(iter.len(), 0);
39+
/// ```
40+
fn default() -> Self {
41+
IterMut { i1: Default::default(), i2: Default::default() }
42+
}
43+
}
44+
3145
#[stable(feature = "rust1", since = "1.0.0")]
3246
impl<'a, T> Iterator for IterMut<'a, T> {
3347
type Item = &'a mut T;

0 commit comments

Comments
 (0)