Enum crossbeam::deque::Steal [−][src]
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
Empty
The queue was empty at the time of stealing.
Success(T)
At least one task was successfully stolen.
Retry
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, thenRetryis returned. - If both resulted in
None, thenNoneis 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
