helper: new ExactSizedArr adaptor for ExactSizedIterators

Given an ExactSizedIterator and a compile time known size (N), we
should be able to generate stack allocated arrays of the contents of
an iterator as long as the iterator has at least the required size.
This commit is contained in:
2026-04-07 01:58:12 +01:00
committed by oreodave
parent 9b1db4382d
commit ec31844ee7

View File

@@ -1,4 +1,30 @@
/** Given an array of arguments, return them sorted.
Best utilised with array destructuring. */
pub fn ordered<T: Ord, const N: usize>(mut xs: [T; N]) -> [T; N] {
xs.sort();
xs
}
/** An iterator adaptor (derived from ExactSizedIterator) which has a guaranteed
compile time size, allowing for collection of an iterator into a stack allocated
array. */
pub trait ExactSizedArr<I>: ExactSizeIterator<Item = I> + Sized
where
I: Default,
{
fn into_array<const N: usize>(mut self) -> Result<[Self::Item; N], Self> {
if self.len() < N {
Err(self)
} else {
Ok(std::array::from_fn(|_| self.next().unwrap()))
}
}
}
/** Default implementation of ExactSizedArr for any ExactSizeIterator. */
impl<T, I> ExactSizedArr<T> for I
where
T: Default + Copy + Clone,
I: ExactSizeIterator<Item = T>,
{
}