CircularBuffer

Struct CircularBuffer 

Source
pub struct CircularBuffer<T> { /* private fields */ }
Expand description

Fixed size circular/cyclic/ring buffer

A FIFO (first in, first out) queue. It cannot represent an empty buffer.

When constructed, the internal list must not be empty, and cannot contain invalid (e.g. uninitialized) elements.

Implementations§

Source§

impl<T> CircularBuffer<T>

Source

pub fn len(&self) -> usize

Returns the number of elements (before starting to loop around).

Source

pub fn queue(&mut self, elem: T) -> T

Enqueues (push at beginning) the given element at the beginning of the buffer Dequeues (pop at end) the last element and returns it This keeps the the buffer length

Source

pub fn set_first(&mut self, index: usize)

Sets the offset for the first element, relative to the currently first element When index is out of range, it loops around

Source

pub fn get(&self, index: usize) -> &T

Returns a reference to the element at the given index When index is out of range, it loops around

Source

pub fn get_mut(&mut self, index: usize) -> &mut T

Returns a mutable reference to the element at the given index When index is out of range, it loops around

Source

pub fn swap_internal(&mut self, a: usize, b: usize)

Swaps the two elements at the given indices a and b. When a or b are out of range, they loop around

Source

pub fn swap(&mut self, index: usize, elem: T) -> T

Swaps the element at the given index with the specifiied new one. When a or b are out of range, they loop around

Source

pub fn iter_circular<'s>(&'s self) -> IterCircular<'s, T>

Returns an iterator over the buffer looping around at the end. This creates a never ending iterator

Source

pub fn iter<'s>(&'s self) -> Iter<'s, T>

Returns an iterator over the buffer without looping around.

Source

pub unsafe fn from_raw_parts(list: Box<[T]>, first: usize) -> Self

Constructs the structure from its raw components

§Unsafety

This function is unsafe as there is no guarantee that first < list.len(), nor whether list is non-empty.

Source

pub fn into_raw_parts(self) -> (Box<[T]>, usize)

Deconstructs the structure into its raw components

Trait Implementations§

Source§

impl<T: Clone> Clone for CircularBuffer<T>

Source§

fn clone(&self) -> CircularBuffer<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> From<Box<[T]>> for CircularBuffer<T>

Source§

fn from(l: Box<[T]>) -> Self

Converts to this type from the input type.
Source§

impl<T> From<Vec<T>> for CircularBuffer<T>

Source§

fn from(vec: Vec<T>) -> Self

Converts to this type from the input type.
Source§

impl<T> FromIterator<T> for CircularBuffer<T>

Source§

fn from_iter<I>(i: I) -> Self
where I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
Source§

impl<T: Hash> Hash for CircularBuffer<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: PartialEq> PartialEq for CircularBuffer<T>

Source§

fn eq(&self, other: &CircularBuffer<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Eq> Eq for CircularBuffer<T>

Source§

impl<T> StructuralPartialEq for CircularBuffer<T>

Auto Trait Implementations§

§

impl<T> Freeze for CircularBuffer<T>

§

impl<T> RefUnwindSafe for CircularBuffer<T>
where T: RefUnwindSafe,

§

impl<T> Send for CircularBuffer<T>
where T: Send,

§

impl<T> Sync for CircularBuffer<T>
where T: Sync,

§

impl<T> Unpin for CircularBuffer<T>

§

impl<T> UnwindSafe for CircularBuffer<T>
where T: 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.