use core::{mem, slice, slice::SliceIndex};
use crate::Array;
pub trait ArrayShorthand: Array {
#[inline]
fn index<Idx>(&self, idx: Idx) -> &Idx::Output
where
Idx: SliceIndex<[Self::Item]>,
{
&self.as_slice()[idx]
}
#[inline]
fn index_mut<Idx>(&mut self, idx: Idx) -> &mut Idx::Output
where
Idx: SliceIndex<[Self::Item]>,
{
&mut self.as_mut_slice()[idx]
}
#[inline]
fn replace(&mut self, idx: usize, item: Self::Item) -> Self::Item {
mem::replace(self.index_mut(idx), item)
}
#[inline]
fn take(&mut self, idx: usize) -> Self::Item
where
Self::Item: Default,
{
self.replace(idx, <_>::default())
}
#[inline]
fn iter(&self) -> slice::Iter<'_, Self::Item> {
self.as_slice().iter()
}
#[inline]
fn iter_mut(&mut self) -> slice::IterMut<'_, Self::Item> {
self.as_mut_slice().iter_mut()
}
}
impl<A> ArrayShorthand for A where A: Array {}