diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:03 +0000 |
commit | 9918693037dce8aa4bb6f08741b6812923486c18 (patch) | |
tree | 21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /vendor/itertools-0.11.0/src/repeatn.rs | |
parent | Releasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff) | |
download | rustc-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-0.11.0/src/repeatn.rs')
-rw-r--r-- | vendor/itertools-0.11.0/src/repeatn.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/vendor/itertools-0.11.0/src/repeatn.rs b/vendor/itertools-0.11.0/src/repeatn.rs new file mode 100644 index 000000000..e025f6f6a --- /dev/null +++ b/vendor/itertools-0.11.0/src/repeatn.rs @@ -0,0 +1,59 @@ +use std::iter::FusedIterator; + +/// An iterator that produces *n* repetitions of an element. +/// +/// See [`repeat_n()`](crate::repeat_n) for more information. +#[must_use = "iterators are lazy and do nothing unless consumed"] +#[derive(Clone, Debug)] +pub struct RepeatN<A> { + elt: Option<A>, + n: usize, +} + +/// Create an iterator that produces `n` repetitions of `element`. +pub fn repeat_n<A>(element: A, n: usize) -> RepeatN<A> + where A: Clone, +{ + if n == 0 { + RepeatN { elt: None, n, } + } else { + RepeatN { elt: Some(element), n, } + } +} + +impl<A> Iterator for RepeatN<A> + where A: Clone +{ + type Item = A; + + fn next(&mut self) -> Option<Self::Item> { + if self.n > 1 { + self.n -= 1; + self.elt.as_ref().cloned() + } else { + self.n = 0; + self.elt.take() + } + } + + fn size_hint(&self) -> (usize, Option<usize>) { + (self.n, Some(self.n)) + } +} + +impl<A> DoubleEndedIterator for RepeatN<A> + where A: Clone +{ + #[inline] + fn next_back(&mut self) -> Option<Self::Item> { + self.next() + } +} + +impl<A> ExactSizeIterator for RepeatN<A> + where A: Clone +{} + +impl<A> FusedIterator for RepeatN<A> + where A: Clone +{} |