[][src]Struct peril::HazardValue

pub struct HazardValue<'registry, T: Send + 'registry>(_);

encapsulates a boxed Value or a Dummy (like null)

Examples

use peril::HazardValue;

// creating a boxed string value
let boxed = HazardValue::boxed("test");

// creating a dummy nullptr
let dummy = HazardValue::<usize>::dummy(0);

Implementations

impl<'registry, T: Send + 'registry> HazardValue<'registry, T>[src]

pub fn boxed(value: T) -> HazardValue<'registry, T>[src]

create a boxed HazardValue

Arguments

  • value - A generic value held within the box

Examples

use peril::HazardValue;

// creating a boxed string value
let boxed = HazardValue::boxed("test");

pub fn dummy(value: usize) -> HazardValue<'registry, T>[src]

create a Dummy HazardValue (like null)

Arguments

  • value - the dummy pointer value (usually used for null values)

Examples

use peril::HazardValue;

// creating a dummy nullptr
let dummy = HazardValue::<usize>::dummy(0);

pub fn as_ref(&self) -> Option<&T>[src]

read the data from a Boxed HazardValue and will return None if the value is a dummy

Examples

use peril::HazardValue;

// creating a boxed string value
let boxed = HazardValue::boxed("test");
assert!(boxed.as_ref().unwrap() == &"test");

pub fn is_boxed(&self) -> bool[src]

check if a value is a Boxed HazardValue

Examples

use peril::HazardValue;

// creating a boxed string value
let boxed = HazardValue::boxed("test");
assert!(boxed.is_boxed());

pub fn is_dummy(&self) -> bool[src]

check if a value is a Dummy HazardValue

Examples

use peril::HazardValue;

// creating a dummy value
let dummy = HazardValue::<usize>::dummy(0);
assert!(dummy.is_dummy());

pub fn as_dummy(&self) -> Option<usize>[src]

get the (pointer) dummy value of HazardValue or return None if the value is not a dummy

Examples

use peril::HazardValue;

// creating a dummy value
let dummy = HazardValue::<usize>::dummy(1337);
assert!(dummy.as_dummy().unwrap() == 1337);

pub fn clone_inner(self) -> Option<T> where
    T: Clone
[src]

clones the data from a Boxed HazardValue if T: Clone or return None if the value is a dummy

Examples

use peril::HazardValue;

// creating a boxed value
let mut boxed = HazardValue::boxed(1);
let taken = boxed.clone_inner().unwrap();
assert!(taken == 1);

Trait Implementations

impl<'registry, T: Send + 'registry> Clone for HazardValue<'registry, T>[src]

pub fn clone(&self) -> Self[src]

clones the HazardValue itself

Examples

use peril::{HazardRegistry, HazardValue, HazardRecord, HazardPointer, Ordering};

// creating a boxed value
let boxed = HazardValue::boxed(1);
let clone = boxed.clone();

let registry = HazardRegistry::default();
let hp = HazardPointer::new(boxed, &registry);
let ok = hp.compare_exchange(clone, HazardValue::dummy(0), Ordering::Relaxed, Ordering::Relaxed).is_ok();
assert!(ok);

Auto Trait Implementations

impl<'registry, T> RefUnwindSafe for HazardValue<'registry, T> where
    T: RefUnwindSafe
[src]

impl<'registry, T> !Send for HazardValue<'registry, T>[src]

impl<'registry, T> !Sync for HazardValue<'registry, T>[src]

impl<'registry, T> Unpin for HazardValue<'registry, T>[src]

impl<'registry, T> UnwindSafe for HazardValue<'registry, T> where
    T: RefUnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.