Struct SegQueue

struct SegQueue<T> { ... }

An unbounded multi-producer multi-consumer queue.

This queue is implemented as a linked list of segments, where each segment is a small buffer that can hold a handful of elements. There is no limit to how many elements can be in the queue at a time. However, since segments need to be dynamically allocated as elements get pushed, this queue is somewhat slower than ArrayQueue.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::new();

q.push('a');
q.push('b');

assert_eq!(q.pop(), Some('a'));
assert_eq!(q.pop(), Some('b'));
assert!(q.pop().is_none());

Implementations

impl<T> SegQueue<T>

const fn new() -> SegQueue<T>

Creates a new unbounded queue.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::<i32>::new();
fn push(self: &Self, value: T)

Pushes an element into the queue.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::new();

q.push(10);
q.push(20);
fn pop(self: &Self) -> Option<T>

Pops an element from the queue.

If the queue is empty, None is returned.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::new();

q.push(10);
assert_eq!(q.pop(), Some(10));
assert!(q.pop().is_none());
fn is_empty(self: &Self) -> bool

Returns true if the queue is empty.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::new();

assert!(q.is_empty());
q.push(1);
assert!(!q.is_empty());
fn len(self: &Self) -> usize

Returns the number of elements in the queue.

Examples

use crossbeam_queue::SegQueue;

let q = SegQueue::new();
assert_eq!(q.len(), 0);

q.push(10);
assert_eq!(q.len(), 1);

q.push(20);
assert_eq!(q.len(), 2);

impl<T> Any for SegQueue<T>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for SegQueue<T>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for SegQueue<T>

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> Debug for SegQueue<T>

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

impl<T> Default for SegQueue<T>

fn default() -> SegQueue<T>

impl<T> Drop for SegQueue<T>

fn drop(self: &mut Self)

impl<T> Freeze for SegQueue<T>

impl<T> From for SegQueue<T>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> IntoIterator for SegQueue<T>

fn into_iter(self: Self) -> <Self as >::IntoIter

impl<T> RefUnwindSafe for SegQueue<T>

impl<T> Unpin for SegQueue<T>

impl<T> UnsafeUnpin for SegQueue<T>

impl<T> UnwindSafe for SegQueue<T>

impl<T, U> Into for SegQueue<T>

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for SegQueue<T>

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for SegQueue<T>

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>

impl<T: Send> Send for SegQueue<T>

impl<T: Send> Sync for SegQueue<T>