pub struct ReusedBuffer<T: 'static> { /* private fields */ }Expand description
A truly-pooled buffer: holds the actual pooled allocation without copying.
When dropped (or via release_to_pool), the buffer is returned to the global
pool. Use into_vec(len) to take ownership as a Vec<T>.
Implementations§
Source§impl<T: 'static> ReusedBuffer<T>
impl<T: 'static> ReusedBuffer<T>
Sourcepub fn as_uninit_slice_mut(&mut self) -> &mut [MaybeUninit<T>]
pub fn as_uninit_slice_mut(&mut self) -> &mut [MaybeUninit<T>]
Returns a mutable view of the buffer as uninitialized elements.
Sourcepub fn as_ptr_raw(&self) -> *mut T
pub fn as_ptr_raw(&self) -> *mut T
Raw pointer access — primarily for tests to verify address identity.
Sourcepub fn into_vec(self, len: usize) -> Vec<T>where
T: Copy,
pub fn into_vec(self, len: usize) -> Vec<T>where
T: Copy,
Consume self and transfer ownership of the allocation to a Vec<T>.
The caller must guarantee len <= self.capacity() and that the first len
elements have been initialized.
The Vec now owns the memory and will free it on drop; it is NOT returned
to the pool.
§Custom alignment
A Vec<T> always deallocates with Layout::array::<T>(), i.e. alignment
align_of::<T>(). A buffer acquired through
GlobalMemoryPool::acquire_uninit_aligned with a larger alignment
therefore cannot hand its allocation to a Vec — that would be a
mismatched-Layout deallocation (undefined behaviour). Such buffers are
copied into a fresh Vec instead and the over-aligned allocation is
returned to the pool, where it can still be reused.
Sourcepub fn release_to_pool(self)
pub fn release_to_pool(self)
Consume self and return the buffer to the pool.
If the pool is gone (Arc was dropped), the allocation is freed instead.
Trait Implementations§
Source§impl<T: 'static> Drop for ReusedBuffer<T>
impl<T: 'static> Drop for ReusedBuffer<T>
impl<T: Send + 'static> Send for ReusedBuffer<T>
SAFETY: ReusedBuffer<T> owns a unique allocation; it is safe to send across threads
when T: Send.
Auto Trait Implementations§
impl<T> !Sync for ReusedBuffer<T>
impl<T> Freeze for ReusedBuffer<T>
impl<T> RefUnwindSafe for ReusedBuffer<T>where
T: RefUnwindSafe,
impl<T> Unpin for ReusedBuffer<T>
impl<T> UnsafeUnpin for ReusedBuffer<T>
impl<T> UnwindSafe for ReusedBuffer<T>where
T: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more