Skip to main content

Producer

Struct Producer 

Source
pub struct Producer<T, const CAPACITY: usize, A>
where A: Allocator,
{ /* private fields */ }
Expand description

The pushing handle of an SPSC FIFO queue.

Created together with its paired Consumer by new. Producer is Send but not Sync: at most one thread may push at a time.

Implementations§

Source§

impl<T, const CAPACITY: usize, A> Producer<T, CAPACITY, A>
where A: Allocator,

Source

pub fn push(&mut self, item: T) -> Option<T>

Pushes item onto the queue.

Wait-free. Never blocks, never allocates. Returns None on success. If the queue is full the item is returned unchanged as Some(item), so the caller can retry or back off without losing data.

§Examples
use low_latency_data_structures::spsc::{self, new};
use low_latency_data_structures::mem::global::GlobalAllocator;

let (mut producer, mut consumer) = new::<u64, 2, GlobalAllocator>(
    spsc::Options::global_mlocked(),
);
assert_eq!(producer.push(1), None);
assert_eq!(producer.push(2), None);
// Queue is full; item is handed back so we can retry later.
assert_eq!(producer.push(3), Some(3));

Trait Implementations§

Source§

impl<T, const CAPACITY: usize, A> Debug for Producer<T, CAPACITY, A>
where A: Allocator,

Source§

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

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

impl<T, const CAPACITY: usize, A> Send for Producer<T, CAPACITY, A>
where T: Send, A: Allocator, A::Allocation<T>: Send,

Auto Trait Implementations§

§

impl<T, const CAPACITY: usize, A> !RefUnwindSafe for Producer<T, CAPACITY, A>

§

impl<T, const CAPACITY: usize, A> !Sync for Producer<T, CAPACITY, A>

§

impl<T, const CAPACITY: usize, A> !UnwindSafe for Producer<T, CAPACITY, A>

§

impl<T, const CAPACITY: usize, A> Freeze for Producer<T, CAPACITY, A>
where Arc<Queue<T, CAPACITY, A>>: Freeze, *mut UnsafeCell<MaybeUninit<T>>: Freeze,

§

impl<T, const CAPACITY: usize, A> Unpin for Producer<T, CAPACITY, A>
where Arc<Queue<T, CAPACITY, A>>: Unpin, *mut UnsafeCell<MaybeUninit<T>>: Unpin,

§

impl<T, const CAPACITY: usize, A> UnsafeUnpin for Producer<T, CAPACITY, A>
where Arc<Queue<T, CAPACITY, A>>: UnsafeUnpin, *mut UnsafeCell<MaybeUninit<T>>: 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, !>

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.