Trait crossbeam_epoch::Pointable [−][src]
pub trait Pointable { type Init; const ALIGN: usize; unsafe fn init(init: Self::Init) -> usize; unsafe fn deref<'a>(ptr: usize) -> &'a Self; unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut Self; unsafe fn drop(ptr: usize); }
Types that are pointed to by a single word.
In concurrent programming, it is necessary to represent an object within a word because atomic operations (e.g., reads, writes, read-modify-writes) support only single words. This trait qualifies such types that are pointed to by a single word.
The trait generalizes Box<T>
for a sized type T
. In a box, an object of type T
is
allocated in heap and it is owned by a single-word pointer. This trait is also implemented for
[MaybeUninit<T>]
by storing its size along with its elements and pointing to the pair of array
size and elements.
Pointers to Pointable
types can be stored in Atomic
, Owned
, and Shared
. In
particular, Crossbeam supports dynamically sized slices as follows.
use std::mem::MaybeUninit; use crossbeam_epoch::Owned; let o = Owned::<[MaybeUninit<i32>]>::init(10); // allocating [i32; 10]
Associated Types
Loading content...Associated Constants
Loading content...Required methods
unsafe fn init(init: Self::Init) -> usize
[src]
unsafe fn deref<'a>(ptr: usize) -> &'a Self
[src]
Dereferences the given pointer.
Safety
- The given
ptr
should have been initialized withPointable::init
. ptr
should not have yet been dropped byPointable::drop
.ptr
should not be mutably dereferenced byPointable::deref_mut
concurrently.
unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut Self
[src]
Mutably dereferences the given pointer.
Safety
- The given
ptr
should have been initialized withPointable::init
. ptr
should not have yet been dropped byPointable::drop
.ptr
should not be dereferenced byPointable::deref
orPointable::deref_mut
concurrently.
unsafe fn drop(ptr: usize)
[src]
Drops the object pointed to by the given pointer.
Safety
- The given
ptr
should have been initialized withPointable::init
. ptr
should not have yet been dropped byPointable::drop
.ptr
should not be dereferenced byPointable::deref
orPointable::deref_mut
concurrently.