Coverage Report

Created: 2026-03-31 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.11.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].
29
///
30
/// [the `once()` function]: once()
31
#[derive(Clone, Debug)]
32
pub struct Once<T> {
33
    item: T,
34
}
35
36
impl<T: Send> ParallelIterator for Once<T> {
37
    type Item = T;
38
39
0
    fn drive_unindexed<C>(self, consumer: C) -> C::Result
40
0
    where
41
0
        C: UnindexedConsumer<Self::Item>,
42
    {
43
0
        self.drive(consumer)
44
0
    }
45
46
0
    fn opt_len(&self) -> Option<usize> {
47
0
        Some(1)
48
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
49
}
50
51
impl<T: Send> IndexedParallelIterator for Once<T> {
52
0
    fn drive<C>(self, consumer: C) -> C::Result
53
0
    where
54
0
        C: Consumer<Self::Item>,
55
    {
56
0
        consumer.into_folder().consume(self.item).complete()
57
0
    }
58
59
0
    fn len(&self) -> usize {
60
0
        1
61
0
    }
62
63
0
    fn with_producer<CB>(self, callback: CB) -> CB::Output
64
0
    where
65
0
        CB: ProducerCallback<Self::Item>,
66
    {
67
        // Let `OptionProducer` handle it.
68
0
        Some(self.item).into_par_iter().with_producer(callback)
69
0
    }
70
}