pub struct Atom<P> where
P: IntoRawPtr + FromRawPtr, { /* private fields */ }
Expand description
An Atom wraps an AtomicPtr, it allows for safe mutation of an atomic into common Rust Types.
Implementations
sourceimpl<P> Atom<P> where
P: IntoRawPtr + FromRawPtr,
impl<P> Atom<P> where
P: IntoRawPtr + FromRawPtr,
sourcepub fn swap(&self, v: P, order: Ordering) -> Option<P>
pub fn swap(&self, v: P, order: Ordering) -> Option<P>
Swap a new value into the Atom, This will try multiple times until it succeeds. The old value will be returned.
sourcepub fn take(&self, order: Ordering) -> Option<P>
pub fn take(&self, order: Ordering) -> Option<P>
Take the value of the Atom replacing it with null pointer
Returning the contents. If the contents was a null
pointer the
result will be None
.
sourcepub fn set_if_none(&self, v: P, order: Ordering) -> Option<P>
pub fn set_if_none(&self, v: P, order: Ordering) -> Option<P>
This will do a CAS
setting the value only if it is NULL
this will return None
if the value was written,
otherwise a Some(v)
will be returned, where the value was
the same value that you passed into this function
sourcepub fn replace_and_set_next(
&self,
value: P,
load_order: Ordering,
cas_order: Ordering
) -> bool where
P: GetNextMut<NextPtr = Option<P>>,
pub fn replace_and_set_next(
&self,
value: P,
load_order: Ordering,
cas_order: Ordering
) -> bool where
P: GetNextMut<NextPtr = Option<P>>,
Take the current content, write it into P then do a CAS to extent this Atom with the previous contents. This can be used to create a LIFO
Returns true if this set this migrated the Atom from null.
sourceimpl<P, T> Atom<P> where
P: IntoRawPtr + FromRawPtr + Deref<Target = T>,
impl<P, T> Atom<P> where
P: IntoRawPtr + FromRawPtr + Deref<Target = T>,
sourcepub fn compare_and_swap(
&self,
current: Option<&P>,
new: Option<P>,
order: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
pub fn compare_and_swap(
&self,
current: Option<&P>,
new: Option<P>,
order: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
Stores new
in the Atom if current
has the same raw pointer
representation as the currently stored value.
On success, the Atom’s previous value is returned. On failure, new
is
returned together with a raw pointer to the Atom’s current unchanged
value, which is not safe to dereference, especially if the Atom is
accessed from multiple threads.
compare_and_swap
also takes an Ordering
argument which describes
the memory ordering of this operation.
sourcepub fn compare_exchange(
&self,
current: Option<&P>,
new: Option<P>,
success: Ordering,
failure: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
pub fn compare_exchange(
&self,
current: Option<&P>,
new: Option<P>,
success: Ordering,
failure: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
Stores a value into the pointer if the current value is the same as the
current
value.
The return value is a result indicating whether the new value was
written and containing the previous value. On success this value is
guaranteed to be equal to current
.
compare_exchange
takes two Ordering
arguments to describe the
memory ordering of this operation. The first describes the required
ordering if the operation succeeds while the second describes the
required ordering when the operation fails. The failure ordering can’t
be Release
or AcqRel
and must be equivalent or weaker than the
success ordering.
sourcepub fn compare_exchange_weak(
&self,
current: Option<&P>,
new: Option<P>,
success: Ordering,
failure: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
pub fn compare_exchange_weak(
&self,
current: Option<&P>,
new: Option<P>,
success: Ordering,
failure: Ordering
) -> Result<Option<P>, (Option<P>, *mut P)>
Stores a value into the pointer if the current value is the same as the
current
value.
Unlike compare_exchange
, this function is allowed to spuriously fail
even when the comparison succeeds, which can result in more efficient
code on some platforms. The return value is a result indicating whether
the new value was written and containing the previous value.
compare_exchange_weak
takes two Ordering
arguments to describe the
memory ordering of this operation. The first describes the required
ordering if the operation succeeds while the second describes the
required ordering when the operation fails. The failure ordering can’t
be Release
or AcqRel
and must be equivalent or weaker than the
success ordering.
Trait Implementations
sourceimpl<P> Debug for Atom<P> where
P: IntoRawPtr + FromRawPtr,
impl<P> Debug for Atom<P> where
P: IntoRawPtr + FromRawPtr,
sourceimpl<P> Drop for Atom<P> where
P: IntoRawPtr + FromRawPtr,
impl<P> Drop for Atom<P> where
P: IntoRawPtr + FromRawPtr,
impl<P> Send for Atom<P> where
P: IntoRawPtr + FromRawPtr + Send,
impl<P> Sync for Atom<P> where
P: IntoRawPtr + FromRawPtr + Send,
Auto Trait Implementations
impl<P> !RefUnwindSafe for Atom<P>
impl<P> Unpin for Atom<P> where
P: Unpin,
impl<P> UnwindSafe for Atom<P> where
P: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more