use o3::alloc;
use crate::driver::retained::flight::storage::{self, Drain, Flights, Prepared};
#[repr(transparent)]
pub struct Builder<'owner, T: Copy, const INDEX_BITS: u32 = 32, const GENERATION_BITS: u32 = 32> {
pub(super) arena: &'owner Flights<T, INDEX_BITS, GENERATION_BITS>,
}
impl<'owner, T: Copy, const INDEX_BITS: u32, const GENERATION_BITS: u32>
Builder<'owner, T, INDEX_BITS, GENERATION_BITS>
{
pub fn try_batch<const GROUPS: usize>(
&mut self,
caps: [usize; GROUPS],
) -> Result<Prepared<'_, 'owner, T, INDEX_BITS, GENERATION_BITS, GROUPS>, alloc::Error> {
let access = unsafe { storage::raw::Access::new(self.arena) };
access.try_batch(caps)
}
pub fn drain(&self) -> Drain<'owner, T, INDEX_BITS, GENERATION_BITS> {
self.arena.drain()
}
}