mod parallel;
mod prefetch;
#[cfg(test)]
mod tests;
mod windows;
pub use parallel::ZeroCopyParallelIter;
pub use prefetch::{prefetch_read_data, prefetch_write_data};
pub use windows::{CacheAlignedChunks, WindowIterator};
pub use moirai_utils::CACHE_LINE_SIZE;
pub const CACHE_CHUNK_SIZE: usize = 16_384;
pub trait CacheIterExt<T> {
fn cache_windows(&self, window_size: usize) -> WindowIterator<'_, T>;
fn cache_chunks(&self) -> CacheAlignedChunks<'_, T>;
fn zero_copy_par_iter(&self) -> ZeroCopyParallelIter<'_, T>;
}
impl<T: Send + Sync> CacheIterExt<T> for [T] {
fn cache_windows(&self, window_size: usize) -> WindowIterator<'_, T> {
WindowIterator::new(self, window_size, window_size)
}
fn cache_chunks(&self) -> CacheAlignedChunks<'_, T> {
CacheAlignedChunks::new(self)
}
fn zero_copy_par_iter(&self) -> ZeroCopyParallelIter<'_, T> {
ZeroCopyParallelIter::new(self)
}
}