ArenaArc

Struct ArenaArc 

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

A reference-counting pointer to T in the arena

The type ArenaArc<T> provides shared ownership of a value of type T in the arena.
Invoking Clone on ArenaArc produces a new ArenaArc instance, which points to the same value, while increasing a reference count.

When the last ArenaArc pointer to a given value is dropped, the pointed-to value is also dropped and its dedicated memory in the arena is marked as available for future allocation.

Shared mutable references in Rust is not allowed, if you need to mutate through an ArenaArc, use a Mutex, RwLock or one of the atomic types.

If you don’t need to share the value, you should use ArenaBox.

§Cloning references

Creating a new reference from an existing reference counted pointer is done using the Clone trait implemented for ArenaArc<T>

§Deref behavior

ArenaArc<T> automatically dereferences to T, so you can call T’s methods on a value of type ArenaArc<T>.

let arena = SharedArena::new();
let my_num: ArenaArc<i64> = arena.alloc_arc(-100i64);

assert!(my_num.is_negative());
assert_eq!(*my_num.clone(), -100);

Trait Implementations§

Source§

impl<T> Clone for ArenaArc<T>

Source§

fn clone(&self) -> ArenaArc<T>

Make a clone of the ArenaArc pointer.

This increase the reference counter.

let arena = SharedArena::new();
let my_num = arena.alloc_arc(10);

assert_eq!(*my_num, *my_num.clone());
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for ArenaArc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

let arena = SharedArena::new();
let my_opt: ArenaArc<Option<i32>> = arena.alloc_arc(Some(10));

println!("{:?}", my_opt);
Source§

impl<T> Deref for ArenaArc<T>

Source§

fn deref(&self) -> &T

let arena = SharedArena::new();
let my_opt: ArenaArc<Option<i32>> = arena.alloc_arc(Some(10));

assert!(my_opt.is_some());
Source§

type Target = T

The resulting type after dereferencing.
Source§

impl<T: Display> Display for ArenaArc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

let arena = SharedArena::new();
let my_num = arena.alloc(10);

println!("{}", my_num);
Source§

impl<T> Drop for ArenaArc<T>

Drop the ArenaArc and decrement its reference counter

If it is the last reference to that value, the value is also dropped

Source§

fn drop(&mut self)

let arena = Arena::new();
let my_num = arena.alloc_arc(10);

assert_eq!(arena.stats(), (1, 62));
std::mem::drop(my_num);
assert_eq!(arena.stats(), (0, 63));
Source§

impl<T> Pointer for ArenaArc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

let arena = SharedArena::new();
let my_num = arena.alloc_arc(10);

println!("{:p}", my_num);
Source§

impl<T: Send> Send for ArenaArc<T>

Source§

impl<T: Send + Sync> Sync for ArenaArc<T>

Auto Trait Implementations§

§

impl<T> Freeze for ArenaArc<T>

§

impl<T> !RefUnwindSafe for ArenaArc<T>

§

impl<T> Unpin for ArenaArc<T>

§

impl<T> !UnwindSafe for ArenaArc<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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.