Struct crossbeam_queue::ArrayQueue [−][src]
pub struct ArrayQueue<T> { /* fields omitted */ }
Expand description
A bounded multi-producer multi-consumer queue.
This queue allocates a fixed-capacity buffer on construction, which is used to store pushed
elements. The queue cannot hold more elements than the buffer allows. Attempting to push an
element into a full queue will fail. Alternatively, force_push
makes it possible for
this queue to be used as a ring-buffer. Having a buffer allocated upfront makes this queue
a bit faster than SegQueue
.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(2);
assert_eq!(q.push('a'), Ok(()));
assert_eq!(q.push('b'), Ok(()));
assert_eq!(q.push('c'), Err('c'));
assert_eq!(q.pop(), Some('a'));
Implementations
Attempts to push an element into the queue.
If the queue is full, the element is returned back as an error.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(1);
assert_eq!(q.push(10), Ok(()));
assert_eq!(q.push(20), Err(20));
Pushes an element into the queue, replacing the oldest element if necessary.
If the queue is full, the oldest element is replaced and returned,
otherwise None
is returned.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(2);
assert_eq!(q.force_push(10), None);
assert_eq!(q.force_push(20), None);
assert_eq!(q.force_push(30), Some(10));
assert_eq!(q.pop(), Some(20));
Attempts to pop an element from the queue.
If the queue is empty, None
is returned.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(1);
assert_eq!(q.push(10), Ok(()));
assert_eq!(q.pop(), Some(10));
assert!(q.pop().is_none());
Returns the capacity of the queue.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::<i32>::new(100);
assert_eq!(q.capacity(), 100);
Returns true
if the queue is empty.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(100);
assert!(q.is_empty());
q.push(1).unwrap();
assert!(!q.is_empty());
Returns true
if the queue is full.
Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::new(1);
assert!(!q.is_full());
q.push(1).unwrap();
assert!(q.is_full());