pub struct UniqueArc<T: ?Sized>(/* private fields */);
Expand description
An Arc
that is known to be uniquely owned
When Arc
s are constructed, they are known to be
uniquely owned. In such a case it is safe to mutate
the contents of the Arc
. Normally, one would just handle
this by mutating the data on the stack before allocating the
Arc
, however it’s possible the data is large or unsized
and you need to heap-allocate it earlier in such a way
that it can be freely converted into a regular Arc
once you’re
done.
UniqueArc
exists for this purpose, when constructed it performs
the same allocations necessary for an Arc
, however it allows mutable access.
Once the mutation is finished, you can call .shareable()
and get a regular Arc
out of it.
let data = [1, 2, 3, 4, 5];
let mut x = UniqueArc::new(data);
x[4] = 7; // mutate!
let y = x.shareable(); // y is an Arc<T>
Implementations§
source§impl<T> UniqueArc<T>
impl<T> UniqueArc<T>
sourcepub fn new_uninit() -> UniqueArc<MaybeUninit<T>>
pub fn new_uninit() -> UniqueArc<MaybeUninit<T>>
Construct an uninitialized arc
sourcepub fn into_inner(this: Self) -> T
pub fn into_inner(this: Self) -> T
Gets the inner value of the unique arc
source§impl<T> UniqueArc<MaybeUninit<T>>
impl<T> UniqueArc<MaybeUninit<T>>
sourcepub fn as_mut_ptr(&mut self) -> *mut MaybeUninit<T>
pub fn as_mut_ptr(&mut self) -> *mut MaybeUninit<T>
Obtain a mutable pointer to the stored MaybeUninit<T>
.
sourcepub unsafe fn assume_init(this: Self) -> UniqueArc<T>
pub unsafe fn assume_init(this: Self) -> UniqueArc<T>
Convert to an initialized Arc.
§Safety
This function is equivalent to MaybeUninit::assume_init
and has the
same safety requirements. You are responsible for ensuring that the T
has actually been initialized before calling this method.
source§impl<T> UniqueArc<[MaybeUninit<T>]>
impl<T> UniqueArc<[MaybeUninit<T>]>
sourcepub fn new_uninit_slice(len: usize) -> Self
pub fn new_uninit_slice(len: usize) -> Self
Create an Arc contains an array [MaybeUninit<T>]
of len
.
sourcepub unsafe fn assume_init_slice(Self: Self) -> UniqueArc<[T]>
pub unsafe fn assume_init_slice(Self: Self) -> UniqueArc<[T]>
§Safety
Must initialize all fields before calling this function.