Struct rustc_arena::TypedArena

source ·
pub struct TypedArena<T> {
    pub(crate) ptr: Cell<*mut T>,
    pub(crate) end: Cell<*mut T>,
    pub(crate) chunks: RefCell<Vec<ArenaChunk<T>>>,
    pub(crate) _own: PhantomData<T>,
}
Expand description

An arena that can hold objects of only one type.

Fields§

§ptr: Cell<*mut T>

A pointer to the next object to be allocated.

§end: Cell<*mut T>

A pointer to the end of the allocated area. When this pointer is reached, a new chunk is allocated.

§chunks: RefCell<Vec<ArenaChunk<T>>>

A vector of arena chunks.

§_own: PhantomData<T>

Marker indicating that dropping the arena causes its owned instances of T to be dropped.

Implementations§

source§

impl<T> TypedArena<T>

source

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

Allocates an object in the TypedArena, returning a reference to it.

source

pub(crate) fn can_allocate(&self, additional: usize) -> bool

source

pub(crate) fn alloc_raw_slice(&self, len: usize) -> *mut T

source

pub fn alloc_from_iter<I: IntoIterator<Item = T>>(&self, iter: I) -> &mut [T]

Allocates the elements of this iterator into a contiguous slice in the TypedArena.

Note: for reasons of reentrancy and panic safety we collect into a SmallVec<[_; 8]> before storing the elements in the arena.

source

pub(crate) fn grow(&self, additional: usize)

Grows the arena.

source

pub(crate) fn clear_last_chunk(&self, last_chunk: &mut ArenaChunk<T>)

Trait Implementations§

source§

impl<T> Default for TypedArena<T>

source§

fn default() -> TypedArena<T>

Creates a new TypedArena.

source§

impl<T> Drop for TypedArena<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: Send> Send for TypedArena<T>

Auto Trait Implementations§

§

impl<T> !Freeze for TypedArena<T>

§

impl<T> !RefUnwindSafe for TypedArena<T>

§

impl<T> !Sync for TypedArena<T>

§

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

§

impl<T> UnwindSafe for TypedArena<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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 48 bytes