use oneringbuf::ORBIterator;
fn create_buffers<'buf>() -> (
oneringbuf::OneRingBuf<
oneringbuf::storage_components::StackStorage<'buf, usize, 100>,
oneringbuf::iters_components::LocalComp,
>,
oneringbuf::OneRingBuf<
oneringbuf::storage_components::StackStorage<'buf, usize, 100>,
oneringbuf::iters_components::LocalCompMut,
>,
) {
let buf = oneringbuf::LocalStackRB::<usize, 100>::default();
let mut_buf = oneringbuf::LocalStackRBMut::<usize, 100>::default();
oneringbuf::SharedStackRB::<usize, 100>::default();
oneringbuf::SharedStackRBMut::<usize, 100>::default();
#[cfg(feature = "alloc")]
{
oneringbuf::LocalHeapRB::<usize>::default(100);
oneringbuf::LocalHeapRBMut::<usize>::default(100);
oneringbuf::SharedHeapRB::<usize>::default(100);
oneringbuf::SharedHeapRBMut::<usize>::default(100);
}
#[cfg(all(feature = "alloc", feature = "vmem", unix))]
{
oneringbuf::LocalVmemRB::<usize>::default(100);
oneringbuf::LocalVmemRBMut::<usize>::default(100);
oneringbuf::SharedVmemRB::<usize>::default(100);
oneringbuf::SharedVmemRBMut::<usize>::default(100);
}
(buf, mut_buf)
}
#[cfg(feature = "async")]
fn create_async_buffers<'buf>() -> (
oneringbuf::OneRingBuf<
oneringbuf::storage_components::StackStorage<'buf, usize, 100>,
oneringbuf::iters_components::AsyncComp,
>,
oneringbuf::OneRingBuf<
oneringbuf::storage_components::StackStorage<'buf, usize, 100>,
oneringbuf::iters_components::AsyncCompMut,
>,
) {
let buf = oneringbuf::AsyncStackRB::<usize, 100>::default();
let mut_buf = oneringbuf::AsyncStackRBMut::<usize, 100>::default();
#[cfg(feature = "alloc")]
{
oneringbuf::AsyncHeapRB::<usize>::default(100);
oneringbuf::AsyncHeapRBMut::<usize>::default(100);
}
#[cfg(all(feature = "alloc", feature = "vmem", unix))]
{
oneringbuf::AsyncVmemRB::<usize>::default(100);
oneringbuf::AsyncVmemRBMut::<usize>::default(100);
}
(buf, mut_buf)
}
#[tokio::main]
async fn main() {
let (mut buf, mut mut_buf) = create_buffers();
let (_prod, _cons) = buf.split();
let (mut prod, work, mut cons) = mut_buf.split_mut();
prod.push(1).unwrap();
let mut detached = work.detach();
if let Some(x) = detached.get_mut() {
*x += 1;
unsafe {
detached.advance(1);
}
}
let mut _work = detached.attach();
let x = cons.pop().unwrap();
assert_eq!(x, 2);
#[cfg(feature = "async")]
{
use oneringbuf::iterators::async_iterators::AsyncIterator;
let (mut buf, mut mut_buf) = create_async_buffers();
let (_prod, _cons) = buf.split_async();
let (mut prod, work, mut cons) = mut_buf.split_async_mut();
prod.push(1).await.unwrap();
let mut detached = work.detach();
if let Some(x) = detached.get_mut().await {
*x += 1;
unsafe {
detached.advance(1);
}
}
let mut _work = detached.attach();
let x = cons.pop().await.unwrap();
assert_eq!(x, 2);
};
}