@@ -780,21 +780,23 @@ impl<A, B> Iterator for Chain<A, B> where
780
780
fn try_fold < Acc , F , R > ( & mut self , init : Acc , mut f : F ) -> R where
781
781
Self : Sized , F : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
782
782
{
783
+ let mut accum = init;
783
784
match self . state {
784
- ChainState :: Front => {
785
- self . a . try_fold ( init, f)
786
- }
787
- ChainState :: Both => {
788
- let mut accum = init;
785
+ ChainState :: Both | ChainState :: Front => {
789
786
accum = self . a . try_fold ( accum, & mut f) ?;
790
- self . state = ChainState :: Back ;
791
- accum = self . b . try_fold ( accum , & mut f ) ? ;
792
- Try :: from_ok ( accum )
787
+ if let ChainState :: Both = self . state {
788
+ self . state = ChainState :: Back ;
789
+ }
793
790
}
794
- ChainState :: Back => {
795
- self . b . try_fold ( init, f)
791
+ _ => { }
792
+ }
793
+ match self . state {
794
+ ChainState :: Both | ChainState :: Back => {
795
+ accum = self . b . try_fold ( accum, & mut f) ?;
796
796
}
797
+ _ => { }
797
798
}
799
+ Try :: from_ok ( accum)
798
800
}
799
801
800
802
fn fold < Acc , F > ( self , init : Acc , mut f : F ) -> Acc
@@ -909,21 +911,23 @@ impl<A, B> DoubleEndedIterator for Chain<A, B> where
909
911
fn try_rfold < Acc , F , R > ( & mut self , init : Acc , mut f : F ) -> R where
910
912
Self : Sized , F : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
911
913
{
914
+ let mut accum = init;
912
915
match self . state {
913
- ChainState :: Back => {
914
- self . b . try_rfold ( init, f)
915
- }
916
- ChainState :: Both => {
917
- let mut accum = init;
916
+ ChainState :: Both | ChainState :: Back => {
918
917
accum = self . b . try_rfold ( accum, & mut f) ?;
919
- self . state = ChainState :: Front ;
920
- accum = self . a . try_rfold ( accum , & mut f ) ? ;
921
- Try :: from_ok ( accum )
918
+ if let ChainState :: Both = self . state {
919
+ self . state = ChainState :: Front ;
920
+ }
922
921
}
923
- ChainState :: Front => {
924
- self . a . try_rfold ( init, f)
922
+ _ => { }
923
+ }
924
+ match self . state {
925
+ ChainState :: Both | ChainState :: Front => {
926
+ accum = self . a . try_rfold ( accum, & mut f) ?;
925
927
}
928
+ _ => { }
926
929
}
930
+ Try :: from_ok ( accum)
927
931
}
928
932
929
933
fn rfold < Acc , F > ( self , init : Acc , mut f : F ) -> Acc
0 commit comments