[][src]Trait na::Storage

pub unsafe trait Storage<N, R, C = U1>: Debug where
    C: Dim,
    N: Scalar,
    R: Dim
{ type RStride: Dim; type CStride: Dim; fn ptr(&self) -> *const N;
fn shape(&self) -> (R, C);
fn strides(&self) -> (Self::RStride, Self::CStride);
fn is_contiguous(&self) -> bool;
fn as_slice(&self) -> &[N];
fn into_owned(self) -> <DefaultAllocator as Allocator<N, R, C>>::Buffer
    where
        DefaultAllocator: Allocator<N, R, C>
;
fn clone_owned(&self) -> <DefaultAllocator as Allocator<N, R, C>>::Buffer
    where
        DefaultAllocator: Allocator<N, R, C>
; default fn linear_index(&self, irow: usize, icol: usize) -> usize { ... }
unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N { ... }
unsafe default fn get_address_unchecked(
        &self,
        irow: usize,
        icol: usize
    ) -> *const N { ... }
unsafe default fn get_unchecked_linear(&self, i: usize) -> &N { ... }
unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N { ... } }

The trait shared by all matrix data storage.

FIXME: doc

Note that Self must always have a number of elements compatible with the matrix length (given by R and C if they are known at compile-time). For example, implementors of this trait should not allow the user to modify the size of the underlying buffer with safe methods (for example the VecStorage::data_mut method is unsafe because the user could change the vector's size so that it no longer contains enough elements: this will lead to UB.

Associated Types

type RStride: Dim

The static stride of this storage's rows.

type CStride: Dim

The static stride of this storage's columns.

Loading content...

Required methods

fn ptr(&self) -> *const N

The matrix data pointer.

fn shape(&self) -> (R, C)

The dimension of the matrix at run-time. Arr length of zero indicates the additive identity element of any dimension. Must be equal to Self::dimension() if it is not None.

fn strides(&self) -> (Self::RStride, Self::CStride)

The spacing between consecutive row elements and consecutive column elements.

For example this returns (1, 5) for a row-major matrix with 5 columns.

fn is_contiguous(&self) -> bool

Indicates whether this data buffer stores its elements contiguously.

Important traits for &'_ [u8]
fn as_slice(&self) -> &[N]

Retrieves the data buffer as a contiguous slice.

The matrix components may not be stored in a contiguous way, depending on the strides.

fn into_owned(self) -> <DefaultAllocator as Allocator<N, R, C>>::Buffer where
    DefaultAllocator: Allocator<N, R, C>, 

Builds a matrix data storage that does not contain any reference.

fn clone_owned(&self) -> <DefaultAllocator as Allocator<N, R, C>>::Buffer where
    DefaultAllocator: Allocator<N, R, C>, 

Clones this data storage to one that does not contain any reference.

Loading content...

Provided methods

default fn linear_index(&self, irow: usize, icol: usize) -> usize

Compute the index corresponding to the irow-th row and icol-th column of this matrix. The index must be such that the following holds:

This example is not tested
let lindex = self.linear_index(irow, icol);
assert!(*self.get_unchecked(irow, icol) == *self.get_unchecked_linear(lindex)

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N

Gets the address of the i-th matrix component without performing bound-checking.

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N

Gets the address of the i-th matrix component without performing bound-checking.

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N

Retrieves a reference to the i-th element without bound-checking.

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N

Retrieves a reference to the i-th element without bound-checking.

Loading content...

Implementors

impl<'a, N, R, C, RStride, CStride> Storage<N, R, C> for SliceStorage<'a, N, R, C, RStride, CStride> where
    C: Dim,
    CStride: Dim,
    N: Scalar,
    R: Dim,
    RStride: Dim
[src]

type RStride = RStride

type CStride = CStride

default fn linear_index(&self, irow: usize, icol: usize) -> usize[src]

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N[src]

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N
[src]

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N[src]

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N[src]

impl<'a, N, R, C, RStride, CStride> Storage<N, R, C> for SliceStorageMut<'a, N, R, C, RStride, CStride> where
    C: Dim,
    CStride: Dim,
    N: Scalar,
    R: Dim,
    RStride: Dim
[src]

type RStride = RStride

type CStride = CStride

default fn linear_index(&self, irow: usize, icol: usize) -> usize[src]

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N[src]

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N
[src]

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N[src]

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N[src]

impl<N, C> Storage<N, Dynamic, C> for VecStorage<N, Dynamic, C> where
    C: Dim,
    N: Scalar,
    DefaultAllocator: Allocator<N, Dynamic, C>,
    <DefaultAllocator as Allocator<N, Dynamic, C>>::Buffer == VecStorage<N, Dynamic, C>, 
[src]

type RStride = U1

type CStride = Dynamic

default fn linear_index(&self, irow: usize, icol: usize) -> usize[src]

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N[src]

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N
[src]

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N[src]

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N[src]

impl<N, R> Storage<N, R, Dynamic> for VecStorage<N, R, Dynamic> where
    N: Scalar,
    R: DimName,
    DefaultAllocator: Allocator<N, R, Dynamic>,
    <DefaultAllocator as Allocator<N, R, Dynamic>>::Buffer == VecStorage<N, R, Dynamic>, 
[src]

type RStride = U1

type CStride = R

default fn linear_index(&self, irow: usize, icol: usize) -> usize[src]

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N[src]

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N
[src]

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N[src]

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N[src]

impl<N, R, C> Storage<N, R, C> for ArrayStorage<N, R, C> where
    C: DimName,
    N: Scalar,
    R: DimName,
    <R as DimName>::Value: Mul<<C as DimName>::Value>,
    <<R as DimName>::Value as Mul<<C as DimName>::Value>>::Output: ArrayLength<N>,
    DefaultAllocator: Allocator<N, R, C>,
    <DefaultAllocator as Allocator<N, R, C>>::Buffer == ArrayStorage<N, R, C>, 
[src]

type RStride = U1

type CStride = R

default fn linear_index(&self, irow: usize, icol: usize) -> usize[src]

unsafe default fn get_address_unchecked_linear(&self, i: usize) -> *const N[src]

unsafe default fn get_address_unchecked(
    &self,
    irow: usize,
    icol: usize
) -> *const N
[src]

unsafe default fn get_unchecked_linear(&self, i: usize) -> &N[src]

unsafe default fn get_unchecked(&self, irow: usize, icol: usize) -> &N[src]

Loading content...