2 iter::{FusedIterator, TrustedLen},
6 /// A double-ended iterator with the direction inverted.
8 /// This `struct` is created by the [`rev`] method on [`Iterator`]. See its
9 /// documentation for more.
11 /// [`rev`]: Iterator::rev
12 /// [`Iterator`]: trait.Iterator.html
13 #[derive(Clone, Debug)]
14 #[must_use = "iterators are lazy and do nothing unless consumed"]
15 #[stable(feature = "rust1", since = "1.0.0")]
21 pub(in crate::iter) fn new(iter: T) -> Rev<T> {
26 #[stable(feature = "rust1", since = "1.0.0")]
27 impl<I> Iterator for Rev<I>
29 I: DoubleEndedIterator,
31 type Item = <I as Iterator>::Item;
34 fn next(&mut self) -> Option<<I as Iterator>::Item> {
38 fn size_hint(&self) -> (usize, Option<usize>) {
43 fn advance_by(&mut self, n: usize) -> Result<(), usize> {
44 self.iter.advance_back_by(n)
48 fn nth(&mut self, n: usize) -> Option<<I as Iterator>::Item> {
52 fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
55 F: FnMut(B, Self::Item) -> R,
58 self.iter.try_rfold(init, f)
61 fn fold<Acc, F>(self, init: Acc, f: F) -> Acc
63 F: FnMut(Acc, Self::Item) -> Acc,
65 self.iter.rfold(init, f)
69 fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
71 P: FnMut(&Self::Item) -> bool,
73 self.iter.rfind(predicate)
77 #[stable(feature = "rust1", since = "1.0.0")]
78 impl<I> DoubleEndedIterator for Rev<I>
80 I: DoubleEndedIterator,
83 fn next_back(&mut self) -> Option<<I as Iterator>::Item> {
88 fn advance_back_by(&mut self, n: usize) -> Result<(), usize> {
89 self.iter.advance_by(n)
93 fn nth_back(&mut self, n: usize) -> Option<<I as Iterator>::Item> {
97 fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
100 F: FnMut(B, Self::Item) -> R,
103 self.iter.try_fold(init, f)
106 fn rfold<Acc, F>(self, init: Acc, f: F) -> Acc
108 F: FnMut(Acc, Self::Item) -> Acc,
110 self.iter.fold(init, f)
113 fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>
115 P: FnMut(&Self::Item) -> bool,
117 self.iter.find(predicate)
121 #[stable(feature = "rust1", since = "1.0.0")]
122 impl<I> ExactSizeIterator for Rev<I>
124 I: ExactSizeIterator + DoubleEndedIterator,
126 fn len(&self) -> usize {
130 fn is_empty(&self) -> bool {
135 #[stable(feature = "fused", since = "1.26.0")]
136 impl<I> FusedIterator for Rev<I> where I: FusedIterator + DoubleEndedIterator {}
138 #[unstable(feature = "trusted_len", issue = "37572")]
139 unsafe impl<I> TrustedLen for Rev<I> where I: TrustedLen + DoubleEndedIterator {}