#![no_std]
extern crate alloc;
mod combinations;
mod permutations;
pub use combinations::{Combinations, SliceCombinations};
pub use permutations::{Permutations, SlicePermutations};
pub trait IterExt: Iterator {
fn combinations<const K: usize>(self) -> Combinations<Self, K>
where
Self: Sized,
Self::Item: Clone,
{
Combinations::new(self)
}
fn permutations<const K: usize>(self) -> Permutations<Self, K>
where
Self: Sized,
Self::Item: Clone,
{
Permutations::new(self)
}
}
impl<I> IterExt for I where I: Iterator {}
pub trait SliceExt<T> {
fn combinations<const K: usize>(&self) -> SliceCombinations<'_, T, K>;
fn permutations<const K: usize>(&self) -> SlicePermutations<'_, T, K>;
}
impl<T> SliceExt<T> for [T] {
fn combinations<const K: usize>(&self) -> SliceCombinations<'_, T, K> {
SliceCombinations::new(self)
}
fn permutations<const K: usize>(&self) -> SlicePermutations<'_, T, K> {
SlicePermutations::new(self)
}
}