1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use std::slice::Iter;
pub unsafe trait TrustedLen: Iterator {}
unsafe impl<T> TrustedLen for Iter<'_, T> {}
unsafe impl<B, I: TrustedLen, T: FnMut(I::Item) -> B> TrustedLen for std::iter::Map<I, T> {}
unsafe impl<'a, I, T: 'a> TrustedLen for std::iter::Copied<I>
where
I: TrustedLen<Item = &'a T>,
T: Copy,
{
}
unsafe impl<'a, I, T: 'a> TrustedLen for std::iter::Cloned<I>
where
I: TrustedLen<Item = &'a T>,
T: Clone,
{
}
unsafe impl<I> TrustedLen for std::iter::Enumerate<I> where I: TrustedLen {}
unsafe impl<A, B> TrustedLen for std::iter::Zip<A, B>
where
A: TrustedLen,
B: TrustedLen,
{
}
unsafe impl<T> TrustedLen for std::slice::ChunksExact<'_, T> {}
unsafe impl<T> TrustedLen for std::slice::Windows<'_, T> {}
unsafe impl<A, B> TrustedLen for std::iter::Chain<A, B>
where
A: TrustedLen,
B: TrustedLen<Item = A::Item>,
{
}
unsafe impl<T> TrustedLen for std::iter::Once<T> {}
unsafe impl<T> TrustedLen for std::vec::IntoIter<T> {}
unsafe impl<A: Clone> TrustedLen for std::iter::Repeat<A> {}
unsafe impl<A, F: FnMut() -> A> TrustedLen for std::iter::RepeatWith<F> {}
unsafe impl<A: TrustedLen> TrustedLen for std::iter::Take<A> {}