pub struct ScratchBuffer<const SIZE: usize = DEFAULT_SCRATCH_SIZE> { /* private fields */ }Expand description
Thread-local scratch buffer for temporary allocations.
Provides fast, allocation-free temporary storage that can be used in Ring 0 hot path code. The buffer is automatically reset after each event is processed.
§Usage Pattern
use laminar_core::alloc::ScratchBuffer;
fn process_event(event: &Event) {
// Allocate temporary space from scratch buffer
let temp = ScratchBuffer::alloc(256);
temp.copy_from_slice(&event.data[..256]);
// Use temp...
// Reset at end of event processing
ScratchBuffer::reset();
}§Thread Safety
Each thread has its own scratch buffer. The buffer is NOT thread-safe and should only be accessed from a single thread.
§Panics
Panics if allocation request exceeds buffer capacity.
Implementations§
Source§impl<const SIZE: usize> ScratchBuffer<SIZE>
impl<const SIZE: usize> ScratchBuffer<SIZE>
Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Reset the scratch buffer for reuse.
Does NOT zero the memory - just resets the position.
Sourcepub fn alloc_slice(&mut self, size: usize) -> &mut [u8] ⓘ
pub fn alloc_slice(&mut self, size: usize) -> &mut [u8] ⓘ
Sourcepub fn try_alloc_slice(&mut self, size: usize) -> Option<&mut [u8]>
pub fn try_alloc_slice(&mut self, size: usize) -> Option<&mut [u8]>
Try to allocate a slice, returning None if not enough space.
Sourcepub fn alloc<T: Copy + Default>(&mut self) -> &mut T
pub fn alloc<T: Copy + Default>(&mut self) -> &mut T
Allocate space for a value and return a mutable reference.
The space is properly aligned for the type.
§Panics
Panics if there isn’t enough space.
Sourcepub fn alloc_with<T: Copy>(&mut self, value: T) -> &mut T
pub fn alloc_with<T: Copy>(&mut self, value: T) -> &mut T
Allocate space for a value with initialization.
§Panics
Panics if there isn’t enough space remaining in the buffer.
Source§impl ScratchBuffer<DEFAULT_SCRATCH_SIZE>
Static methods for accessing thread-local scratch buffer.
impl ScratchBuffer<DEFAULT_SCRATCH_SIZE>
Static methods for accessing thread-local scratch buffer.
Sourcepub fn thread_local_alloc(size: usize) -> &'static mut [u8] ⓘ
pub fn thread_local_alloc(size: usize) -> &'static mut [u8] ⓘ
Allocate from the thread-local scratch buffer.
§Arguments
size- Number of bytes to allocate
§Returns
Mutable slice that is valid until reset() is called.
§Panics
Panics if the requested size exceeds remaining capacity.
§Safety Note
The returned reference is only valid until the next reset() call.
It’s the caller’s responsibility to ensure the slice is not used
after reset.
Sourcepub fn thread_local_reset()
pub fn thread_local_reset()
Reset the thread-local scratch buffer.
Call this at the end of each event to reclaim space.
Sourcepub fn thread_local_remaining() -> usize
pub fn thread_local_remaining() -> usize
Get remaining capacity in thread-local buffer.
Sourcepub fn thread_local_used() -> usize
pub fn thread_local_used() -> usize
Get used bytes in thread-local buffer.
Trait Implementations§
Auto Trait Implementations§
impl<const SIZE: usize> Freeze for ScratchBuffer<SIZE>
impl<const SIZE: usize> RefUnwindSafe for ScratchBuffer<SIZE>
impl<const SIZE: usize> Send for ScratchBuffer<SIZE>
impl<const SIZE: usize> Sync for ScratchBuffer<SIZE>
impl<const SIZE: usize> Unpin for ScratchBuffer<SIZE>
impl<const SIZE: usize> UnwindSafe for ScratchBuffer<SIZE>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.