[−][src]Enum crossbeam_deque::Steal
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
EmptyThe queue was empty at the time of stealing.
Success(T)At least one task was successfully stolen.
RetryThe steal operation needs to be retried.
Methods
impl<T> Steal<T>[src]
pub fn is_empty(&self) -> bool[src]
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[src]
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());
pub fn is_retry(&self) -> bool[src]
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());
pub fn success(self) -> Option<T>[src]
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));
pub fn or_else<F>(self, f: F) -> Steal<T> where
F: FnOnce() -> Steal<T>, [src]
F: FnOnce() -> Steal<T>,
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
impl<T: PartialEq> PartialEq<Steal<T>> for Steal<T>[src]
impl<T: Clone> Clone for Steal<T>[src]
fn clone(&self) -> Steal<T>[src]
fn clone_from(&mut self, source: &Self)1.0.0[src]
Performs copy-assignment from source. Read more
impl<T: Eq> Eq for Steal<T>[src]
impl<T: Copy> Copy for Steal<T>[src]
impl<T> Debug for Steal<T>[src]
impl<T> FromIterator<Steal<T>> for Steal<T>[src]
fn from_iter<I>(iter: I) -> Steal<T> where
I: IntoIterator<Item = Steal<T>>, [src]
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.
Auto Trait Implementations
Blanket Implementations
impl<T> From for T[src]
impl<T, U> Into for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
impl<T, U> TryFrom for T where
T: From<U>, [src]
T: From<U>,
type Error = !
try_from)The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T> Borrow for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T, U> TryInto for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
try_from)The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,