use std::slice;
use crate::imp_prelude::*;
use crate::{Baseiter, ElementsBase, ElementsBaseMut, Iter, IterMut};
use crate::iter::{self, AxisIter, AxisIterMut};
use crate::IndexLonger;
impl<'a, A, D> ArrayView<'a, A, D>
where
D: Dimension,
{
pub fn reborrow<'b>(self) -> ArrayView<'b, A, D>
where
'a: 'b,
{
unsafe { ArrayView::new_(self.as_ptr(), self.dim, self.strides) }
}
#[deprecated(note = "`into_slice` has been renamed to `to_slice`", since = "0.13.0")]
#[allow(clippy::wrong_self_convention)]
pub fn into_slice(&self) -> Option<&'a [A]> {
if self.is_standard_layout() {
unsafe { Some(slice::from_raw_parts(self.ptr.as_ptr(), self.len())) }
} else {
None
}
}
pub fn to_slice(&self) -> Option<&'a [A]> {
if self.is_standard_layout() {
unsafe { Some(slice::from_raw_parts(self.ptr.as_ptr(), self.len())) }
} else {
None
}
}
pub(crate) fn into_raw_view(self) -> RawArrayView<A, D> {
unsafe { RawArrayView::new_(self.ptr.as_ptr(), self.dim, self.strides) }
}
}
impl<'a, A> ArrayView<'a, A, Ix0> {
pub fn into_scalar(self) -> &'a A {
self.index(Ix0())
}
}
impl<'a, A> ArrayViewMut<'a, A, Ix0> {
pub fn into_scalar(self) -> &'a mut A {
self.index(Ix0())
}
}
impl<'a, A, D> ArrayViewMut<'a, A, D>
where
D: Dimension,
{
pub fn into_slice(self) -> Option<&'a mut [A]> {
self.into_slice_().ok()
}
}
impl<'a, A, D> ArrayView<'a, A, D>
where
D: Dimension,
{
#[inline]
pub(crate) fn into_base_iter(self) -> Baseiter<A, D> {
unsafe { Baseiter::new(self.ptr.as_ptr(), self.dim, self.strides) }
}
#[inline]
pub(crate) fn into_elements_base(self) -> ElementsBase<'a, A, D> {
ElementsBase::new(self)
}
pub(crate) fn into_iter_(self) -> Iter<'a, A, D> {
Iter::new(self)
}
#[doc(hidden)] #[deprecated(note = "This method will be replaced.")]
pub fn into_outer_iter(self) -> iter::AxisIter<'a, A, D::Smaller>
where
D: RemoveAxis,
{
AxisIter::new(self, Axis(0))
}
}
impl<'a, A, D> ArrayViewMut<'a, A, D>
where
D: Dimension,
{
pub(crate) fn into_view(self) -> ArrayView<'a, A, D> {
unsafe { ArrayView::new_(self.ptr.as_ptr(), self.dim, self.strides) }
}
pub(crate) fn into_raw_view_mut(self) -> RawArrayViewMut<A, D> {
unsafe { RawArrayViewMut::new_(self.ptr.as_ptr(), self.dim, self.strides) }
}
#[inline]
pub(crate) fn into_base_iter(self) -> Baseiter<A, D> {
unsafe { Baseiter::new(self.ptr.as_ptr(), self.dim, self.strides) }
}
#[inline]
pub(crate) fn into_elements_base(self) -> ElementsBaseMut<'a, A, D> {
ElementsBaseMut::new(self)
}
pub(crate) fn into_slice_(self) -> Result<&'a mut [A], Self> {
if self.is_standard_layout() {
unsafe { Ok(slice::from_raw_parts_mut(self.ptr.as_ptr(), self.len())) }
} else {
Err(self)
}
}
pub(crate) fn into_iter_(self) -> IterMut<'a, A, D> {
IterMut::new(self)
}
#[doc(hidden)] #[deprecated(note = "This method will be replaced.")]
pub fn into_outer_iter(self) -> iter::AxisIterMut<'a, A, D::Smaller>
where
D: RemoveAxis,
{
AxisIterMut::new(self, Axis(0))
}
}