devela/data/dst/queue/mod.rs
1// devela::data::dst::queue
2//
3//! Implementation of the FIFO queue structure.
4//
5
6use super::{DstArray, DstBuf};
7use crate::PhantomData;
8
9mod impl_traits;
10mod methods;
11mod private;
12
13#[doc = crate::TAG_DATA_STRUCTURE!()]
14/// A statically allocated FIFO queue of <abbr title="Dynamically sized type">DST</abbr>s.
15///
16/// # Examples
17/// ```
18/// # use devela::data::{DstArray, DstQueue};
19/// let mut queue = DstQueue::<str, DstArray<usize, 8>>::new();
20/// queue.push_back_str("Hello");
21/// queue.push_back_str("World");
22/// assert_eq!(queue.pop_front().as_ref().map(|v| &v[..]), Some("Hello"));
23/// ```
24pub struct DstQueue<DST: ?Sized, BUF: DstBuf> {
25 _pd: PhantomData<*const DST>,
26 read_pos: usize,
27 write_pos: usize,
28 data: BUF,
29}
30
31#[doc = crate::TAG_DATA_STRUCTURE!()]
32/// A statically allocated FIFO queue of <abbr title="Dynamically sized
33/// type">DST</abbr>s with pointer alignment.
34///
35/// # Examples
36/// ```
37/// # use devela::data::DstQueueUsize;
38/// let mut queue = DstQueueUsize::<[u8], 16>::new();
39/// queue.push_copied(&[1]);
40/// ```
41// WAIT: [lazy_type_alias](https://github.com/rust-lang/rust/issues/112792) ↓DENIED
42pub type DstQueueUsize<DST /*: ?Sized*/, const CAP: usize> = DstQueue<DST, DstArray<usize, CAP>>;
43
44/// Handle returned by [`DstQueue::pop`][DstQueue#method.pop]
45/// (does the actual pop on drop).
46pub struct DstQueuePopHandle<'a, DST: 'a + ?Sized, BUF: 'a + DstBuf> {
47 parent: &'a mut DstQueue<DST, BUF>,
48}
49
50#[doc = crate::TAG_ITERATOR!()]
51/// An iterator over the elements of a [`DstQueue`].
52pub struct DstQueueIter<'a, DST: 'a + ?Sized, BUF: 'a + DstBuf>(&'a DstQueue<DST, BUF>, usize);
53
54#[doc = crate::TAG_ITERATOR!()]
55/// A mutable iterator over the elements of a [`DstQueue`].
56pub struct DstQueueIterMut<'a, DST: 'a + ?Sized, BUF: 'a + DstBuf>(
57 &'a mut DstQueue<DST, BUF>,
58 usize,
59);