Struct rayon::vec::DrainProducer

source ·
pub(crate) struct DrainProducer<'data, T: Send> {
    slice: &'data mut [T],
}
Expand description

////////////////////////////////////////////////////////////////////////

Fields§

§slice: &'data mut [T]

Implementations§

source§

impl<T: Send> DrainProducer<'_, T>

source

pub(crate) unsafe fn new(slice: &mut [T]) -> DrainProducer<'_, T>

Creates a draining producer, which moves items from the slice.

Unsafe because !Copy data must not be read after the borrow is released.

source

unsafe fn from_vec(vec: &mut Vec<T>, len: usize) -> DrainProducer<'_, T>

Creates a draining producer, which moves items from the tail of the vector.

Unsafe because we’re moving from beyond vec.len(), so the caller must ensure that data is initialized and not read after the borrow is released.

Trait Implementations§

source§

impl<'data, T: 'data + Send> Drop for DrainProducer<'data, T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<'data, T: 'data + Send> Producer for DrainProducer<'data, T>

source§

type Item = T

The type of item that will be produced by this producer once it is converted into an iterator.
source§

type IntoIter = SliceDrain<'data, T>

The type of iterator we will become.
source§

fn into_iter(self) -> Self::IntoIter

Convert self into an iterator; at this point, no more parallel splits are possible.
source§

fn split_at(self, index: usize) -> (Self, Self)

Split into two producers; one produces items 0..index, the other index..N. Index must be less than or equal to N.
source§

fn min_len(&self) -> usize

The minimum number of items that we will process sequentially. Defaults to 1, which means that we will split all the way down to a single item. This can be raised higher using the with_min_len method, which will force us to create sequential tasks at a larger granularity. Note that Rayon automatically normally attempts to adjust the size of parallel splits to reduce overhead, so this should not be needed.
source§

fn max_len(&self) -> usize

The maximum number of items that we will process sequentially. Defaults to MAX, which means that we can choose not to split at all. This can be lowered using the with_max_len method, which will force us to create more parallel tasks. Note that Rayon automatically normally attempts to adjust the size of parallel splits to reduce overhead, so this should not be needed.
source§

fn fold_with<F>(self, folder: F) -> F
where F: Folder<Self::Item>,

Iterate the producer, feeding each element to folder, and stop when the folder is full (or all elements have been consumed). Read more

Auto Trait Implementations§

§

impl<'data, T> Freeze for DrainProducer<'data, T>

§

impl<'data, T> RefUnwindSafe for DrainProducer<'data, T>
where T: RefUnwindSafe,

§

impl<'data, T> Send for DrainProducer<'data, T>

§

impl<'data, T> Sync for DrainProducer<'data, T>
where T: Sync,

§

impl<'data, T> Unpin for DrainProducer<'data, T>

§

impl<'data, T> !UnwindSafe for DrainProducer<'data, T>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.