use fftw::array::AlignedVec;
pub trait AsRefSlice {
type Element;
fn as_slice(&self) -> &[Self::Element];
}
impl<Element> AsRefSlice for Vec<Element> {
type Element = Element;
fn as_slice(&self) -> &[Element] {
self.as_slice()
}
}
impl<Element> AsRefSlice for [Element; 1] {
type Element = Element;
fn as_slice(&self) -> &[Element] {
&self[..]
}
}
impl<Element> AsRefSlice for &[Element] {
type Element = Element;
fn as_slice(&self) -> &[Element] {
self
}
}
impl<Element> AsRefSlice for &mut [Element] {
type Element = Element;
fn as_slice(&self) -> &[Element] {
self
}
}
impl<Element> AsRefSlice for AlignedVec<Element> {
type Element = Element;
fn as_slice(&self) -> &[Element] {
self.as_slice()
}
}
pub trait AsMutSlice: AsRefSlice<Element = <Self as AsMutSlice>::Element> {
type Element;
fn as_mut_slice(&mut self) -> &mut [<Self as AsMutSlice>::Element];
}
impl<Element> AsMutSlice for Vec<Element> {
type Element = Element;
fn as_mut_slice(&mut self) -> &mut [Element] {
self.as_mut_slice()
}
}
impl<Element> AsMutSlice for [Element; 1] {
type Element = Element;
fn as_mut_slice(&mut self) -> &mut [Element] {
&mut self[..]
}
}
impl<Element> AsMutSlice for &mut [Element] {
type Element = Element;
fn as_mut_slice(&mut self) -> &mut [Element] {
self
}
}
impl<Element> AsMutSlice for AlignedVec<Element> {
type Element = Element;
fn as_mut_slice(&mut self) -> &mut [Element] {
self.as_slice_mut()
}
}