use std::marker::PhantomData;
use rtrb::{Consumer, Producer, PushError, RingBuffer};
use crate::bench::harness::spsc::{SpscBench, SpscCons, SpscProd};
pub struct RtrbSpsc<T, const C: usize>(PhantomData<fn() -> T>);
impl<T: Send + 'static, const C: usize> SpscBench<T, C> for RtrbSpsc<T, C> {
type Prod = Producer<T>;
type Cons = Consumer<T>;
const NAME: &'static str = "rtrb";
fn new() -> (Self::Prod, Self::Cons) {
RingBuffer::new(C)
}
}
impl<T: Send> SpscProd<T> for Producer<T> {
#[inline]
fn try_push(&mut self, v: T) -> Result<(), T> {
self.push(v).map_err(|PushError::Full(v)| v)
}
}
impl<T: Send> SpscCons<T> for Consumer<T> {
#[inline]
fn try_pop(&mut self) -> Option<T> {
self.pop().ok()
}
}