Skip to main content

LocalArena

Struct LocalArena 

Source
pub struct LocalArena<A: Allocator = Global>(/* private fields */);
Expand description

A single-threaded bump arena.

Fastest of the three; Send but not Sync. Use it for per-task scratch and any single-threaded pass.

Implementations§

Source§

impl LocalArena<Global>

Source

pub const fn new() -> Self

Creates new arena allocator that uses global allocator to allocate memory chunks.

See LocalArena::new_in for using custom allocator.

Source

pub const fn with_chunk_size(chunk_size: usize) -> Self

Creates new arena allocator that uses global allocator to allocate memory chunks. With this method you can specify initial chunk size.

See LocalArena::new_in for using custom allocator.

Source§

impl<A: Allocator> LocalArena<A>

Source

pub const fn new_in(arena: A) -> Self

Creates a new arena that uses arena to allocate its memory chunks.

Source

pub const fn with_chunk_size_in(chunk_size: usize, arena: A) -> Self

Creates a new, empty arena whose chunks are at least chunk_size bytes.

Source

pub fn reset(&mut self)

Frees every allocation at once, keeping the arena’s chunks for reuse.

Trait Implementations§

Source§

impl<A: Allocator> Allocator for LocalArena<A>

Source§

fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>

Attempts to allocate a block of memory. Read more
Source§

fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>

Behaves like allocate, but also ensures that the returned memory is zero-initialized. Read more
Source§

unsafe fn deallocate(&self, pointer: NonNull<u8>, layout: Layout)

Deallocates the memory referenced by ptr. Read more
Source§

unsafe fn grow( &self, pointer: NonNull<u8>, old_layout: Layout, new_layout: Layout, ) -> Result<NonNull<[u8]>, AllocError>

Attempts to extend the memory block. Read more
Source§

unsafe fn grow_zeroed( &self, pointer: NonNull<u8>, old_layout: Layout, new_layout: Layout, ) -> Result<NonNull<[u8]>, AllocError>

Behaves like grow, but also ensures that the new contents are set to zero before being returned. Read more
Source§

unsafe fn shrink( &self, pointer: NonNull<u8>, old_layout: Layout, new_layout: Layout, ) -> Result<NonNull<[u8]>, AllocError>

Attempts to shrink the memory block. Read more
Source§

fn by_ref(&self) -> &Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Allocator. Read more
Source§

impl Default for LocalArena

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<A = Global> !Freeze for LocalArena<A>

§

impl<A = Global> !RefUnwindSafe for LocalArena<A>

§

impl<A = Global> !Sync for LocalArena<A>

§

impl<A = Global> !UnwindSafe for LocalArena<A>

§

impl<A> Send for LocalArena<A>
where A: Send,

§

impl<A> Unpin for LocalArena<A>
where A: Unpin,

§

impl<A> UnsafeUnpin for LocalArena<A>
where A: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<A> Arena for A
where A: Allocator + ?Sized,

Source§

fn alloc<T>(&self, value: T) -> &mut T

Allocates value and returns a unique reference to it.
Source§

fn alloc_with<T>(&self, f: impl FnOnce() -> T) -> &mut T

Allocates the result of f, evaluated directly into the arena slot.
Source§

fn alloc_str(&self, src: &str) -> &mut str

Copies src into the arena and returns the copy.
Source§

fn alloc_fmt(&self, arguments: Arguments<'_>) -> &mut str

Formats arguments directly into the arena and returns the resulting string. Read more
Source§

fn alloc_slice_copy<T>(&self, src: &[T]) -> &mut [T]
where T: Copy,

Copies a slice of Copy values into the arena.
Source§

fn alloc_slice_clone<T>(&self, src: &[T]) -> &mut [T]
where T: Clone,

Clones a slice of Clone values into the arena.
Source§

fn alloc_slice_fill_copy<T>(&self, len: usize, value: T) -> &mut [T]
where T: Copy,

Allocates len copies of value.
Source§

fn alloc_slice_fill_clone<T>(&self, len: usize, value: &T) -> &mut [T]
where T: Clone,

Allocates len clones of value.
Source§

fn alloc_slice_fill_with<T>( &self, len: usize, f: impl FnMut(usize) -> T, ) -> &mut [T]

Allocates len elements, each produced by f(index).
Source§

fn alloc_slice_fill_default<T>(&self, len: usize) -> &mut [T]
where T: Default,

Allocates len default-constructed elements.
Source§

fn alloc_slice_fill_iter<T>( &self, iter: impl IntoIterator<Item = T>, ) -> &mut [T]

Collects iter into the arena and returns the resulting slice.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.