about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRakshith Ravi <rakshith.ravi@gmx.com>2020-04-10 10:32:23 +0530
committerRakshith Ravi <rakshith.ravi@gmx.com>2020-04-10 10:32:23 +0530
commit51cd29cf6cb4bd4ec025ae436f5d8ae6260335a2 (patch)
tree6b5a6d7e2c999f7937062f2782e206b1765d3048
parent0a54a9403ddc41d13633c17a8d24c218dc563268 (diff)
downloadrust-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.rs37
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;