summaryrefslogtreecommitdiffstats
path: root/vendor/itertools/src/zip_longest.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
commit9918693037dce8aa4bb6f08741b6812923486c18 (patch)
tree21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /vendor/itertools/src/zip_longest.rs
parentReleasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff)
downloadrustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz
rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/itertools/src/zip_longest.rs')
-rw-r--r--vendor/itertools/src/zip_longest.rs47
1 files changed, 34 insertions, 13 deletions
diff --git a/vendor/itertools/src/zip_longest.rs b/vendor/itertools/src/zip_longest.rs
index cb9a7bacb..27d9f3ab6 100644
--- a/vendor/itertools/src/zip_longest.rs
+++ b/vendor/itertools/src/zip_longest.rs
@@ -1,5 +1,5 @@
-use std::cmp::Ordering::{Equal, Greater, Less};
use super::size_hint;
+use std::cmp::Ordering::{Equal, Greater, Less};
use std::iter::{Fuse, FusedIterator};
use crate::either_or_both::EitherOrBoth;
@@ -21,8 +21,9 @@ pub struct ZipLongest<T, U> {
/// Create a new `ZipLongest` iterator.
pub fn zip_longest<T, U>(a: T, b: U) -> ZipLongest<T, U>
- where T: Iterator,
- U: Iterator
+where
+ T: Iterator,
+ U: Iterator,
{
ZipLongest {
a: a.fuse(),
@@ -31,8 +32,9 @@ pub fn zip_longest<T, U>(a: T, b: U) -> ZipLongest<T, U>
}
impl<T, U> Iterator for ZipLongest<T, U>
- where T: Iterator,
- U: Iterator
+where
+ T: Iterator,
+ U: Iterator,
{
type Item = EitherOrBoth<T::Item, U::Item>;
@@ -50,11 +52,26 @@ impl<T, U> Iterator for ZipLongest<T, U>
fn size_hint(&self) -> (usize, Option<usize>) {
size_hint::max(self.a.size_hint(), self.b.size_hint())
}
+
+ #[inline]
+ fn fold<B, F>(self, mut init: B, mut f: F) -> B
+ where
+ Self: Sized,
+ F: FnMut(B, Self::Item) -> B,
+ {
+ let ZipLongest { a, mut b } = self;
+ init = a.fold(init, |init, a| match b.next() {
+ Some(b) => f(init, EitherOrBoth::Both(a, b)),
+ None => f(init, EitherOrBoth::Left(a)),
+ });
+ b.fold(init, |init, b| f(init, EitherOrBoth::Right(b)))
+ }
}
impl<T, U> DoubleEndedIterator for ZipLongest<T, U>
- where T: DoubleEndedIterator + ExactSizeIterator,
- U: DoubleEndedIterator + ExactSizeIterator
+where
+ T: DoubleEndedIterator + ExactSizeIterator,
+ U: DoubleEndedIterator + ExactSizeIterator,
{
#[inline]
fn next_back(&mut self) -> Option<Self::Item> {
@@ -73,11 +90,15 @@ impl<T, U> DoubleEndedIterator for ZipLongest<T, U>
}
impl<T, U> ExactSizeIterator for ZipLongest<T, U>
- where T: ExactSizeIterator,
- U: ExactSizeIterator
-{}
+where
+ T: ExactSizeIterator,
+ U: ExactSizeIterator,
+{
+}
impl<T, U> FusedIterator for ZipLongest<T, U>
- where T: Iterator,
- U: Iterator
-{}
+where
+ T: Iterator,
+ U: Iterator,
+{
+}