diff options
| author | Rakshith Ravi <rakshith.ravi@gmx.com> | 2020-04-10 10:32:23 +0530 |
|---|---|---|
| committer | Rakshith Ravi <rakshith.ravi@gmx.com> | 2020-04-10 10:32:23 +0530 |
| commit | 51cd29cf6cb4bd4ec025ae436f5d8ae6260335a2 (patch) | |
| tree | 6b5a6d7e2c999f7937062f2782e206b1765d3048 | |
| parent | 0a54a9403ddc41d13633c17a8d24c218dc563268 (diff) | |
| download | rust-51cd29cf6cb4bd4ec025ae436f5d8ae6260335a2.tar.gz rust-51cd29cf6cb4bd4ec025ae436f5d8ae6260335a2.zip | |
Added comments.
Removed unnecessarry empty impls. Moved code to organise it better
| -rw-r--r-- | src/libcore/iter/adapters/fuse.rs | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/libcore/iter/adapters/fuse.rs b/src/libcore/iter/adapters/fuse.rs index 946cd475363..c3968b101e5 100644 --- a/src/libcore/iter/adapters/fuse.rs +++ b/src/libcore/iter/adapters/fuse.rs @@ -44,6 +44,19 @@ macro_rules! fuse { }; } +// NOTE: for `I: FusedIterator`, we assume that the iterator is always `Some`. +// Implementing this as a directly-expanded macro helps codegen performance. +macro_rules! unchecked { + ($self:ident) => { + match $self { + Fuse { iter: Some(iter) } => iter, + // SAFETY: the specialized iterator never sets `None` + Fuse { iter: None } => unsafe { intrinsics::unreachable() }, + } + }; +} + +// Any implementation here is made internal to avoid exposing default fns outside this trait #[stable(feature = "rust1", since = "1.0.0")] impl<I> Iterator for Fuse<I> where @@ -159,27 +172,6 @@ where } } -// NOTE: for `I: FusedIterator`, we assume that the iterator is always `Some`. -// Implementing this as a directly-expanded macro helps codegen performance. -macro_rules! unchecked { - ($self:ident) => { - match $self { - Fuse { iter: Some(iter) } => iter, - // SAFETY: the specialized iterator never sets `None` - Fuse { iter: None } => unsafe { intrinsics::unreachable() }, - } - }; -} - -#[stable(feature = "fused", since = "1.26.0")] -impl<I> Iterator for Fuse<I> where I: FusedIterator {} - -#[stable(feature = "fused", since = "1.26.0")] -impl<I> DoubleEndedIterator for Fuse<I> where I: DoubleEndedIterator + FusedIterator {} - -#[stable(feature = "rust1", since = "1.0.0")] -impl<I> ExactSizeIterator for Fuse<I> where I: ExactSizeIterator + FusedIterator {} - unsafe impl<I> TrustedRandomAccess for Fuse<I> where I: TrustedRandomAccess, @@ -198,6 +190,9 @@ where } // Fuse specialization trait +// Iterators and DoubleEndedIterators cannot be overlapped successfully +// So, they're separated into each it's own trait to provide internal implementations +// Similarly, ExactSizeIterators cannot be overlapped, so requires its own trait #[doc(hidden)] trait FuseIteratorImpl<I> { type Item; |
