Sha256: fcebffc374dcdd206d13311dcc2e7d7a04da5687658b2f3ec3409f03ed12774b
Contents?: true
Size: 1.62 KB
Versions: 38
Compression:
Stored size: 1.62 KB
Contents
use crate::iter::plumbing::*; use crate::iter::*; /// Creates a parallel iterator that produces an element exactly once. /// /// This admits no parallelism on its own, but it could be chained to existing /// parallel iterators to extend their contents, or otherwise used for any code /// that deals with generic parallel iterators. /// /// # Examples /// /// ``` /// use rayon::prelude::*; /// use rayon::iter::once; /// /// let pi = (0..1234).into_par_iter() /// .chain(once(-1)) /// .chain(1234..10_000); /// /// assert_eq!(pi.clone().count(), 10_001); /// assert_eq!(pi.clone().filter(|&x| x < 0).count(), 1); /// assert_eq!(pi.position_any(|x| x < 0), Some(1234)); /// ``` pub fn once<T: Send>(item: T) -> Once<T> { Once { item } } /// Iterator adaptor for [the `once()` function](fn.once.html). #[derive(Clone, Debug)] pub struct Once<T: Send> { item: T, } impl<T: Send> ParallelIterator for Once<T> { type Item = T; fn drive_unindexed<C>(self, consumer: C) -> C::Result where C: UnindexedConsumer<Self::Item>, { self.drive(consumer) } fn opt_len(&self) -> Option<usize> { Some(1) } } impl<T: Send> IndexedParallelIterator for Once<T> { fn drive<C>(self, consumer: C) -> C::Result where C: Consumer<Self::Item>, { consumer.into_folder().consume(self.item).complete() } fn len(&self) -> usize { 1 } fn with_producer<CB>(self, callback: CB) -> CB::Output where CB: ProducerCallback<Self::Item>, { // Let `OptionProducer` handle it. Some(self.item).into_par_iter().with_producer(callback) } }
Version data entries
38 entries across 38 versions & 1 rubygems