Struct fragile::SemiSticky
source · [−]pub struct SemiSticky<T: 'static> { /* private fields */ }
Expand description
A SemiSticky<T>
keeps a value T stored in a thread if it has a drop.
This is a combined version of Fragile
and Sticky
. If the type
does not have a drop it will effectively be a Fragile
, otherwise it
will be internally behave like a Sticky
.
This type requires T: 'static
for the same reasons as Sticky
and
also uses StackToken
s.
Implementations
sourceimpl<T> SemiSticky<T>
impl<T> SemiSticky<T>
sourcepub fn new(value: T) -> Self
pub fn new(value: T) -> Self
Creates a new SemiSticky
wrapping a value
.
The value that is moved into the SemiSticky
can be non Send
and
will be anchored to the thread that created the object. If the
sticky wrapper type ends up being send from thread to thread
only the original thread can interact with the value. In case the
value does not have Drop
it will be stored in the SemiSticky
instead.
sourcepub fn is_valid(&self) -> bool
pub fn is_valid(&self) -> bool
Returns true
if the access is valid.
This will be false
if the value was sent to another thread.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes the SemiSticky
, returning the wrapped value.
Panics
Panics if called from a different thread than the one where the original value was created.
sourcepub fn try_into_inner(self) -> Result<T, Self>
pub fn try_into_inner(self) -> Result<T, Self>
Consumes the SemiSticky
, returning the wrapped value if successful.
The wrapped value is returned if this is called from the same thread
as the one where the original value was created, otherwise the
SemiSticky
is returned as Err(self)
.
sourcepub fn get<'stack>(&'stack self, _proof: &'stack StackToken) -> &'stack T
pub fn get<'stack>(&'stack self, _proof: &'stack StackToken) -> &'stack T
sourcepub fn get_mut<'stack>(
&'stack mut self,
_proof: &'stack StackToken
) -> &'stack mut T
pub fn get_mut<'stack>(
&'stack mut self,
_proof: &'stack StackToken
) -> &'stack mut T
Mutably borrows the wrapped value.
Panics
Panics if the calling thread is not the one that wrapped the value.
For a non-panicking variant, use try_get_mut
.
sourcepub fn try_get<'stack>(
&'stack self,
_proof: &'stack StackToken
) -> Result<&'stack T, InvalidThreadAccess>
pub fn try_get<'stack>(
&'stack self,
_proof: &'stack StackToken
) -> Result<&'stack T, InvalidThreadAccess>
Tries to immutably borrow the wrapped value.
Returns None
if the calling thread is not the one that wrapped the value.
sourcepub fn try_get_mut<'stack>(
&'stack mut self,
_proof: &'stack StackToken
) -> Result<&'stack mut T, InvalidThreadAccess>
pub fn try_get_mut<'stack>(
&'stack mut self,
_proof: &'stack StackToken
) -> Result<&'stack mut T, InvalidThreadAccess>
Tries to mutably borrow the wrapped value.
Returns None
if the calling thread is not the one that wrapped the value.
Trait Implementations
sourceimpl<T: Clone> Clone for SemiSticky<T>
impl<T: Clone> Clone for SemiSticky<T>
sourcefn clone(&self) -> SemiSticky<T>
fn clone(&self) -> SemiSticky<T>
1.0.0 · sourceconst fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl<T: Debug> Debug for SemiSticky<T>
impl<T: Debug> Debug for SemiSticky<T>
sourceimpl<T: Default> Default for SemiSticky<T>
impl<T: Default> Default for SemiSticky<T>
sourcefn default() -> SemiSticky<T>
fn default() -> SemiSticky<T>
sourceimpl<T: Display> Display for SemiSticky<T>
impl<T: Display> Display for SemiSticky<T>
sourceimpl<T> From<T> for SemiSticky<T>
impl<T> From<T> for SemiSticky<T>
sourcefn from(t: T) -> SemiSticky<T>
fn from(t: T) -> SemiSticky<T>
sourceimpl<T: Ord> Ord for SemiSticky<T>
impl<T: Ord> Ord for SemiSticky<T>
sourcefn cmp(&self, other: &SemiSticky<T>) -> Ordering
fn cmp(&self, other: &SemiSticky<T>) -> Ordering
1.21.0 · sourceconst fn max(self, other: Self) -> Self
const fn max(self, other: Self) -> Self
1.21.0 · sourceconst fn min(self, other: Self) -> Self
const fn min(self, other: Self) -> Self
1.50.0 · sourceconst fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
const fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
sourceimpl<T: PartialEq> PartialEq<SemiSticky<T>> for SemiSticky<T>
impl<T: PartialEq> PartialEq<SemiSticky<T>> for SemiSticky<T>
sourcefn eq(&self, other: &SemiSticky<T>) -> bool
fn eq(&self, other: &SemiSticky<T>) -> bool
sourceimpl<T: PartialOrd> PartialOrd<SemiSticky<T>> for SemiSticky<T>
impl<T: PartialOrd> PartialOrd<SemiSticky<T>> for SemiSticky<T>
sourcefn partial_cmp(&self, other: &SemiSticky<T>) -> Option<Ordering>
fn partial_cmp(&self, other: &SemiSticky<T>) -> Option<Ordering>
sourcefn lt(&self, other: &SemiSticky<T>) -> bool
fn lt(&self, other: &SemiSticky<T>) -> bool
sourcefn le(&self, other: &SemiSticky<T>) -> bool
fn le(&self, other: &SemiSticky<T>) -> bool
self
and other
) and is used by the <=
operator. Read moresourcefn gt(&self, other: &SemiSticky<T>) -> bool
fn gt(&self, other: &SemiSticky<T>) -> bool
sourcefn ge(&self, other: &SemiSticky<T>) -> bool
fn ge(&self, other: &SemiSticky<T>) -> bool
self
and other
) and is used by the >=
operator. Read more