#![deny(missing_docs)]
use hpt_traits::tensor::{CommonBounds, TensorInfo};
use par_strided::{par_strided_simd::ParStridedSimd, ParStrided};
use par_strided_mut::{par_strided_map_mut_simd::ParStridedMutSimd, ParStridedMut};
use strided::{strided_simd::StridedSimd, Strided};
use strided_mut::{simd_imports::StridedMutSimd, StridedMut};
pub mod iterator_traits;
pub mod par_strided;
pub mod par_strided_fold;
pub mod par_strided_map;
pub mod par_strided_map_mut;
pub mod par_strided_mut;
pub mod par_strided_zip;
pub mod shape_manipulate;
pub mod strided;
pub mod strided_map;
pub mod strided_map_mut;
pub mod strided_mut;
pub mod strided_zip;
mod with_simd;
pub trait TensorIterator<'a, T: CommonBounds>
where
Self: TensorInfo<T> + 'a,
&'a Self: TensorInfo<T>,
&'a mut Self: TensorInfo<T>,
{
fn iter(&'a self) -> Strided<T> {
Strided::new(self)
}
fn iter_mut(&'a mut self) -> StridedMut<'a, T> {
StridedMut::new(self)
}
fn iter_simd(&'a self) -> StridedSimd<T> {
StridedSimd::new(self)
}
fn iter_mut_simd(&'a self) -> StridedMutSimd<'a, T> {
StridedMutSimd::new(self)
}
fn par_iter_simd(&'a self) -> ParStridedSimd<T> {
ParStridedSimd::new(self)
}
fn par_iter_mut_simd(&'a mut self) -> ParStridedMutSimd<'a, T> {
ParStridedMutSimd::new(self)
}
fn par_iter(&'a self) -> ParStrided<T> {
ParStrided::new(self)
}
fn par_iter_mut(&'a mut self) -> ParStridedMut<'a, T> {
ParStridedMut::new(self)
}
}