@@ -2103,6 +2103,20 @@ impl<I: Iterator, F> Inspect<I, F> where F: FnMut(&I::Item) {
2103
2103
}
2104
2104
}
2105
2105
2106
+ fn inspect_fold < T , Acc > (
2107
+ mut f : impl FnMut ( & T ) ,
2108
+ mut fold : impl FnMut ( Acc , T ) -> Acc ,
2109
+ ) -> impl FnMut ( Acc , T ) -> Acc {
2110
+ move |acc, item| { f ( & item) ; fold ( acc, item) }
2111
+ }
2112
+
2113
+ fn inspect_try_fold < ' a , T , Acc , R > (
2114
+ f : & ' a mut impl FnMut ( & T ) ,
2115
+ mut fold : impl FnMut ( Acc , T ) -> R + ' a ,
2116
+ ) -> impl FnMut ( Acc , T ) -> R + ' a {
2117
+ move |acc, item| { f ( & item) ; fold ( acc, item) }
2118
+ }
2119
+
2106
2120
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2107
2121
impl < I : Iterator , F > Iterator for Inspect < I , F > where F : FnMut ( & I :: Item ) {
2108
2122
type Item = I :: Item ;
@@ -2119,19 +2133,17 @@ impl<I: Iterator, F> Iterator for Inspect<I, F> where F: FnMut(&I::Item) {
2119
2133
}
2120
2134
2121
2135
#[ inline]
2122
- fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , mut fold : Fold ) -> R where
2136
+ fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , fold : Fold ) -> R where
2123
2137
Self : Sized , Fold : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
2124
2138
{
2125
- let f = & mut self . f ;
2126
- self . iter . try_fold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2139
+ self . iter . try_fold ( init, inspect_try_fold ( & mut self . f , fold) )
2127
2140
}
2128
2141
2129
2142
#[ inline]
2130
- fn fold < Acc , Fold > ( self , init : Acc , mut fold : Fold ) -> Acc
2143
+ fn fold < Acc , Fold > ( self , init : Acc , fold : Fold ) -> Acc
2131
2144
where Fold : FnMut ( Acc , Self :: Item ) -> Acc ,
2132
2145
{
2133
- let mut f = self . f ;
2134
- self . iter . fold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2146
+ self . iter . fold ( init, inspect_fold ( self . f , fold) )
2135
2147
}
2136
2148
}
2137
2149
@@ -2146,19 +2158,17 @@ impl<I: DoubleEndedIterator, F> DoubleEndedIterator for Inspect<I, F>
2146
2158
}
2147
2159
2148
2160
#[ inline]
2149
- fn try_rfold < Acc , Fold , R > ( & mut self , init : Acc , mut fold : Fold ) -> R where
2161
+ fn try_rfold < Acc , Fold , R > ( & mut self , init : Acc , fold : Fold ) -> R where
2150
2162
Self : Sized , Fold : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
2151
2163
{
2152
- let f = & mut self . f ;
2153
- self . iter . try_rfold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2164
+ self . iter . try_rfold ( init, inspect_try_fold ( & mut self . f , fold) )
2154
2165
}
2155
2166
2156
2167
#[ inline]
2157
- fn rfold < Acc , Fold > ( self , init : Acc , mut fold : Fold ) -> Acc
2168
+ fn rfold < Acc , Fold > ( self , init : Acc , fold : Fold ) -> Acc
2158
2169
where Fold : FnMut ( Acc , Self :: Item ) -> Acc ,
2159
2170
{
2160
- let mut f = self . f ;
2161
- self . iter . rfold ( init, move |acc, item| { f ( & item) ; fold ( acc, item) } )
2171
+ self . iter . rfold ( init, inspect_fold ( self . f , fold) )
2162
2172
}
2163
2173
}
2164
2174
0 commit comments