[−][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
The queue was empty at the time of stealing.
At least one task was successfully stolen.
The 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
, 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> Debug for Steal<T>
[src]
impl<T> Clone for Steal<T> where
T: Clone,
[src]
T: Clone,
impl<T> Eq for Steal<T> where
T: Eq,
[src]
T: Eq,
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.
impl<T> Copy for Steal<T> where
T: Copy,
[src]
T: Copy,
impl<T> PartialEq<Steal<T>> for Steal<T> where
T: PartialEq<T>,
[src]
T: PartialEq<T>,
Auto Trait Implementations
impl<T> Send for Steal<T> where
T: Send,
T: Send,
impl<T> Unpin for Steal<T> where
T: Unpin,
T: Unpin,
impl<T> Sync for Steal<T> where
T: Sync,
T: Sync,
impl<T> UnwindSafe for Steal<T> where
T: UnwindSafe,
T: UnwindSafe,
impl<T> RefUnwindSafe for Steal<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
Blanket Implementations
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
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, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
ⓘImportant traits for &'_ mut Wfn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,