#[must_use]
pub enum Steal<T> {
Empty,
Success(T),
Retry,
}
Possible outcomes of a steal operation.
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));
The queue was empty at the time of stealing.
At least one task was successfully stolen.
The steal operation needs to be retried.
Returns true if the queue was empty at the time of stealing.
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.
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.
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.
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, then Retry is returned.
- If both resulted in
None, then None is returned.
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>);
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=.
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
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.
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (try_from)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (try_from)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from)
🔬 This is a nightly-only experimental API. (get_type_id)
this method will likely be replaced by an associated static