#![no_std]
use core::iter::{
Chain, Cloned, Copied, Cycle, Enumerate, Filter, FilterMap, FlatMap, Flatten, Fuse, Inspect,
Map, MapWhile, Peekable, Rev, Scan, Skip, SkipWhile, StepBy, Take, TakeWhile, Zip,
};
pub fn step_by<I: IntoIterator>(iter: I, step: usize) -> StepBy<I::IntoIter> {
iter.into_iter().step_by(step)
}
pub fn chain<A: IntoIterator, B: IntoIterator<Item = A::Item>>(
a: A,
b: B,
) -> Chain<A::IntoIter, B::IntoIter> {
a.into_iter().chain(b)
}
pub fn zip<A: IntoIterator, B: IntoIterator>(a: A, b: B) -> Zip<A::IntoIter, B::IntoIter> {
a.into_iter().zip(b)
}
pub fn map<I: IntoIterator, B, F: FnMut(I::Item) -> B>(iter: I, f: F) -> Map<I::IntoIter, F> {
iter.into_iter().map(f)
}
pub fn filter<I: IntoIterator, P: FnMut(&I::Item) -> bool>(
iter: I,
predicate: P,
) -> Filter<I::IntoIter, P> {
iter.into_iter().filter(predicate)
}
pub fn filter_map<I: IntoIterator, B, F: FnMut(I::Item) -> Option<B>>(
iter: I,
f: F,
) -> FilterMap<I::IntoIter, F> {
iter.into_iter().filter_map(f)
}
pub fn enumerate<I: IntoIterator>(iter: I) -> Enumerate<I::IntoIter> {
iter.into_iter().enumerate()
}
pub fn peekable<I: IntoIterator>(iter: I) -> Peekable<I::IntoIter> {
iter.into_iter().peekable()
}
pub fn skip_while<I: IntoIterator, P: FnMut(&I::Item) -> bool>(
iter: I,
predicate: P,
) -> SkipWhile<I::IntoIter, P> {
iter.into_iter().skip_while(predicate)
}
pub fn take_while<I: IntoIterator, P: FnMut(&I::Item) -> bool>(
iter: I,
predicate: P,
) -> TakeWhile<I::IntoIter, P> {
iter.into_iter().take_while(predicate)
}
pub fn map_while<I: IntoIterator, B, P: FnMut(I::Item) -> Option<B>>(
iter: I,
predicate: P,
) -> MapWhile<I::IntoIter, P> {
iter.into_iter().map_while(predicate)
}
pub fn skip<I: IntoIterator>(iter: I, n: usize) -> Skip<I::IntoIter> {
iter.into_iter().skip(n)
}
pub fn take<I: IntoIterator>(iter: I, n: usize) -> Take<I::IntoIter> {
iter.into_iter().take(n)
}
pub fn scan<I: IntoIterator, St, B, F: FnMut(&mut St, I::Item) -> Option<B>>(
iter: I,
initial_state: St,
f: F,
) -> Scan<I::IntoIter, St, F> {
iter.into_iter().scan(initial_state, f)
}
pub fn flat_map<I: IntoIterator, U: IntoIterator, F: FnMut(I::Item) -> U>(
iter: I,
f: F,
) -> FlatMap<I::IntoIter, U, F> {
iter.into_iter().flat_map(f)
}
pub fn flatten<I: IntoIterator>(iter: I) -> Flatten<I::IntoIter>
where
I::Item: IntoIterator,
{
iter.into_iter().flatten()
}
pub fn fuse<I: IntoIterator>(iter: I) -> Fuse<I::IntoIter> {
iter.into_iter().fuse()
}
pub fn inspect<I: IntoIterator, F: FnMut(&I::Item)>(iter: I, f: F) -> Inspect<I::IntoIter, F> {
iter.into_iter().inspect(f)
}
pub fn rev<I: IntoIterator>(iter: I) -> Rev<I::IntoIter>
where
I::IntoIter: DoubleEndedIterator,
{
iter.into_iter().rev()
}
pub fn copied<'a, T: 'a + Copy, I: IntoIterator<Item = &'a T>>(iter: I) -> Copied<I::IntoIter> {
iter.into_iter().copied()
}
pub fn cloned<'a, T: 'a + Clone, I: IntoIterator<Item = &'a T>>(iter: I) -> Cloned<I::IntoIter> {
iter.into_iter().cloned()
}
pub fn cycle<I: IntoIterator>(iter: I) -> Cycle<I::IntoIter>
where
I::IntoIter: Clone,
{
iter.into_iter().cycle()
}