Skip to main content

RingSlot

Struct RingSlot 

Source
pub struct RingSlot<'r, const N: usize, const BYTES: usize> { /* private fields */ }
Expand description

An exclusive lease on one StaticLendRing slot: fill it via buf_mut, then publish it as a zero-copy frame slice. Dropping it without publishing releases the lease (the slot was reserved for a capture that never happened).

Implementations§

Source§

impl<const N: usize, const BYTES: usize> RingSlot<'_, N, BYTES>

Source

pub fn buf_mut(&mut self) -> &mut [u8]

The slot’s backing bytes, for the capture (DMA target / test fill) to write.

Source

pub unsafe fn publish(self, len: usize) -> SystemSlice

Publish the first len captured bytes as a zero-copy SystemSlice that borrows this slot; the slot is reclaimed for reuse when the returned slice (the frame carrying it) is dropped downstream.

§Safety

The ring must outlive the returned SystemSlice and any frame holding it. On a static / StaticCell ring this is automatic; a stack ring must be kept alive until the pipeline drains.

Trait Implementations§

Source§

impl<const N: usize, const BYTES: usize> Debug for RingSlot<'_, N, BYTES>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const N: usize, const BYTES: usize> Drop for RingSlot<'_, N, BYTES>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<'r, const N: usize, const BYTES: usize> !RefUnwindSafe for RingSlot<'r, N, BYTES>

§

impl<'r, const N: usize, const BYTES: usize> !Send for RingSlot<'r, N, BYTES>

§

impl<'r, const N: usize, const BYTES: usize> !Sync for RingSlot<'r, N, BYTES>

§

impl<'r, const N: usize, const BYTES: usize> !UnwindSafe for RingSlot<'r, N, BYTES>

§

impl<'r, const N: usize, const BYTES: usize> Freeze for RingSlot<'r, N, BYTES>
where &'r UnsafeCell<[u8; BYTES]>: Freeze,

§

impl<'r, const N: usize, const BYTES: usize> Unpin for RingSlot<'r, N, BYTES>
where &'r UnsafeCell<[u8; BYTES]>: Unpin,

§

impl<'r, const N: usize, const BYTES: usize> UnsafeUnpin for RingSlot<'r, N, BYTES>
where &'r UnsafeCell<[u8; BYTES]>: UnsafeUnpin,

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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.