@@ -399,6 +399,12 @@ impl<'a, I, T: 'a> Iterator for Cloned<I>
399
399
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
400
400
self . it . size_hint ( )
401
401
}
402
+
403
+ fn fold < Acc , F > ( self , init : Acc , mut f : F ) -> Acc
404
+ where F : FnMut ( Acc , Self :: Item ) -> Acc ,
405
+ {
406
+ self . it . fold ( init, move |acc, elt| f ( acc, elt. clone ( ) ) )
407
+ }
402
408
}
403
409
404
410
#[ stable( feature = "iter_cloned" , since = "1.1.0" ) ]
@@ -544,6 +550,25 @@ impl<A, B> Iterator for Chain<A, B> where
544
550
}
545
551
}
546
552
553
+ fn fold < Acc , F > ( self , init : Acc , mut f : F ) -> Acc
554
+ where F : FnMut ( Acc , Self :: Item ) -> Acc ,
555
+ {
556
+ let mut accum = init;
557
+ match self . state {
558
+ ChainState :: Both | ChainState :: Front => {
559
+ accum = self . a . fold ( accum, & mut f) ;
560
+ }
561
+ _ => { }
562
+ }
563
+ match self . state {
564
+ ChainState :: Both | ChainState :: Back => {
565
+ accum = self . b . fold ( accum, & mut f) ;
566
+ }
567
+ _ => { }
568
+ }
569
+ accum
570
+ }
571
+
547
572
#[ inline]
548
573
fn nth ( & mut self , mut n : usize ) -> Option < A :: Item > {
549
574
match self . state {
@@ -939,6 +964,13 @@ impl<B, I: Iterator, F> Iterator for Map<I, F> where F: FnMut(I::Item) -> B {
939
964
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
940
965
self . iter . size_hint ( )
941
966
}
967
+
968
+ fn fold < Acc , G > ( self , init : Acc , mut g : G ) -> Acc
969
+ where G : FnMut ( Acc , Self :: Item ) -> Acc ,
970
+ {
971
+ let mut f = self . f ;
972
+ self . iter . fold ( init, move |acc, elt| g ( acc, f ( elt) ) )
973
+ }
942
974
}
943
975
944
976
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -1688,6 +1720,22 @@ impl<I: Iterator, U: IntoIterator, F> Iterator for FlatMap<I, U, F>
1688
1720
}
1689
1721
}
1690
1722
1723
+ fn fold < Acc , G > ( self , init : Acc , mut f : G ) -> Acc
1724
+ where G : FnMut ( Acc , Self :: Item ) -> Acc ,
1725
+ {
1726
+ let mut accum = init;
1727
+ if let Some ( iter) = self . frontiter {
1728
+ accum = iter. fold ( accum, & mut f) ;
1729
+ }
1730
+ for iter in self . iter . map ( self . f ) {
1731
+ accum = iter. into_iter ( ) . fold ( accum, & mut f) ;
1732
+ }
1733
+ if let Some ( iter) = self . backiter {
1734
+ accum = iter. fold ( accum, & mut f) ;
1735
+ }
1736
+ accum
1737
+ }
1738
+
1691
1739
#[ inline]
1692
1740
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1693
1741
let ( flo, fhi) = self . frontiter . as_ref ( ) . map_or ( ( 0 , Some ( 0 ) ) , |it| it. size_hint ( ) ) ;
0 commit comments