]>
git.proxmox.com Git - rustc.git/blob - vendor/itertools/src/pad_tail.rs
4 /// An iterator adaptor that pads a sequence to a minimum length by filling
5 /// missing elements using a closure.
7 /// Iterator element type is `I::Item`.
9 /// See [`.pad_using()`](../trait.Itertools.html#method.pad_using) for more information.
11 #[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
12 pub struct PadUsing
<I
, F
> {
19 /// Create a new **PadUsing** iterator.
20 pub fn pad_using
<I
, F
>(iter
: I
, min
: usize, filler
: F
) -> PadUsing
<I
, F
>
22 F
: FnMut(usize) -> I
::Item
32 impl<I
, F
> Iterator
for PadUsing
<I
, F
>
34 F
: FnMut(usize) -> I
::Item
39 fn next(&mut self) -> Option
<I
::Item
> {
40 match self.iter
.next() {
42 if self.pos
< self.min
{
43 let e
= Some((self.filler
)(self.pos
));
57 fn size_hint(&self) -> (usize, Option
<usize>) {
58 let tail
= self.min
.saturating_sub(self.pos
);
59 size_hint
::max(self.iter
.size_hint(), (tail
, Some(tail
)))
63 impl<I
, F
> DoubleEndedIterator
for PadUsing
<I
, F
>
64 where I
: DoubleEndedIterator
+ ExactSizeIterator
,
65 F
: FnMut(usize) -> I
::Item
67 fn next_back(&mut self) -> Option
<I
::Item
> {
70 } else if self.iter
.len() >= self.min
{
75 Some((self.filler
)(self.min
))
80 impl<I
, F
> ExactSizeIterator
for PadUsing
<I
, F
>
81 where I
: ExactSizeIterator
,
82 F
: FnMut(usize) -> I
::Item