Enum heron::rapier_plugin::rapier2d::crossbeam::deque::Steal [−]
pub enum Steal<T> {
Empty,
Success(T),
Retry,
}
Expand description
Possible outcomes of a steal operation.
Examples
There are lots of ways to chain results of steal operations together:
use crossbeam_deque::Steal::{self, Empty, Retry, Success};
let collect = |v: Vec<Steal<i32>>| v.into_iter().collect::<Steal<i32>>();
assert_eq!(collect(vec![Empty, Empty, Empty]), Empty);
assert_eq!(collect(vec![Empty, Retry, Empty]), Retry);
assert_eq!(collect(vec![Retry, Success(1), Empty]), Success(1));
assert_eq!(collect(vec![Empty, Empty]).or_else(|| Retry), Retry);
assert_eq!(collect(vec![Retry, Empty]).or_else(|| Success(1)), Success(1));
Variants
The queue was empty at the time of stealing.
At least one task was successfully stolen.
The steal operation needs to be retried.
Implementations
impl<T> Steal<T>
impl<T> Steal<T>
Returns true
if the queue was empty at the time of stealing.
Examples
use crossbeam_deque::Steal::{Empty, Retry, Success};
assert!(!Success(7).is_empty());
assert!(!Retry::<i32>.is_empty());
assert!(Empty::<i32>.is_empty());
pub fn is_success(&self) -> bool
pub fn is_success(&self) -> bool
Returns true
if at least one task was stolen.
Examples
use crossbeam_deque::Steal::{Empty, Retry, Success};
assert!(!Empty::<i32>.is_success());
assert!(!Retry::<i32>.is_success());
assert!(Success(7).is_success());
Returns true
if the steal operation needs to be retried.
Examples
use crossbeam_deque::Steal::{Empty, Retry, Success};
assert!(!Empty::<i32>.is_retry());
assert!(!Success(7).is_retry());
assert!(Retry::<i32>.is_retry());
Returns the result of the operation, if successful.
Examples
use crossbeam_deque::Steal::{Empty, Retry, Success};
assert_eq!(Empty::<i32>.success(), None);
assert_eq!(Retry::<i32>.success(), None);
assert_eq!(Success(7).success(), Some(7));
If no task was stolen, attempts another steal operation.
Returns this steal result if it is Success
. Otherwise, closure f
is invoked and then:
- If the second steal resulted in
Success
, it is returned. - If both steals were unsuccessful but any resulted in
Retry
, thenRetry
is returned. - If both resulted in
None
, thenNone
is returned.
Examples
use crossbeam_deque::Steal::{Empty, Retry, Success};
assert_eq!(Success(1).or_else(|| Success(2)), Success(1));
assert_eq!(Retry.or_else(|| Success(2)), Success(2));
assert_eq!(Retry.or_else(|| Empty), Retry::<i32>);
assert_eq!(Empty.or_else(|| Retry), Retry::<i32>);
assert_eq!(Empty.or_else(|| Empty), Empty::<i32>);
Trait Implementations
impl<T> FromIterator<Steal<T>> for Steal<T>
impl<T> FromIterator<Steal<T>> for Steal<T>
pub fn from_iter<I>(iter: I) -> Steal<T> where
I: IntoIterator<Item = Steal<T>>,
pub fn from_iter<I>(iter: I) -> Steal<T> where
I: IntoIterator<Item = Steal<T>>,
Consumes items until a Success
is found and returns it.
If no Success
was found, but there was at least one Retry
, then returns Retry
.
Otherwise, Empty
is returned.
impl<T> StructuralEq for Steal<T>
impl<T> StructuralPartialEq for Steal<T>
Auto Trait Implementations
impl<T> RefUnwindSafe for Steal<T> where
T: RefUnwindSafe,
impl<T> UnwindSafe for Steal<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
impl<T> Pointable for T
impl<T> Pointable for T
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
pub fn clone_type_data(&self) -> Box<dyn TypeData + 'static, Global>
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more