use super::ConcurrentSlice;
use crate::elem::ConcurrentElement;
use orx_fixed_vec::IntoConcurrentPinnedVec;
impl<T, P> ConcurrentSlice<'_, T, P>
where
P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
{
pub fn swap(&self, i: usize, j: usize) -> bool {
let idx_i = self.idx(i);
let idx_j = self.idx(j);
match (idx_i, idx_j) {
(Some(i), Some(j)) => self.vec.swap(i, j),
_ => false,
}
}
pub fn fill(&self, value: T)
where
T: Clone,
{
for elem in self.iter() {
elem.set(value.clone());
}
}
pub fn fill_with<F>(&self, mut value: F)
where
F: FnMut(usize) -> T,
{
for (i, elem) in self.iter().enumerate() {
elem.set(value(i));
}
}
}