Struct re_viewer::external::crossbeam::queue::ArrayQueue
pub struct ArrayQueue<T> {
head: CachePadded<AtomicUsize>,
tail: CachePadded<AtomicUsize>,
buffer: Box<[Slot<T>]>,
cap: usize,
one_lap: usize,
}
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'));
Fields§
§head: CachePadded<AtomicUsize>
§tail: CachePadded<AtomicUsize>
§buffer: Box<[Slot<T>]>
§cap: usize
§one_lap: usize
Implementations§
§impl<T> ArrayQueue<T>
impl<T> ArrayQueue<T>
pub fn new(cap: usize) -> ArrayQueue<T>
pub fn new(cap: usize) -> ArrayQueue<T>
pub 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));
pub 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));
pub 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());
pub 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);
pub 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§
§impl<T> Debug for ArrayQueue<T>
impl<T> Debug for ArrayQueue<T>
§impl<T> IntoIterator for ArrayQueue<T>
impl<T> IntoIterator for ArrayQueue<T>
§fn into_iter(self) -> <ArrayQueue<T> as IntoIterator>::IntoIter
fn into_iter(self) -> <ArrayQueue<T> as IntoIterator>::IntoIter
impl<T> RefUnwindSafe for ArrayQueue<T>
impl<T> Send for ArrayQueue<T>where
T: Send,
impl<T> Sync for ArrayQueue<T>where
T: Send,
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
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T, I> IntoPyDict for Iwhere
T: PyDictItem,
I: IntoIterator<Item = T>,
impl<T, I> IntoPyDict for Iwhere
T: PyDictItem,
I: IntoIterator<Item = T>,
§fn into_py_dict_bound(self, py: Python<'_>) -> Bound<'_, PyDict>
fn into_py_dict_bound(self, py: Python<'_>) -> Bound<'_, PyDict>
PyDict
object pointer. Whether pointer owned or borrowed
depends on implementation.source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request