use crate::dim::Dim;
use crate::traits::IntoExpression;
mod adapters;
mod sources;
pub use adapters::{cloned, copied, enumerate, map, zip, Cloned, Copied, Enumerate, Map, Zip};
pub use sources::{fill, fill_with, from_elem, from_fn, Fill, FillWith, FromElem, FromFn};
pub use sources::{AxisExpr, AxisExprMut, Drain, Expr, ExprMut, IntoExpr, Lanes, LanesMut};
pub trait Producer {
type Item;
type Dim: Dim;
const IS_REPEATABLE: bool;
const SPLIT_MASK: usize;
#[doc(hidden)]
unsafe fn get_unchecked(&mut self, index: usize) -> Self::Item;
#[doc(hidden)]
unsafe fn reset_dim(&mut self, _: usize, _: usize) {}
#[doc(hidden)]
fn shape(&self) -> <Self::Dim as Dim>::Shape;
#[doc(hidden)]
unsafe fn step_dim(&mut self, _: usize) {}
}
pub fn fold<T, I: IntoExpression, F: FnMut(T, I::Item) -> T>(expr: I, init: T, f: F) -> T {
expr.into_expr().fold(init, f)
}
pub fn for_each<I: IntoExpression, F: FnMut(I::Item)>(expr: I, f: F) {
expr.into_expr().for_each(f)
}