Enum crossbeam_deque::Steal [−][src]
#[must_use] 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
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());
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
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.
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