Struct crossbeam::queue::ArrayQueue
source · pub struct ArrayQueue<T> { /* private fields */ }
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§
source§impl<T> ArrayQueue<T>
impl<T> ArrayQueue<T>
sourcepub fn new(cap: usize) -> ArrayQueue<T>
pub fn new(cap: usize) -> ArrayQueue<T>
sourcepub fn push(&self, value: T) -> Result<(), T>
pub fn push(&self, value: T) -> Result<(), T>
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));
sourcepub fn force_push(&self, value: T) -> Option<T>
pub fn force_push(&self, value: T) -> Option<T>
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));
sourcepub fn pop(&self) -> Option<T>
pub fn pop(&self) -> Option<T>
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());
sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the capacity of the queue.
§Examples
use crossbeam_queue::ArrayQueue;
let q = ArrayQueue::<i32>::new(100);
assert_eq!(q.capacity(), 100);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
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());