7474 T : Clone + ' a ,
7575 R : std:: iter:: FromIterator < T > ,
7676{
77- merge_collect ( & mut ( ) , types, |_, ( l, r) | f ( l, r) , |( l, _) | l. clone ( ) )
77+ merge_collect ( & mut ( ) , types, |_, ( l, r) | f ( l, r) , |_ , ( l, _) | l. clone ( ) )
7878}
7979
8080pub struct MergeIter < ' s , I , F , G , T , S >
@@ -95,13 +95,15 @@ where
9595 S : ?Sized ,
9696 I : Iterator ,
9797 F : FnMut ( & mut S , I :: Item ) -> Option < U > ,
98- G : FnMut ( I :: Item ) -> U ,
98+ G : FnMut ( & mut S , I :: Item ) -> U ,
9999{
100100 type Item = U ;
101101 fn next ( & mut self ) -> Option < Self :: Item > {
102102 if self . clone_types > 0 {
103103 self . clone_types -= 1 ;
104- self . clone_types_iter . next ( ) . map ( & mut self . converter )
104+ let converter = & mut self . converter ;
105+ let state = & mut self . state ;
106+ self . clone_types_iter . next ( ) . map ( |e| converter ( state, e) )
105107 } else if let Some ( typ) = self . next . take ( ) {
106108 self . clone_types_iter . next ( ) ;
107109 Some ( typ)
@@ -135,7 +137,7 @@ where
135137 S : ?Sized ,
136138 I : ExactSizeIterator ,
137139 F : FnMut ( & mut S , I :: Item ) -> Option < U > ,
138- G : FnMut ( I :: Item ) -> U ,
140+ G : FnMut ( & mut S , I :: Item ) -> U ,
139141{
140142 fn len ( & self ) -> usize {
141143 self . clone_types_iter . len ( )
@@ -153,7 +155,7 @@ where
153155 I : IntoIterator ,
154156 I :: IntoIter : FusedIterator + Clone ,
155157 F : FnMut ( & mut S , I :: Item ) -> Option < U > ,
156- G : FnMut ( I :: Item ) -> U ,
158+ G : FnMut ( & mut S , I :: Item ) -> U ,
157159 R : std:: iter:: FromIterator < U > ,
158160{
159161 merge_iter ( state, types, action, converter) . map ( |iter| iter. collect ( ) )
@@ -170,7 +172,7 @@ where
170172 I : IntoIterator ,
171173 I :: IntoIter : FusedIterator + Clone ,
172174 F : FnMut ( & mut S , I :: Item ) -> Option < U > ,
173- G : FnMut ( I :: Item ) -> U ,
175+ G : FnMut ( & mut S , I :: Item ) -> U ,
174176{
175177 let mut types = types. into_iter ( ) ;
176178 let clone_types_iter = types. clone ( ) ;
0 commit comments