Coverage Report

Created: 2025-10-29 07:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/once.rs
Line
Count
Source
1
use crate::iter::plumbing::*;
2
use crate::iter::*;
3
4
/// Creates a parallel iterator that produces an element exactly once.
5
///
6
/// This admits no parallelism on its own, but it could be chained to existing
7
/// parallel iterators to extend their contents, or otherwise used for any code
8
/// that deals with generic parallel iterators.
9
///
10
/// # Examples
11
///
12
/// ```
13
/// use rayon::prelude::*;
14
/// use rayon::iter::once;
15
///
16
/// let pi = (0..1234).into_par_iter()
17
///     .chain(once(-1))
18
///     .chain(1234..10_000);
19
///
20
/// assert_eq!(pi.clone().count(), 10_001);
21
/// assert_eq!(pi.clone().filter(|&x| x < 0).count(), 1);
22
/// assert_eq!(pi.position_any(|x| x < 0), Some(1234));
23
/// ```
24
0
pub fn once<T: Send>(item: T) -> Once<T> {
25
0
    Once { item }
26
0
}
Unexecuted instantiation: rayon::iter::once::once::<i8>
Unexecuted instantiation: rayon::iter::once::once::<u8>
Unexecuted instantiation: rayon::iter::once::once::<isize>
Unexecuted instantiation: rayon::iter::once::once::<usize>
Unexecuted instantiation: rayon::iter::once::once::<i32>
Unexecuted instantiation: rayon::iter::once::once::<u32>
Unexecuted instantiation: rayon::iter::once::once::<i128>
Unexecuted instantiation: rayon::iter::once::once::<u128>
Unexecuted instantiation: rayon::iter::once::once::<i16>
Unexecuted instantiation: rayon::iter::once::once::<u16>
Unexecuted instantiation: rayon::iter::once::once::<i64>
Unexecuted instantiation: rayon::iter::once::once::<u64>
27
28
/// Iterator adaptor for [the `once()` function](fn.once.html).
29
#[derive(Clone, Debug)]
30
pub struct Once<T: Send> {
31
    item: T,
32
}
33
34
impl<T: Send> ParallelIterator for Once<T> {
35
    type Item = T;
36
37
0
    fn drive_unindexed<C>(self, consumer: C) -> C::Result
38
0
    where
39
0
        C: UnindexedConsumer<Self::Item>,
40
    {
41
0
        self.drive(consumer)
42
0
    }
43
44
0
    fn opt_len(&self) -> Option<usize> {
45
0
        Some(1)
46
0
    }
Unexecuted instantiation: <rayon::iter::once::Once<i8> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<u8> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<isize> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<usize> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<i32> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<u32> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<i128> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<u128> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<i16> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<u16> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<i64> as rayon::iter::ParallelIterator>::opt_len
Unexecuted instantiation: <rayon::iter::once::Once<u64> as rayon::iter::ParallelIterator>::opt_len
47
}
48
49
impl<T: Send> IndexedParallelIterator for Once<T> {
50
0
    fn drive<C>(self, consumer: C) -> C::Result
51
0
    where
52
0
        C: Consumer<Self::Item>,
53
    {
54
0
        consumer.into_folder().consume(self.item).complete()
55
0
    }
56
57
0
    fn len(&self) -> usize {
58
0
        1
59
0
    }
60
61
0
    fn with_producer<CB>(self, callback: CB) -> CB::Output
62
0
    where
63
0
        CB: ProducerCallback<Self::Item>,
64
    {
65
        // Let `OptionProducer` handle it.
66
0
        Some(self.item).into_par_iter().with_producer(callback)
67
0
    }
68
}