#[cfg(feature = "parallel")]
pub(crate) fn map_collect<T, F>(n: usize, f: F) -> Vec<T>
where
F: Fn(usize) -> T + Sync + Send,
T: Send,
{
use rayon::prelude::*;
(0..n).into_par_iter().map(f).collect()
}
#[cfg(not(feature = "parallel"))]
pub(crate) fn map_collect<T, F>(n: usize, f: F) -> Vec<T>
where
F: Fn(usize) -> T,
{
(0..n).map(f).collect()
}
#[cfg(feature = "parallel")]
pub(crate) fn fill_chunks_mut<F>(data: &mut [f64], chunk_len: usize, f: F)
where
F: Fn(usize, &mut [f64]) + Sync + Send,
{
use rayon::prelude::*;
data.par_chunks_mut(chunk_len)
.enumerate()
.for_each(|(i, chunk)| f(i, chunk));
}
#[cfg(not(feature = "parallel"))]
pub(crate) fn fill_chunks_mut<F>(data: &mut [f64], chunk_len: usize, f: F)
where
F: Fn(usize, &mut [f64]),
{
data.chunks_mut(chunk_len)
.enumerate()
.for_each(|(i, chunk)| f(i, chunk));
}