pub struct LocalRb<S: Storage + ?Sized> { /* private fields */ }
Expand description
Ring buffer for single-threaded use only.
Slightly faster than multi-threaded version because it doesn’t synchronize cache.
Implementations§
Source§impl<S: Storage> LocalRb<S>
impl<S: Storage> LocalRb<S>
Sourcepub unsafe fn from_raw_parts(storage: S, read: usize, write: usize) -> Self
pub unsafe fn from_raw_parts(storage: S, read: usize, write: usize) -> Self
Constructs ring buffer from storage and indices.
§Safety
The items in storage inside read..write
range must be initialized, items outside this range must be uninitialized.
read
and write
positions must be valid (see implementation details).
Sourcepub unsafe fn into_raw_parts(self) -> (S, usize, usize)
pub unsafe fn into_raw_parts(self) -> (S, usize, usize)
Destructures ring buffer into underlying storage and read
and write
indices.
§Safety
Initialized contents of the storage must be properly dropped.
Source§impl<T> LocalRb<Heap<T>>
impl<T> LocalRb<Heap<T>>
Sourcepub fn new(capacity: usize) -> Self
pub fn new(capacity: usize) -> Self
Creates a new instance of a ring buffer.
Panics if allocation failed or capacity
is zero.
Sourcepub fn try_new(capacity: usize) -> Result<Self, TryReserveError>
pub fn try_new(capacity: usize) -> Result<Self, TryReserveError>
Creates a new instance of a ring buffer returning an error if allocation failed.
Panics if capacity
is zero.
Trait Implementations§
Source§impl<S: Storage + ?Sized> Consumer for LocalRb<S>
impl<S: Storage + ?Sized> Consumer for LocalRb<S>
Source§unsafe fn set_read_index(&self, value: usize)
unsafe fn set_read_index(&self, value: usize)
Set read index. Read more
Source§unsafe fn advance_read_index(&self, count: usize)
unsafe fn advance_read_index(&self, count: usize)
Source§fn occupied_slices(
&self,
) -> (&[MaybeUninit<Self::Item>], &[MaybeUninit<Self::Item>])
fn occupied_slices( &self, ) -> (&[MaybeUninit<Self::Item>], &[MaybeUninit<Self::Item>])
Provides a direct access to the ring buffer occupied memory.
The difference from
Self::as_slices
is that this method provides slices of MaybeUninit
, so items may be moved out of slices. Read moreSource§unsafe fn occupied_slices_mut(
&mut self,
) -> (&mut [MaybeUninit<Self::Item>], &mut [MaybeUninit<Self::Item>])
unsafe fn occupied_slices_mut( &mut self, ) -> (&mut [MaybeUninit<Self::Item>], &mut [MaybeUninit<Self::Item>])
Provides a direct mutable access to the ring buffer occupied memory. Read more
Source§fn as_slices(&self) -> (&[Self::Item], &[Self::Item])
fn as_slices(&self) -> (&[Self::Item], &[Self::Item])
Returns a pair of slices which contain, in order, the contents of the ring buffer.
Source§fn as_mut_slices(&mut self) -> (&mut [Self::Item], &mut [Self::Item])
fn as_mut_slices(&mut self) -> (&mut [Self::Item], &mut [Self::Item])
Returns a pair of mutable slices which contain, in order, the contents of the ring buffer.
Source§fn first(&self) -> Option<&Self::Item>
fn first(&self) -> Option<&Self::Item>
Returns a reference to the eldest item in the ring buffer, if exists.
Source§fn first_mut(&mut self) -> Option<&mut Self::Item>
fn first_mut(&mut self) -> Option<&mut Self::Item>
Returns a mutable reference to the eldest item in the ring buffer, if exists.
Source§fn last(&self) -> Option<&Self::Item>
fn last(&self) -> Option<&Self::Item>
Returns a reference to the most recent item in the ring buffer, if exists. Read more
Source§fn last_mut(&mut self) -> Option<&mut Self::Item>
fn last_mut(&mut self) -> Option<&mut Self::Item>
Returns a mutable reference to the most recent item in the ring buffer, if exists. Read more
Source§fn try_pop(&mut self) -> Option<Self::Item>
fn try_pop(&mut self) -> Option<Self::Item>
Removes the eldest item from the ring buffer and returns it. Read more
Source§fn try_peek(&self) -> Option<&Self::Item>
fn try_peek(&self) -> Option<&Self::Item>
Returns the reference to the eldest item without removing it from the buffer. Read more
Source§fn peek_slice_uninit(&self, elems: &mut [MaybeUninit<Self::Item>]) -> usize
fn peek_slice_uninit(&self, elems: &mut [MaybeUninit<Self::Item>]) -> usize
Copies items from the ring buffer to an uninit slice without removing them from the ring buffer. Read more
Source§fn peek_slice(&self, elems: &mut [Self::Item]) -> usize
fn peek_slice(&self, elems: &mut [Self::Item]) -> usize
Copies items from the ring buffer to a slice without removing them from the ring buffer. Read more
Source§fn pop_slice_uninit(&mut self, elems: &mut [MaybeUninit<Self::Item>]) -> usize
fn pop_slice_uninit(&mut self, elems: &mut [MaybeUninit<Self::Item>]) -> usize
Removes items from the ring buffer and writes them into an uninit slice. Read more
Source§fn pop_slice(&mut self, elems: &mut [Self::Item]) -> usize
fn pop_slice(&mut self, elems: &mut [Self::Item]) -> usize
Removes items from the ring buffer and writes them into a slice. Read more
Source§fn pop_iter(&mut self) -> PopIter<'_, Self> ⓘ
fn pop_iter(&mut self) -> PopIter<'_, Self> ⓘ
Returns an iterator that removes items one by one from the ring buffer.
Source§fn iter(&self) -> Iter<'_, Self>
fn iter(&self) -> Iter<'_, Self>
Returns a front-to-back iterator containing references to items in the ring buffer. Read more
Source§fn iter_mut(&mut self) -> IterMut<'_, Self>
fn iter_mut(&mut self) -> IterMut<'_, Self>
Returns a front-to-back iterator that returns mutable references to items in the ring buffer. Read more
Source§fn skip(&mut self, count: usize) -> usize
fn skip(&mut self, count: usize) -> usize
Removes at most
count
and at least min(count, Self::len())
items from the buffer and safely drops them. Read moreSource§fn clear(&mut self) -> usize
fn clear(&mut self) -> usize
Removes all items from the buffer and safely drops them. Read more
Source§impl<S: Storage + ?Sized> Observer for LocalRb<S>
impl<S: Storage + ?Sized> Observer for LocalRb<S>
type Item = <S as Storage>::Item
Source§fn capacity(&self) -> NonZeroUsize
fn capacity(&self) -> NonZeroUsize
Capacity of the ring buffer. Read more
Source§fn read_index(&self) -> usize
fn read_index(&self) -> usize
Index of the last item in the ring buffer. Read more
Source§fn write_index(&self) -> usize
fn write_index(&self) -> usize
Index of the next empty slot in the ring buffer. Read more
Source§unsafe fn unsafe_slices(
&self,
start: usize,
end: usize,
) -> (&[MaybeUninit<S::Item>], &[MaybeUninit<S::Item>])
unsafe fn unsafe_slices( &self, start: usize, end: usize, ) -> (&[MaybeUninit<S::Item>], &[MaybeUninit<S::Item>])
Source§unsafe fn unsafe_slices_mut(
&self,
start: usize,
end: usize,
) -> (&mut [MaybeUninit<S::Item>], &mut [MaybeUninit<S::Item>])
unsafe fn unsafe_slices_mut( &self, start: usize, end: usize, ) -> (&mut [MaybeUninit<S::Item>], &mut [MaybeUninit<S::Item>])
Source§fn read_is_held(&self) -> bool
fn read_is_held(&self) -> bool
Whether read end is held by consumer.
Source§fn write_is_held(&self) -> bool
fn write_is_held(&self) -> bool
Whether write end is held by producer.
Source§fn occupied_len(&self) -> usize
fn occupied_len(&self) -> usize
The number of items stored in the buffer. Read more
Source§fn vacant_len(&self) -> usize
fn vacant_len(&self) -> usize
The number of remaining free places in the buffer. Read more
Source§impl<S: Storage + ?Sized> Producer for LocalRb<S>
impl<S: Storage + ?Sized> Producer for LocalRb<S>
Source§unsafe fn set_write_index(&self, value: usize)
unsafe fn set_write_index(&self, value: usize)
Set read index. Read more
Source§unsafe fn advance_write_index(&self, count: usize)
unsafe fn advance_write_index(&self, count: usize)
Source§fn vacant_slices(
&self,
) -> (&[MaybeUninit<Self::Item>], &[MaybeUninit<Self::Item>])
fn vacant_slices( &self, ) -> (&[MaybeUninit<Self::Item>], &[MaybeUninit<Self::Item>])
Provides a direct access to the ring buffer vacant memory. Read more
Source§fn vacant_slices_mut(
&mut self,
) -> (&mut [MaybeUninit<Self::Item>], &mut [MaybeUninit<Self::Item>])
fn vacant_slices_mut( &mut self, ) -> (&mut [MaybeUninit<Self::Item>], &mut [MaybeUninit<Self::Item>])
Mutable version of
Self::vacant_slices
. Read moreSource§fn try_push(&mut self, elem: Self::Item) -> Result<(), Self::Item>
fn try_push(&mut self, elem: Self::Item) -> Result<(), Self::Item>
Appends an item to the ring buffer. Read more
Source§fn push_iter<I: Iterator<Item = Self::Item>>(&mut self, iter: I) -> usize
fn push_iter<I: Iterator<Item = Self::Item>>(&mut self, iter: I) -> usize
Appends items from an iterator to the ring buffer.
Elements that haven’t been added to the ring buffer remain in the iterator. Read more
Source§impl<S: Storage> Read for LocalRb<S>
impl<S: Storage> Read for LocalRb<S>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning
how many bytes were read. Read more
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
Like
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
Reads all bytes until EOF in this source, placing them into
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
Reads all bytes until EOF in this source, appending them to
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
Reads the exact number of bytes required to fill
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Pull some bytes from this source into the specified buffer. Read more
Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Reads the exact number of bytes required to fill
cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adaptor for this instance of
Read
. Read moreSource§impl<S: Storage + ?Sized> RingBuffer for LocalRb<S>
impl<S: Storage + ?Sized> RingBuffer for LocalRb<S>
Source§unsafe fn hold_read(&self, flag: bool) -> bool
unsafe fn hold_read(&self, flag: bool) -> bool
Tell whether read end of the ring buffer is held by consumer or not. Read more
Source§unsafe fn hold_write(&self, flag: bool) -> bool
unsafe fn hold_write(&self, flag: bool) -> bool
Tell whether write end of the ring buffer is held by producer or not. Read more
Source§fn push_overwrite(&mut self, elem: Self::Item) -> Option<Self::Item>
fn push_overwrite(&mut self, elem: Self::Item) -> Option<Self::Item>
Pushes an item to the ring buffer overwriting the latest item if the buffer is full. Read more
Source§impl<S: Storage> Write for LocalRb<S>
impl<S: Storage> Write for LocalRb<S>
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Writes a buffer into this writer, returning how many bytes were written. Read more
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flushes this output stream, ensuring that all intermediately buffered
contents reach their destination. Read more
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector
)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations§
impl<S> !Freeze for LocalRb<S>
impl<S> !RefUnwindSafe for LocalRb<S>
impl<S> Send for LocalRb<S>
impl<S> !Sync for LocalRb<S>
impl<S> Unpin for LocalRb<S>
impl<S> UnwindSafe for LocalRb<S>where
S: UnwindSafe + ?Sized,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more