Struct Bounded

Source
pub struct Bounded<T> {
    head: CachePadded<AtomicUsize>,
    tail: CachePadded<AtomicUsize>,
    buffer: Box<[Slot<T>]>,
    one_lap: usize,
    mark_bit: usize,
}
Expand description

A bounded queue.

Fields§

§head: CachePadded<AtomicUsize>

The head of the queue.

This value is a “stamp” consisting of an index into the buffer, a mark bit, and a lap, but packed into a single usize. The lower bits represent the index, while the upper bits represent the lap. The mark bit in the head is always zero.

Values are popped from the head of the queue.

§tail: CachePadded<AtomicUsize>

The tail of the queue.

This value is a “stamp” consisting of an index into the buffer, a mark bit, and a lap, but packed into a single usize. The lower bits represent the index, while the upper bits represent the lap. The mark bit indicates that the queue is closed.

Values are pushed into the tail of the queue.

§buffer: Box<[Slot<T>]>

The buffer holding slots.

§one_lap: usize

A stamp with the value of { lap: 1, mark: 0, index: 0 }.

§mark_bit: usize

If this bit is set in the tail, that means the queue is closed.

Implementations§

Source§

impl<T> Bounded<T>

Source

pub fn new(cap: usize) -> Bounded<T>

Creates a new bounded queue.

Source

pub fn push(&self, value: T) -> Result<(), PushError<T>>

Attempts to push an item into the queue.

Source

pub fn force_push(&self, value: T) -> Result<Option<T>, ForcePushError<T>>

Pushes an item into the queue, displacing another item if needed.

Source

fn push_or_else<F>(&self, value: T, fail: F) -> Result<(), PushError<T>>
where F: FnMut(T, usize, usize, &Slot<T>) -> Result<T, PushError<T>>,

Attempts to push an item into the queue, running a closure on failure.

fail is run when there is no more room left in the tail of the queue. The parameters of this function are as follows:

  • The item that failed to push.
  • The value of self.tail before the new value would be inserted.
  • The value of self.tail after the new value would be inserted.
  • The slot that we attempted to push into.

If fail returns Ok(val), we will try pushing val to the head of the queue. Otherwise, this function will return the error.

Source

pub fn pop(&self) -> Result<T, PopError>

Attempts to pop an item from the queue.

Source

pub fn len(&self) -> usize

Returns the number of items in the queue.

Source

pub fn is_empty(&self) -> bool

Returns true if the queue is empty.

Source

pub fn is_full(&self) -> bool

Returns true if the queue is full.

Source

pub fn capacity(&self) -> usize

Returns the capacity of the queue.

Source

pub fn close(&self) -> bool

Closes the queue.

Returns true if this call closed the queue.

Source

pub fn is_closed(&self) -> bool

Returns true if the queue is closed.

Trait Implementations§

Source§

impl<T> Drop for Bounded<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for Bounded<T>

§

impl<T> !RefUnwindSafe for Bounded<T>

§

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

§

impl<T> !Sync for Bounded<T>

§

impl<T> Unpin for Bounded<T>

§

impl<T> UnwindSafe for Bounded<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> 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 = 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.