[−][src]Struct shared_arena::ArenaRc
A single threaded reference-counting pointer to T
in the arena.
It cannot be sent between threads.
When the last ArenaRc
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 ArenaRc
, 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 ArenaRc<T>
Deref
behavior
ArenaRc<T>
automatically dereferences to T
, so you can call
T
's methods on a value of type ArenaRc<T>
.
let arena = Arena::new(); let my_num: ArenaRc<i32> = arena.alloc_rc(100i32); assert!(my_num.is_positive()); let value = 1 + *my_num; assert_eq!(value, 101); assert_eq!(*my_num.clone(), 100);
Trait Implementations
impl<T> Clone for ArenaRc<T>
[src]
fn clone(&self) -> ArenaRc<T>
[src]
Make a clone of the ArenaRc pointer.
This increase the reference counter.
let arena = SharedArena::new(); let my_num = arena.alloc_rc(10); assert_eq!(*my_num, *my_num.clone());
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<T: Debug> Debug for ArenaRc<T>
[src]
fn fmt(&self, f: &mut Formatter<'_>) -> Result
[src]
let arena = SharedArena::new(); let my_opt = arena.alloc_rc(Some(10)); println!("{:?}", my_opt);
impl<T> Deref for ArenaRc<T>
[src]
type Target = T
The resulting type after dereferencing.
fn deref(&self) -> &T
[src]
let arena = SharedArena::new(); let my_opt = arena.alloc_rc(Some(10)); assert!(my_opt.is_some());
impl<T: Display> Display for ArenaRc<T>
[src]
fn fmt(&self, f: &mut Formatter<'_>) -> Result
[src]
let arena = SharedArena::new(); let mut my_num = arena.alloc_rc(10); println!("{}", my_num);
impl<T> Drop for ArenaRc<T>
[src]
Drop the ArenaRc
If it is the last reference to that value, the value is also dropped
fn drop(&mut self)
[src]
let arena = Arena::new(); let my_num = arena.alloc_rc(10); assert_eq!(arena.stats(), (1, 62)); std::mem::drop(my_num); assert_eq!(arena.stats(), (0, 63));
impl<T> Pointer for ArenaRc<T>
[src]
Auto Trait Implementations
impl<T> !RefUnwindSafe for ArenaRc<T>
impl<T> !Send for ArenaRc<T>
impl<T> !Sync for ArenaRc<T>
impl<T> Unpin for ArenaRc<T>
impl<T> !UnwindSafe for ArenaRc<T>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,