1
+ use crate :: cmp:: Ordering ;
1
2
use crate :: iter:: adapters:: zip:: try_get_unchecked;
2
3
use crate :: iter:: adapters:: { SourceIter , TrustedRandomAccess , TrustedRandomAccessNoCoerce } ;
3
4
use crate :: iter:: { FusedIterator , InPlaceIterable , TrustedLen } ;
@@ -48,20 +49,35 @@ where
48
49
49
50
fn next_chunk < const N : usize > (
50
51
& mut self ,
51
- ) -> Result < [ Self :: Item ; N ] , array:: IntoIter < Self :: Item , N > >
52
- where
53
- Self : Sized ,
54
- {
52
+ ) -> Result < [ Self :: Item ; N ] , array:: IntoIter < Self :: Item , N > > {
55
53
<I as SpecNextChunk < ' _ , N , T > >:: spec_next_chunk ( & mut self . it )
56
54
}
57
55
56
+ #[ inline]
58
57
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
59
58
self . it . size_hint ( )
60
59
}
61
60
61
+ #[ inline]
62
+ fn count ( self ) -> usize {
63
+ self . it . count ( )
64
+ }
65
+
66
+ fn last ( self ) -> Option < T > {
67
+ self . it . last ( ) . copied ( )
68
+ }
69
+
70
+ #[ inline]
71
+ fn advance_by ( & mut self , n : usize ) -> Result < ( ) , NonZero < usize > > {
72
+ self . it . advance_by ( n)
73
+ }
74
+
75
+ fn nth ( & mut self , n : usize ) -> Option < T > {
76
+ self . it . nth ( n) . copied ( )
77
+ }
78
+
62
79
fn try_fold < B , F , R > ( & mut self , init : B , f : F ) -> R
63
80
where
64
- Self : Sized ,
65
81
F : FnMut ( B , Self :: Item ) -> R ,
66
82
R : Try < Output = B > ,
67
83
{
@@ -75,21 +91,56 @@ where
75
91
self . it . fold ( init, copy_fold ( f) )
76
92
}
77
93
78
- fn nth ( & mut self , n : usize ) -> Option < T > {
79
- self . it . nth ( n) . copied ( )
94
+ fn find < P > ( & mut self , mut predicate : P ) -> Option < Self :: Item >
95
+ where
96
+ P : FnMut ( & Self :: Item ) -> bool ,
97
+ {
98
+ self . it . find ( move |x| predicate ( & x) ) . copied ( )
80
99
}
81
100
82
- fn last ( self ) -> Option < T > {
83
- self . it . last ( ) . copied ( )
101
+ fn max_by < F > ( self , mut compare : F ) -> Option < Self :: Item >
102
+ where
103
+ F : FnMut ( & Self :: Item , & Self :: Item ) -> Ordering ,
104
+ {
105
+ self . it . max_by ( move |& x, & y| compare ( x, y) ) . copied ( )
84
106
}
85
107
86
- fn count ( self ) -> usize {
87
- self . it . count ( )
108
+ fn min_by < F > ( self , mut compare : F ) -> Option < Self :: Item >
109
+ where
110
+ F : FnMut ( & Self :: Item , & Self :: Item ) -> Ordering ,
111
+ {
112
+ self . it . min_by ( move |& x, & y| compare ( x, y) ) . copied ( )
88
113
}
89
114
90
- #[ inline]
91
- fn advance_by ( & mut self , n : usize ) -> Result < ( ) , NonZero < usize > > {
92
- self . it . advance_by ( n)
115
+ fn cmp < O > ( self , other : O ) -> Ordering
116
+ where
117
+ O : IntoIterator < Item = Self :: Item > ,
118
+ Self :: Item : Ord ,
119
+ {
120
+ self . it . cmp_by ( other, |x, y| x. cmp ( & y) )
121
+ }
122
+
123
+ fn partial_cmp < O > ( self , other : O ) -> Option < Ordering >
124
+ where
125
+ O : IntoIterator ,
126
+ Self :: Item : PartialOrd < O :: Item > ,
127
+ {
128
+ self . it . partial_cmp_by ( other, |x, y| x. partial_cmp ( & y) )
129
+ }
130
+
131
+ fn eq < O > ( self , other : O ) -> bool
132
+ where
133
+ O : IntoIterator ,
134
+ Self :: Item : PartialEq < O :: Item > ,
135
+ {
136
+ self . it . eq_by ( other, |x, y| x == & y)
137
+ }
138
+
139
+ fn is_sorted_by < F > ( self , mut compare : F ) -> bool
140
+ where
141
+ F : FnMut ( & Self :: Item , & Self :: Item ) -> bool ,
142
+ {
143
+ self . it . is_sorted_by ( move |& x, & y| compare ( x, y) )
93
144
}
94
145
95
146
unsafe fn __iterator_get_unchecked ( & mut self , idx : usize ) -> T
@@ -112,9 +163,13 @@ where
112
163
self . it . next_back ( ) . copied ( )
113
164
}
114
165
166
+ #[ inline]
167
+ fn advance_back_by ( & mut self , n : usize ) -> Result < ( ) , NonZero < usize > > {
168
+ self . it . advance_back_by ( n)
169
+ }
170
+
115
171
fn try_rfold < B , F , R > ( & mut self , init : B , f : F ) -> R
116
172
where
117
- Self : Sized ,
118
173
F : FnMut ( B , Self :: Item ) -> R ,
119
174
R : Try < Output = B > ,
120
175
{
@@ -128,9 +183,11 @@ where
128
183
self . it . rfold ( init, copy_fold ( f) )
129
184
}
130
185
131
- #[ inline]
132
- fn advance_back_by ( & mut self , n : usize ) -> Result < ( ) , NonZero < usize > > {
133
- self . it . advance_back_by ( n)
186
+ fn rfind < P > ( & mut self , mut predicate : P ) -> Option < Self :: Item >
187
+ where
188
+ P : FnMut ( & Self :: Item ) -> bool ,
189
+ {
190
+ self . it . rfind ( move |x| predicate ( & x) ) . copied ( )
134
191
}
135
192
}
136
193
@@ -140,10 +197,12 @@ where
140
197
I : ExactSizeIterator < Item = & ' a T > ,
141
198
T : Copy ,
142
199
{
200
+ #[ inline]
143
201
fn len ( & self ) -> usize {
144
202
self . it . len ( )
145
203
}
146
204
205
+ #[ inline]
147
206
fn is_empty ( & self ) -> bool {
148
207
self . it . is_empty ( )
149
208
}
0 commit comments