use super::queue;
pub mod ncq {
use core::fmt::Debug;
use crate::queues::{DequeueError, EnqueueError};
use super::queue;
pub struct Receiver<T>(queue::BoundedReceiver<T, queue::ncq::Queue>);
pub struct Sender<T>(queue::BoundedSender<T, queue::ncq::Queue>);
impl<T> Debug for Receiver<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "NCQ-Receiver<{}>()", core::any::type_name::<T>())
}
}
impl<T> Debug for Sender<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "NCQ-Sender<{}>()", core::any::type_name::<T>())
}
}
pub fn queue<T>(capacity: usize) -> (Receiver<T>, Sender<T>) {
let (rx, tx) = queue::queue_ncq(capacity);
(Receiver(rx), Sender(tx))
}
impl<T> Sender<T> {
pub fn try_enqueue(&self, data: T) -> Result<(), (EnqueueError, T)> {
self.0.try_enqueue(data)
}
pub fn is_closed(&self) -> bool {
self.0.is_closed()
}
}
impl<T> Receiver<T> {
pub fn try_dequeue(&self) -> Result<T, DequeueError> {
self.0.dequeue()
}
pub fn is_closed(&self) -> bool {
self.0.is_closed()
}
}
}
pub mod scq {
use core::fmt::Debug;
use crate::queues::{DequeueError, EnqueueError};
use super::queue;
pub struct Receiver<T>(queue::BoundedReceiver<T, queue::scq::Queue>);
pub struct Sender<T>(queue::BoundedSender<T, queue::scq::Queue>);
impl<T> Debug for Receiver<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "SCQ-Receiver<{}>()", core::any::type_name::<T>())
}
}
impl<T> Debug for Sender<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "SCQ-Sender<{}>()", core::any::type_name::<T>())
}
}
pub fn queue<T>(capacity: usize) -> (Receiver<T>, Sender<T>) {
let (rx, tx) = queue::queue_scq(capacity);
(Receiver(rx), Sender(tx))
}
impl<T> Sender<T> {
pub fn try_enqueue(&self, data: T) -> Result<(), (EnqueueError, T)> {
self.0.try_enqueue(data)
}
pub fn is_closed(&self) -> bool {
self.0.is_closed()
}
}
impl<T> Receiver<T> {
pub fn try_dequeue(&self) -> Result<T, DequeueError> {
self.0.dequeue()
}
pub fn is_closed(&self) -> bool {
self.0.is_closed()
}
}
}