Skip to main content

RingReader

Struct RingReader 

Source
pub struct RingReader<R> { /* private fields */ }
Expand description

The reading end of a CDBG ring: takes frames, never waits, never allocates.

Implementations§

Source§

impl<R: Region> RingReader<R>

Source

pub unsafe fn new(region: R) -> Result<Self, RingError>

Read the ring in region, after validating its descriptor.

§Safety

This must be the ring’s only reader for as long as it lives: two readers would race on read_ptr.

Source

pub fn into_region(self) -> R

The region back.

Source

pub fn region(&self) -> &R

The region this reader reads.

Source

pub fn snapshot(&self) -> Descriptor

A point-in-time copy of the descriptor.

Source

pub fn drain(&mut self, on_frame: impl FnMut(&[u8])) -> Result<usize, RingError>

Take every frame that was in the ring when the call began, handing each to on_frame, and return how many there were.

The batch is bounded by one snapshot of write_ptr: frames the writer appends while the drain runs wait for the next call. A drain that chased the live cursor could run for as long as the writer kept up, starving whatever the caller does between drains (decoding, emitting, checking for shutdown). Allocation-free; a frame is never longer than MAX_FRAME_LEN.

Trait Implementations§

Source§

impl<R: Region> TransportError for RingReader<R>

Source§

impl<R: Region> TryRecvTransport for RingReader<R>

Copies the next frame into buf and consumes it.

TryError::WouldBlock means the ring is empty. A frame longer than buf is RingError::BufferTooSmall and stays unread, so the caller can retry with a buffer of max_recv_size bytes, which always fits.

Source§

fn try_recv(&mut self, buf: &mut [u8]) -> Result<usize, TryError<RingError>>

Copy the next frame into buf if one is readable now.
Source§

fn max_recv_size(&self) -> usize

Maximum bytes transferable in a single try_recv.

Auto Trait Implementations§

§

impl<R> Forget for RingReader<R>

§

impl<R> Freeze for RingReader<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for RingReader<R>
where R: RefUnwindSafe,

§

impl<R> Send for RingReader<R>
where R: Send,

§

impl<R> Sync for RingReader<R>
where R: Sync,

§

impl<R> Unpin for RingReader<R>
where R: Unpin,

§

impl<R> UnsafeUnpin for RingReader<R>
where R: UnsafeUnpin,

§

impl<R> UnwindSafe for RingReader<R>
where R: UnwindSafe,

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> MaybeSend for T

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, !>

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more