use std::ptr;
use crate::buffer::storage::provided::arena;
pub(in crate::buffer::storage::provided) struct Empty<'d> {
pub(super) entry: ptr::NonNull<arena::Entry<'d>>,
}
impl<'d> Empty<'d> {
pub(super) fn take_next(&mut self) -> Option<Self> {
unsafe { self.entry.as_ref() }.free.take()
}
}
impl crate::mem::Return for Empty<'_> {
type Item = ();
fn return_item(self, (): Self::Item) {
unsafe { self.entry.as_ref() }.domain.push_free(self);
}
}
pub(in crate::buffer::storage::provided) struct Ready<'d> {
pub(super) entry: ptr::NonNull<arena::Entry<'d>>,
}
impl<'d> Ready<'d> {
pub(super) fn take_next(&mut self) -> Option<Self> {
unsafe { self.entry.as_ref() }.returned.take()
}
}