use std::iter::{Fuse, FusedIterator}; usecrate::size_hint;
/// An iterator adaptor that pads a sequence to a minimum length by filling /// missing elements using a closure. /// /// Iterator element type is `I::Item`. /// /// See [`.pad_using()`](crate::Itertools::pad_using) for more information. #[derive(Clone)] #[must_use = "iterator adaptors are lazy and do nothing unless consumed"] pubstruct PadUsing<I, F> {
iter: Fuse<I>,
min: usize,
pos: usize,
filler: F,
}
impl<I, F> std::fmt::Debug for PadUsing<I, F> where
I: std::fmt::Debug,
{
debug_fmt_fields!(PadUsing, iter, min, pos);
}
/// Create a new `PadUsing` iterator. pubfn pad_using<I, F>(iter: I, min: usize, filler: F) -> PadUsing<I, F> where I: Iterator,
F: FnMut(usize) -> I::Item
{
PadUsing {
iter: iter.fuse(),
min,
pos: 0,
filler,
}
}
impl<I, F> Iterator for PadUsing<I, F> where I: Iterator,
F: FnMut(usize) -> I::Item
{ type Item = I::Item;
#[inline] fn next(&mutself) -> Option<Self::Item> { matchself.iter.next() {
None => { ifself.pos < self.min { let e = Some((self.filler)(self.pos)); self.pos += 1;
e
} else {
None
}
},
e => { self.pos += 1;
e
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.