[][src]Trait crossbeam_epoch::Pointable

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

type Init

The type for initializers.

Loading content...

Associated Constants

const ALIGN: usize

The alignment of pointer.

Loading content...

Required methods

unsafe fn init(init: Self::Init) -> usize

Initializes a with the given initializer.

Safety

The result should be a multiple of ALIGN.

unsafe fn deref<'a>(ptr: usize) -> &'a Self

Dereferences the given pointer.

Safety

  • The given ptr should have been initialized with [Pointable::init].
  • ptr should not have yet been dropped by [Pointable::drop].
  • ptr should not be mutably dereferenced by [Pointable::deref_mut] concurrently.

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut Self

Mutably dereferences the given pointer.

Safety

  • The given ptr should have been initialized with [Pointable::init].
  • ptr should not have yet been dropped by [Pointable::drop].
  • ptr should not be dereferenced by [Pointable::deref] or [Pointable::deref_mut] concurrently.

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer.

Safety

  • The given ptr should have been initialized with [Pointable::init].
  • ptr should not have yet been dropped by [Pointable::drop].
  • ptr should not be dereferenced by [Pointable::deref] or [Pointable::deref_mut] concurrently.
Loading content...

Implementations on Foreign Types

impl<T> Pointable for [MaybeUninit<T>][src]

type Init = usize

Loading content...

Implementors

impl<T> Pointable for T[src]

type Init = T

Loading content...