1+ use crate :: cmp:: Ordering ;
12use crate :: iter:: adapters:: zip:: try_get_unchecked;
23use crate :: iter:: adapters:: { SourceIter , TrustedRandomAccess , TrustedRandomAccessNoCoerce } ;
34use crate :: iter:: { FusedIterator , InPlaceIterable , TrustedLen } ;
@@ -48,20 +49,35 @@ where
4849
4950 fn next_chunk < const N : usize > (
5051 & 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 > > {
5553 <I as SpecNextChunk < ' _ , N , T > >:: spec_next_chunk ( & mut self . it )
5654 }
5755
56+ #[ inline]
5857 fn size_hint ( & self ) -> ( usize , Option < usize > ) {
5958 self . it . size_hint ( )
6059 }
6160
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+
6279 fn try_fold < B , F , R > ( & mut self , init : B , f : F ) -> R
6380 where
64- Self : Sized ,
6581 F : FnMut ( B , Self :: Item ) -> R ,
6682 R : Try < Output = B > ,
6783 {
@@ -75,21 +91,56 @@ where
7591 self . it . fold ( init, copy_fold ( f) )
7692 }
7793
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 ( )
8099 }
81100
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 ( )
84106 }
85107
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 ( )
88113 }
89114
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) )
93144 }
94145
95146 unsafe fn __iterator_get_unchecked ( & mut self , idx : usize ) -> T
@@ -112,9 +163,13 @@ where
112163 self . it . next_back ( ) . copied ( )
113164 }
114165
166+ #[ inline]
167+ fn advance_back_by ( & mut self , n : usize ) -> Result < ( ) , NonZero < usize > > {
168+ self . it . advance_back_by ( n)
169+ }
170+
115171 fn try_rfold < B , F , R > ( & mut self , init : B , f : F ) -> R
116172 where
117- Self : Sized ,
118173 F : FnMut ( B , Self :: Item ) -> R ,
119174 R : Try < Output = B > ,
120175 {
@@ -128,9 +183,11 @@ where
128183 self . it . rfold ( init, copy_fold ( f) )
129184 }
130185
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 ( )
134191 }
135192}
136193
@@ -140,10 +197,12 @@ where
140197 I : ExactSizeIterator < Item = & ' a T > ,
141198 T : Copy ,
142199{
200+ #[ inline]
143201 fn len ( & self ) -> usize {
144202 self . it . len ( )
145203 }
146204
205+ #[ inline]
147206 fn is_empty ( & self ) -> bool {
148207 self . it . is_empty ( )
149208 }
0 commit comments