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());
Trait Implementations§
Source§impl<T> Debug for ArrayQueue<T>
impl<T> Debug for ArrayQueue<T>
Source§impl<T> Drop for ArrayQueue<T>
impl<T> Drop for ArrayQueue<T>
Source§impl<T> IntoIterator for ArrayQueue<T>
impl<T> IntoIterator for ArrayQueue<T>
impl<T> RefUnwindSafe for ArrayQueue<T>
impl<T: Send> Send for ArrayQueue<T>
impl<T: Send> Sync for ArrayQueue<T>
impl<T> UnwindSafe for ArrayQueue<T>
Auto Trait Implementations§
impl<T> !Freeze for ArrayQueue<T>
impl<T> Unpin for ArrayQueue<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 384 bytes