@@ -2220,6 +2220,20 @@ impl<I: Iterator, F> Inspect<I, F> where F: FnMut(&I::Item) {
2220
2220
}
2221
2221
}
2222
2222
2223
+ fn inspect_fold < T , Acc > (
2224
+ mut f : impl FnMut ( & T ) ,
2225
+ mut fold : impl FnMut ( Acc , T ) -> Acc ,
2226
+ ) -> impl FnMut ( Acc , T ) -> Acc {
2227
+ move |acc, item| { f ( & item) ; fold ( acc, item) }
2228
+ }
2229
+
2230
+ fn inspect_try_fold < ' a , T , Acc , R > (
2231
+ f : & ' a mut impl FnMut ( & T ) ,
2232
+ mut fold : impl FnMut ( Acc , T ) -> R + ' a ,
2233
+ ) -> impl FnMut ( Acc , T ) -> R + ' a {
2234
+ move |acc, item| { f ( & item) ; fold ( acc, item) }
2235
+ }
2236
+
2223
2237
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2224
2238
impl < I : Iterator , F > Iterator for Inspect < I , F > where F : FnMut ( & I :: Item ) {
2225
2239
type Item = I :: Item ;
@@ -2236,19 +2250,17 @@ impl<I: Iterator, F> Iterator for Inspect<I, F> where F: FnMut(&I::Item) {
2236
2250
}
2237
2251
2238
2252
#[ inline]
2239
- fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , mut fold : Fold ) -> R where
2253
+ fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , fold : Fold ) -> R where
2240
2254
Self : Sized , Fold : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
2241
2255
{
2242
- let f = & mut self . f ;
2243
- self . iter . try_fold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2256
+ self . iter . try_fold ( init, inspect_try_fold ( & mut self . f , fold) )
2244
2257
}
2245
2258
2246
2259
#[ inline]
2247
- fn fold < Acc , Fold > ( self , init : Acc , mut fold : Fold ) -> Acc
2260
+ fn fold < Acc , Fold > ( self , init : Acc , fold : Fold ) -> Acc
2248
2261
where Fold : FnMut ( Acc , Self :: Item ) -> Acc ,
2249
2262
{
2250
- let mut f = self . f ;
2251
- self . iter . fold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2263
+ self . iter . fold ( init, inspect_fold ( self . f , fold) )
2252
2264
}
2253
2265
}
2254
2266
@@ -2263,19 +2275,17 @@ impl<I: DoubleEndedIterator, F> DoubleEndedIterator for Inspect<I, F>
2263
2275
}
2264
2276
2265
2277
#[ inline]
2266
- fn try_rfold < Acc , Fold , R > ( & mut self , init : Acc , mut fold : Fold ) -> R where
2278
+ fn try_rfold < Acc , Fold , R > ( & mut self , init : Acc , fold : Fold ) -> R where
2267
2279
Self : Sized , Fold : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
2268
2280
{
2269
- let f = & mut self . f ;
2270
- self . iter . try_rfold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2281
+ self . iter . try_rfold ( init, inspect_try_fold ( & mut self . f , fold) )
2271
2282
}
2272
2283
2273
2284
#[ inline]
2274
- fn rfold < Acc , Fold > ( self , init : Acc , mut fold : Fold ) -> Acc
2285
+ fn rfold < Acc , Fold > ( self , init : Acc , fold : Fold ) -> Acc
2275
2286
where Fold : FnMut ( Acc , Self :: Item ) -> Acc ,
2276
2287
{
2277
- let mut f = self . f ;
2278
- self . iter . rfold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2288
+ self . iter . rfold ( init, inspect_fold ( self . f , fold) )
2279
2289
}
2280
2290
}
2281
2291
0 commit comments