/// An iterator adaptor that allows putting multiple /// items in front of the iterator. /// /// Iterator element type is `I::Item`. #[derive(Debug, Clone)] pubstruct PutBackN<I: Iterator> {
top: Vec<I::Item>,
iter: I,
}
/// Create an iterator where you can put back multiple values to the front /// of the iteration. /// /// Iterator element type is `I::Item`. pubfn put_back_n<I>(iterable: I) -> PutBackN<I::IntoIter> where I: IntoIterator
{
PutBackN {
top: Vec::new(),
iter: iterable.into_iter(),
}
}
impl<I: Iterator> PutBackN<I> { /// Puts x in front of the iterator. /// The values are yielded in order of the most recently put back /// values first. /// /// ```rust /// use itertools::put_back_n; /// /// let mut it = put_back_n(1..5); /// it.next(); /// it.put_back(1); /// it.put_back(0); /// /// assert!(itertools::equal(it, 0..5)); /// ``` #[inline] pubfn put_back(&mutself, x: I::Item) { self.top.push(x);
}
}
impl<I: Iterator> Iterator for PutBackN<I> { type Item = I::Item; #[inline] fn next(&mutself) -> Option<Self::Item> { self.top.pop().or_else(|| self.iter.next())
}
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.