summaryrefslogtreecommitdiffstats
path: root/library/core/src/slice/iter/macros.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/core/src/slice/iter/macros.rs')
-rw-r--r--library/core/src/slice/iter/macros.rs22
1 files changed, 18 insertions, 4 deletions
diff --git a/library/core/src/slice/iter/macros.rs b/library/core/src/slice/iter/macros.rs
index 89b92a7d5..392752f2a 100644
--- a/library/core/src/slice/iter/macros.rs
+++ b/library/core/src/slice/iter/macros.rs
@@ -176,11 +176,11 @@ macro_rules! iterator {
}
#[inline]
- fn advance_by(&mut self, n: usize) -> Result<(), usize> {
+ fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
let advance = cmp::min(len!(self), n);
// SAFETY: By construction, `advance` does not exceed `self.len()`.
unsafe { self.post_inc_start(advance) };
- if advance == n { Ok(()) } else { Err(advance) }
+ NonZeroUsize::new(n - advance).map_or(Ok(()), Err)
}
#[inline]
@@ -371,11 +371,11 @@ macro_rules! iterator {
}
#[inline]
- fn advance_back_by(&mut self, n: usize) -> Result<(), usize> {
+ fn advance_back_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
let advance = cmp::min(len!(self), n);
// SAFETY: By construction, `advance` does not exceed `self.len()`.
unsafe { self.pre_dec_end(advance) };
- if advance == n { Ok(()) } else { Err(advance) }
+ NonZeroUsize::new(n - advance).map_or(Ok(()), Err)
}
}
@@ -393,6 +393,20 @@ macro_rules! iterator {
}
}
}
+
+ #[stable(feature = "default_iters", since = "1.70.0")]
+ impl<T> Default for $name<'_, T> {
+ /// Creates an empty slice iterator.
+ ///
+ /// ```
+ #[doc = concat!("# use core::slice::", stringify!($name), ";")]
+ #[doc = concat!("let iter: ", stringify!($name<'_, u8>), " = Default::default();")]
+ /// assert_eq!(iter.len(), 0);
+ /// ```
+ fn default() -> Self {
+ (& $( $mut_ )? []).into_iter()
+ }
+ }
}
}