Trait dpc_pariter::IteratorExt
source · [−]pub trait IteratorExt {
Show 16 methods
fn parallel_map<F, O>(self, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(Self::Item) -> O,
O: Send + 'static,
{ ... }
fn parallel_map_custom<F, O, OF>(self, of: OF, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
F: FnMut(Self::Item) -> O,
Self::Item: Send + 'static,
O: Send + 'static,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
{ ... }
fn parallel_map_scoped<'env, 'scope, F, O>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
{ ... }
fn parallel_map_scoped_custom<'env, 'scope, F, O, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
{ ... }
fn parallel_filter<F>(self, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
{ ... }
fn parallel_filter_custom<F, OF>(self, of: OF, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
{ ... }
fn parallel_filter_scoped<'env, 'scope, F>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
{ ... }
fn parallel_filter_scoped_custom<'env, 'scope, F, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
{ ... }
fn readahead(self) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Iterator + Send + 'static,
Self: Sized,
Self::Item: Send + 'static,
{ ... }
fn readahead_custom<OF>(self, of: OF) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Iterator,
Self: Sized + Send + 'static,
Self::Item: Send + 'static,
OF: FnOnce(ReadaheadBuilder<Self>) -> ReadaheadBuilder<Self>,
{ ... }
fn readahead_scoped<'env, 'scope>(
self,
scope: &'scope Scope<'env>
) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
{ ... }
fn readahead_scoped_custom<'env, 'scope, OF>(
self,
scope: &'scope Scope<'env>,
of: OF
) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
OF: FnOnce(ReadaheadBuilder<Self>) -> ReadaheadBuilder<Self>,
{ ... }
fn profile_egress<P: Profiler>(self, profiler: P) -> ProfileEgress<Self, P>ⓘNotable traits for ProfileEgress<I, P>impl<I, P> Iterator for ProfileEgress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
{ ... }
fn profile_ingress<P: Profiler>(
self,
profiler: P
) -> ProfileIngress<Self, P>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
{ ... }
fn readahead_profiled<TxP: Profiler, RxP: Profiler>(
self,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
Self: Send + 'static,
Self::Item: Send + 'static,
TxP: Send + 'static,
{ ... }
fn readahead_scoped_profiled<'env, 'scope, TxP: Profiler, RxP: Profiler>(
self,
scope: &'scope Scope<'env>,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
TxP: Send + 'static,
{ ... }
}
Expand description
Extension trait for std::iter::Iterator
bringing parallel operations
TODO
parallel_for_each
parallel_flat_map
- possibly others
PRs welcome
Provided methods
fn parallel_map<F, O>(self, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(Self::Item) -> O,
O: Send + 'static,
fn parallel_map<F, O>(self, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(Self::Item) -> O,
O: Send + 'static,
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
Run map
function in parallel on multiple threads
Results will be returned in order.
No items will be pulled until first time ParallelMap
is pulled for elements with ParallelMap::next
.
In that respect, ParallelMap
behaves like every other iterator and is lazy.
fn parallel_map_custom<F, O, OF>(self, of: OF, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
F: FnMut(Self::Item) -> O,
Self::Item: Send + 'static,
O: Send + 'static,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
fn parallel_map_custom<F, O, OF>(self, of: OF, f: F) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
F: FnMut(Self::Item) -> O,
Self::Item: Send + 'static,
O: Send + 'static,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
fn parallel_map_scoped<'env, 'scope, F, O>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
fn parallel_map_scoped<'env, 'scope, F, O>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
A version of [parallel_map
] supporting iterating over
borrowed values.
fn parallel_map_scoped_custom<'env, 'scope, F, O, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
fn parallel_map_scoped_custom<'env, 'scope, F, O, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelMap<Self, O>ⓘNotable traits for ParallelMap<I, O>impl<I, O> Iterator for ParallelMap<I, O> where
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(Self::Item) -> O,
O: Send + 'env,
OF: FnOnce(ParallelMapBuilder<Self>) -> ParallelMapBuilder<Self>,
I: Iterator,
I::Item: Send,
O: Send, type Item = O;
fn parallel_filter<F>(self, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
fn parallel_filter<F>(self, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
I: Iterator,
I::Item: Send, type Item = I::Item;
Run filter
function in parallel on multiple threads
A wrapper around IteratorExt::parallel_map
really, so it has similiar properties.
fn parallel_filter_custom<F, OF>(self, of: OF, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
fn parallel_filter_custom<F, OF>(self, of: OF, f: F) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'static,
F: 'static + Send + Clone,
Self::Item: Send + 'static,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
I: Iterator,
I::Item: Send, type Item = I::Item;
fn parallel_filter_scoped<'env, 'scope, F>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
fn parallel_filter_scoped<'env, 'scope, F>(
self,
scope: &'scope Scope<'env>,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
I: Iterator,
I::Item: Send, type Item = I::Item;
fn parallel_filter_scoped_custom<'env, 'scope, F, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
fn parallel_filter_scoped_custom<'env, 'scope, F, OF>(
self,
scope: &'scope Scope<'env>,
of: OF,
f: F
) -> ParallelFilter<Self>ⓘNotable traits for ParallelFilter<I>impl<I> Iterator for ParallelFilter<I> where
I: Iterator,
I::Item: Send, type Item = I::Item;
where
Self: Sized,
Self: Iterator + 'env,
F: 'env + Send + Clone,
Self::Item: Send + 'env,
F: FnMut(&Self::Item) -> bool,
OF: FnOnce(ParallelFilterBuilder<Self>) -> ParallelFilterBuilder<Self>,
I: Iterator,
I::Item: Send, type Item = I::Item;
Run the current iterator in another thread and return elements through a buffered channel.
buffer_size
defines the size of the output channel connecting
current and the inner thread.
It’s a common mistake to use large channel sizes needlessly
in hopes of achieving higher performance. The only benefit
large buffer size value provides is smooting out the variance
of the inner iterator returning items. The cost - wasting memory.
In normal circumstances 0
is recommended (the default).
fn readahead_custom<OF>(self, of: OF) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Iterator,
Self: Sized + Send + 'static,
Self::Item: Send + 'static,
OF: FnOnce(ReadaheadBuilder<Self>) -> ReadaheadBuilder<Self>,
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
fn readahead_scoped<'env, 'scope>(
self,
scope: &'scope Scope<'env>
) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
fn readahead_scoped<'env, 'scope>(
self,
scope: &'scope Scope<'env>
) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
Scoped version of IteratorExt::readahead
Use when you want to process in parallel items that contain borrowed references.
See scope
.
fn readahead_scoped_custom<'env, 'scope, OF>(
self,
scope: &'scope Scope<'env>,
of: OF
) -> Readahead<Self>ⓘNotable traits for Readahead<I>impl<I> Iterator for Readahead<I> where
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
OF: FnOnce(ReadaheadBuilder<Self>) -> ReadaheadBuilder<Self>,
I: Iterator,
I: Send,
I::Item: Send, type Item = I::Item;
fn profile_egress<P: Profiler>(self, profiler: P) -> ProfileEgress<Self, P>ⓘNotable traits for ProfileEgress<I, P>impl<I, P> Iterator for ProfileEgress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
fn profile_egress<P: Profiler>(self, profiler: P) -> ProfileEgress<Self, P>ⓘNotable traits for ProfileEgress<I, P>impl<I, P> Iterator for ProfileEgress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
I: Iterator,
P: Profiler, type Item = I::Item;
Profile the time it takes downstream iterator step to consume the returned items.
See ProfileEgress
and profile::Profiler
.
fn profile_ingress<P: Profiler>(self, profiler: P) -> ProfileIngress<Self, P>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
fn profile_ingress<P: Profiler>(self, profiler: P) -> ProfileIngress<Self, P>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
I: Iterator,
P: Profiler, type Item = I::Item;
Profile the time it takes upstream iterator step to produce the returned items.
See ProfileIngress
and profile::Profiler
.
fn readahead_profiled<TxP: Profiler, RxP: Profiler>(
self,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
Self: Send + 'static,
Self::Item: Send + 'static,
TxP: Send + 'static,
fn readahead_profiled<TxP: Profiler, RxP: Profiler>(
self,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Iterator,
Self: Sized,
Self: Send + 'static,
Self::Item: Send + 'static,
TxP: Send + 'static,
I: Iterator,
P: Profiler, type Item = I::Item;
Profiled version of IteratorExt::readahead
Literally .profile_egress(tx_profiler).readahead(n).profile_ingress(rx_profiler)
See Profiler
for more info.
fn readahead_scoped_profiled<'env, 'scope, TxP: Profiler, RxP: Profiler>(
self,
scope: &'scope Scope<'env>,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
TxP: Send + 'static,
fn readahead_scoped_profiled<'env, 'scope, TxP: Profiler, RxP: Profiler>(
self,
scope: &'scope Scope<'env>,
tx_profiler: TxP,
rx_profiler: RxP
) -> ProfileIngress<Readahead<ProfileEgress<Self, TxP>>, RxP>ⓘNotable traits for ProfileIngress<I, P>impl<I, P> Iterator for ProfileIngress<I, P> where
I: Iterator,
P: Profiler, type Item = I::Item;
where
Self: Sized + Send,
Self: Iterator + 'scope + 'env,
Self::Item: Send + 'env + 'scope,
TxP: Send + 'static,
I: Iterator,
P: Profiler, type Item = I::Item;
Profiled version of IteratorExt::readahead_scoped
Literally .profile_egress(tx_profiler).readahead_scoped(scope, n).profile_ingress(rx_profiler)
See Profiler
for more info.