Coverage Report

Created: 2025-11-05 08:08

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/enumerate.rs
Line
Count
Source
1
use super::plumbing::*;
2
use super::*;
3
use std::iter;
4
use std::ops::Range;
5
6
/// `Enumerate` is an iterator that returns the current count along with the element.
7
/// This struct is created by the [`enumerate()`] method on [`IndexedParallelIterator`]
8
///
9
/// [`enumerate()`]: IndexedParallelIterator::enumerate()
10
#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
11
#[derive(Debug, Clone)]
12
pub struct Enumerate<I> {
13
    base: I,
14
}
15
16
impl<I> Enumerate<I> {
17
    /// Creates a new `Enumerate` iterator.
18
0
    pub(super) fn new(base: I) -> Self {
19
0
        Enumerate { base }
20
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u16>>>>::new
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u8>>>>::new
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<_>>::new
21
}
22
23
impl<I> ParallelIterator for Enumerate<I>
24
where
25
    I: IndexedParallelIterator,
26
{
27
    type Item = (usize, I::Item);
28
29
0
    fn drive_unindexed<C>(self, consumer: C) -> C::Result
30
0
    where
31
0
        C: UnindexedConsumer<Self::Item>,
32
    {
33
0
        bridge(self, consumer)
34
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::ParallelIterator>::drive_unindexed::<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u16>::{closure#0}>>
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::ParallelIterator>::drive_unindexed::<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u8>::{closure#0}>>
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<_> as rayon::iter::ParallelIterator>::drive_unindexed::<_>
35
36
0
    fn opt_len(&self) -> Option<usize> {
37
0
        Some(self.len())
38
0
    }
39
}
40
41
impl<I> IndexedParallelIterator for Enumerate<I>
42
where
43
    I: IndexedParallelIterator,
44
{
45
0
    fn drive<C: Consumer<Self::Item>>(self, consumer: C) -> C::Result {
46
0
        bridge(self, consumer)
47
0
    }
48
49
0
    fn len(&self) -> usize {
50
0
        self.base.len()
51
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::IndexedParallelIterator>::len
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::IndexedParallelIterator>::len
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<_> as rayon::iter::IndexedParallelIterator>::len
52
53
0
    fn with_producer<CB>(self, callback: CB) -> CB::Output
54
0
    where
55
0
        CB: ProducerCallback<Self::Item>,
56
    {
57
0
        return self.base.with_producer(Callback { callback });
58
59
        struct Callback<CB> {
60
            callback: CB,
61
        }
62
63
        impl<I, CB> ProducerCallback<I> for Callback<CB>
64
        where
65
            CB: ProducerCallback<(usize, I)>,
66
        {
67
            type Output = CB::Output;
68
0
            fn callback<P>(self, base: P) -> CB::Output
69
0
            where
70
0
                P: Producer<Item = I>,
71
            {
72
0
                let producer = EnumerateProducer { base, offset: 0 };
73
0
                self.callback.callback(producer)
74
0
            }
Unexecuted instantiation: <<rayon::iter::enumerate::Enumerate<_> as rayon::iter::IndexedParallelIterator>::with_producer::Callback<rayon::iter::plumbing::bridge::Callback<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u16>::{closure#0}>>> as rayon::iter::plumbing::ProducerCallback<&mut rav1e::tiling::plane_region::PlaneRegionMut<u16>>>::callback::<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u16>>>
Unexecuted instantiation: <<rayon::iter::enumerate::Enumerate<_> as rayon::iter::IndexedParallelIterator>::with_producer::Callback<rayon::iter::plumbing::bridge::Callback<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u8>::{closure#0}>>> as rayon::iter::plumbing::ProducerCallback<&mut rav1e::tiling::plane_region::PlaneRegionMut<u8>>>::callback::<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u8>>>
Unexecuted instantiation: <<rayon::iter::enumerate::Enumerate<_> as rayon::iter::IndexedParallelIterator>::with_producer::Callback<_> as rayon::iter::plumbing::ProducerCallback<_>>::callback::<_>
75
        }
76
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::IndexedParallelIterator>::with_producer::<rayon::iter::plumbing::bridge::Callback<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u16>::{closure#0}>>>
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<rayon::slice::IterMut<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::IndexedParallelIterator>::with_producer::<rayon::iter::plumbing::bridge::Callback<rayon::iter::for_each::ForEachConsumer<rav1e::deblock::deblock_filter_frame<u8>::{closure#0}>>>
Unexecuted instantiation: <rayon::iter::enumerate::Enumerate<_> as rayon::iter::IndexedParallelIterator>::with_producer::<_>
77
}
78
79
// ////////////////////////////////////////////////////////////////////////
80
// Producer implementation
81
82
struct EnumerateProducer<P> {
83
    base: P,
84
    offset: usize,
85
}
86
87
impl<P> Producer for EnumerateProducer<P>
88
where
89
    P: Producer,
90
{
91
    type Item = (usize, P::Item);
92
    type IntoIter = iter::Zip<Range<usize>, P::IntoIter>;
93
94
0
    fn into_iter(self) -> Self::IntoIter {
95
        // Enumerate only works for IndexedParallelIterators. Since those
96
        // have a max length of usize::MAX, their max index is
97
        // usize::MAX - 1, so the range 0..usize::MAX includes all
98
        // possible indices.
99
        //
100
        // However, we should to use a precise end to the range, otherwise
101
        // reversing the iterator may have to walk back a long ways before
102
        // `Zip::next_back` can produce anything.
103
0
        let base = self.base.into_iter();
104
0
        let end = self.offset + base.len();
105
0
        (self.offset..end).zip(base)
106
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::plumbing::Producer>::into_iter
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::plumbing::Producer>::into_iter
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<_> as rayon::iter::plumbing::Producer>::into_iter
107
108
0
    fn min_len(&self) -> usize {
109
0
        self.base.min_len()
110
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::plumbing::Producer>::min_len
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::plumbing::Producer>::min_len
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<_> as rayon::iter::plumbing::Producer>::min_len
111
0
    fn max_len(&self) -> usize {
112
0
        self.base.max_len()
113
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::plumbing::Producer>::max_len
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::plumbing::Producer>::max_len
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<_> as rayon::iter::plumbing::Producer>::max_len
114
115
0
    fn split_at(self, index: usize) -> (Self, Self) {
116
0
        let (left, right) = self.base.split_at(index);
117
0
        (
118
0
            EnumerateProducer {
119
0
                base: left,
120
0
                offset: self.offset,
121
0
            },
122
0
            EnumerateProducer {
123
0
                base: right,
124
0
                offset: self.offset + index,
125
0
            },
126
0
        )
127
0
    }
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u16>>> as rayon::iter::plumbing::Producer>::split_at
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<rayon::slice::IterMutProducer<rav1e::tiling::plane_region::PlaneRegionMut<u8>>> as rayon::iter::plumbing::Producer>::split_at
Unexecuted instantiation: <rayon::iter::enumerate::EnumerateProducer<_> as rayon::iter::plumbing::Producer>::split_at
128
}