MatrixBlockSliceMut

Struct MatrixBlockSliceMut 

Source
pub struct MatrixBlockSliceMut<'a> {
    limbs: *mut u64,
    stride: NonZeroUsize,
    _marker: PhantomData<&'a mut ()>,
}
Expand description

A mutable non-contiguous view of a 64 x 64 block within a larger matrix.

§Safety

The limbs pointer must remain valid and exclusively accessible for the lifetime 'a, and must point to at least 64 valid rows spaced stride limbs apart.

Fields§

§limbs: *mut u64§stride: NonZeroUsize

Number of limbs between consecutive rows

§_marker: PhantomData<&'a mut ()>

Implementations§

Source§

impl<'a> MatrixBlockSliceMut<'a>

Source

pub(super) fn new(limbs: *mut u64, stride: NonZeroUsize) -> Self

Source

pub fn get_mut(&mut self, row: usize) -> &mut u64

Returns a mutable reference to the limb at the given row.

§Safety

The pointer arithmetic self.limbs.add(row * self.stride) is safe because the constructor guarantees 64 valid rows, and this method will panic in debug mode if row >= 64 (via debug assertions in the caller).

Source

pub fn iter_mut<'b>( &'b mut self, ) -> impl Iterator<Item = &'b mut u64> + use<'a, 'b>

Returns a mutable iterator over the 64 rows of this block.

Source

pub fn copy(&mut self) -> MatrixBlockSliceMut<'_>

Creates a copy of this mutable slice with a shorter lifetime.

This is useful for splitting the lifetime when you need to pass the slice to a function that doesn’t need to hold it for the full 'a lifetime.

Source

pub fn as_slice(&self) -> MatrixBlockSlice<'_>

Converts this mutable slice into an immutable slice.

Source

pub fn assign(&mut self, block: MatrixBlock)

Scatters a contiguous block into this non-contiguous slice.

This is the inverse of gather and is used to write GEMM results back into the parent matrix.

Source

pub fn zero_out(&mut self)

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V