use super::cycle::Cycle;
use super::flat_map::FlatMap;
use super::inspect::Inspect;
use super::peekable::Peekable;
use super::scan::Scan;
use super::skip::Skip;
use super::skip_while::SkipWhile;
use super::step_by::StepBy;
pub trait CombinatorExt: Iterator + Sized {
#[inline]
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where
F: FnMut(&mut St, Self::Item) -> Option<B>,
{
Scan::new(self, initial_state, f)
}
#[inline]
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where
U: Iterator,
F: FnMut(Self::Item) -> U,
{
FlatMap::new(self, f)
}
#[inline]
fn inspect<F>(self, f: F) -> Inspect<Self, F>
where
F: FnMut(&Self::Item),
{
Inspect::new(self, f)
}
#[inline]
fn peekable(self) -> Peekable<Self> {
Peekable::new(self)
}
#[inline]
fn skip(self, n: usize) -> Skip<Self> {
Skip::new(self, n)
}
#[inline]
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where
P: FnMut(&Self::Item) -> bool,
{
SkipWhile::new(self, predicate)
}
#[inline]
fn step_by(self, step: usize) -> StepBy<Self> {
StepBy::new(self, step)
}
#[inline]
fn cycle(self) -> Cycle<Self>
where
Self: Clone,
{
Cycle::new(self)
}
}
impl<I: Iterator + Sized> CombinatorExt for I {}