about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorAdrian Friedli <adi@koalatux.ch>2019-04-16 21:40:50 +0200
committerAdrian Friedli <adi@koalatux.ch>2019-04-16 21:40:50 +0200
commitfae2a68ba21d5cdd3557cd01ca18b792b0bcbd67 (patch)
tree4b69f44958283d1194c08d59a61469c6e5b1a5b5 /src/libcore
parentcc2689a2539a28d54d0f0ec029c487aadad724f0 (diff)
downloadrust-fae2a68ba21d5cdd3557cd01ca18b792b0bcbd67.tar.gz
rust-fae2a68ba21d5cdd3557cd01ca18b792b0bcbd67.zip
implement nth_back for Fuse
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/iter/adapters/mod.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libcore/iter/adapters/mod.rs b/src/libcore/iter/adapters/mod.rs
index cccd51b5779..f08f2a5ec75 100644
--- a/src/libcore/iter/adapters/mod.rs
+++ b/src/libcore/iter/adapters/mod.rs
@@ -1790,6 +1790,17 @@ impl<I> DoubleEndedIterator for Fuse<I> where I: DoubleEndedIterator {
     }
 
     #[inline]
+    default fn nth_back(&mut self, n: usize) -> Option<<I as Iterator>::Item> {
+        if self.done {
+            None
+        } else {
+            let nth = self.iter.nth_back(n);
+            self.done = nth.is_none();
+            nth
+        }
+    }
+
+    #[inline]
     default fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, fold: Fold) -> R where
         Self: Sized, Fold: FnMut(Acc, Self::Item) -> R, R: Try<Ok=Acc>
     {
@@ -1878,6 +1889,11 @@ impl<I> DoubleEndedIterator for Fuse<I>
     }
 
     #[inline]
+    fn nth_back(&mut self, n: usize) -> Option<<I as Iterator>::Item> {
+        self.iter.nth_back(n)
+    }
+
+    #[inline]
     fn try_rfold<Acc, Fold, R>(&mut self, init: Acc, fold: Fold) -> R where
         Self: Sized, Fold: FnMut(Acc, Self::Item) -> R, R: Try<Ok=Acc>
     {