Arena

Struct Arena 

Source
pub struct Arena<T> { /* private fields */ }
Expand description

A bump allocator for stable, arena-allocated references.

Values allocated in an arena live until the arena is dropped or reset. References remain valid across subsequent allocations, making this ideal for AST nodes that reference each other.

Implementations§

Source§

impl<T> Arena<T>

Source

pub fn new() -> Arena<T>

Creates an empty arena.

Source

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

Allocates a value and returns a reference valid for the arena’s lifetime.

Source

pub fn alloc_slice<I>(&self, items: I) -> &[T]
where I: IntoIterator<Item = T>, <I as IntoIterator>::IntoIter: ExactSizeIterator,

Allocates a slice from an iterator.

The iterator must implement ExactSizeIterator so the arena can pre-allocate the correct amount of space.

Source

pub fn reset(&mut self)

Resets the arena, invalidating all references but keeping allocated capacity.

This enables zero-allocation REPL loops by reusing memory.

Trait Implementations§

Source§

impl<T> Default for Arena<T>

Source§

fn default() -> Arena<T>

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

Auto Trait Implementations§

§

impl<T> !Freeze for Arena<T>

§

impl<T> !RefUnwindSafe for Arena<T>

§

impl<T> Send for Arena<T>
where T: Send,

§

impl<T> !Sync for Arena<T>

§

impl<T> Unpin for Arena<T>
where T: Unpin,

§

impl<T> !UnwindSafe for Arena<T>

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<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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V