@@ -608,7 +608,11 @@ pub trait Iterator {
608
608
fn all < F > ( & mut self , mut f : F ) -> bool where
609
609
Self : Sized , F : FnMut ( Self :: Item ) -> bool
610
610
{
611
- for x in self . by_ref ( ) { if !f ( x) { return false ; } }
611
+ for x in self . by_ref ( ) {
612
+ if !f ( x) {
613
+ return false ;
614
+ }
615
+ }
612
616
true
613
617
}
614
618
@@ -633,7 +637,11 @@ pub trait Iterator {
633
637
Self : Sized ,
634
638
F : FnMut ( Self :: Item ) -> bool
635
639
{
636
- for x in self . by_ref ( ) { if f ( x) { return true ; } }
640
+ for x in self . by_ref ( ) {
641
+ if f ( x) {
642
+ return true ;
643
+ }
644
+ }
637
645
false
638
646
}
639
647
@@ -1562,13 +1570,11 @@ impl<A, B> Iterator for Zip<A, B> where A: Iterator, B: Iterator
1562
1570
1563
1571
#[ inline]
1564
1572
fn next ( & mut self ) -> Option < ( A :: Item , B :: Item ) > {
1565
- match self . a . next ( ) {
1566
- None => None ,
1567
- Some ( x) => match self . b . next ( ) {
1568
- None => None ,
1569
- Some ( y) => Some ( ( x, y) )
1570
- }
1571
- }
1573
+ self . a . next ( ) . and_then ( |x| {
1574
+ self . b . next ( ) . and_then ( |y| {
1575
+ Some ( ( x, y) )
1576
+ } )
1577
+ } )
1572
1578
}
1573
1579
1574
1580
#[ inline]
@@ -1626,13 +1632,11 @@ impl<A, B> RandomAccessIterator for Zip<A, B> where
1626
1632
1627
1633
#[ inline]
1628
1634
fn idx ( & mut self , index : usize ) -> Option < ( A :: Item , B :: Item ) > {
1629
- match self . a . idx ( index) {
1630
- None => None ,
1631
- Some ( x) => match self . b . idx ( index) {
1632
- None => None ,
1633
- Some ( y) => Some ( ( x, y) )
1634
- }
1635
- }
1635
+ self . a . idx ( index) . and_then ( |x| {
1636
+ self . b . idx ( index) . and_then ( |y| {
1637
+ Some ( ( x, y) )
1638
+ } )
1639
+ } )
1636
1640
}
1637
1641
}
1638
1642
@@ -1748,9 +1752,8 @@ impl<B, I: Iterator, F> Iterator for FilterMap<I, F>
1748
1752
#[ inline]
1749
1753
fn next ( & mut self ) -> Option < B > {
1750
1754
for x in self . iter . by_ref ( ) {
1751
- match ( self . f ) ( x) {
1752
- Some ( y) => return Some ( y) ,
1753
- None => ( )
1755
+ if let Some ( y) = ( self . f ) ( x) {
1756
+ return Some ( y) ;
1754
1757
}
1755
1758
}
1756
1759
None
@@ -1770,9 +1773,8 @@ impl<B, I: DoubleEndedIterator, F> DoubleEndedIterator for FilterMap<I, F>
1770
1773
#[ inline]
1771
1774
fn next_back ( & mut self ) -> Option < B > {
1772
1775
for x in self . iter . by_ref ( ) . rev ( ) {
1773
- match ( self . f ) ( x) {
1774
- Some ( y) => return Some ( y) ,
1775
- None => ( )
1776
+ if let Some ( y) = ( self . f ) ( x) {
1777
+ return Some ( y) ;
1776
1778
}
1777
1779
}
1778
1780
None
@@ -1794,14 +1796,11 @@ impl<I> Iterator for Enumerate<I> where I: Iterator {
1794
1796
1795
1797
#[ inline]
1796
1798
fn next ( & mut self ) -> Option < ( usize , <I as Iterator >:: Item ) > {
1797
- match self . iter . next ( ) {
1798
- Some ( a) => {
1799
- let ret = Some ( ( self . count , a) ) ;
1800
- self . count += 1 ;
1801
- ret
1802
- }
1803
- _ => None
1804
- }
1799
+ self . iter . next ( ) . map ( |a| {
1800
+ let ret = ( self . count , a) ;
1801
+ self . count += 1 ;
1802
+ ret
1803
+ } )
1805
1804
}
1806
1805
1807
1806
#[ inline]
@@ -1816,13 +1815,10 @@ impl<I> DoubleEndedIterator for Enumerate<I> where
1816
1815
{
1817
1816
#[ inline]
1818
1817
fn next_back ( & mut self ) -> Option < ( usize , <I as Iterator >:: Item ) > {
1819
- match self . iter . next_back ( ) {
1820
- Some ( a) => {
1821
- let len = self . iter . len ( ) ;
1822
- Some ( ( self . count + len, a) )
1823
- }
1824
- _ => None
1825
- }
1818
+ self . iter . next_back ( ) . map ( |a| {
1819
+ let len = self . iter . len ( ) ;
1820
+ ( self . count + len, a)
1821
+ } )
1826
1822
}
1827
1823
}
1828
1824
@@ -1835,10 +1831,7 @@ impl<I> RandomAccessIterator for Enumerate<I> where I: RandomAccessIterator {
1835
1831
1836
1832
#[ inline]
1837
1833
fn idx ( & mut self , index : usize ) -> Option < ( usize , <I as Iterator >:: Item ) > {
1838
- match self . iter . idx ( index) {
1839
- Some ( a) => Some ( ( self . count + index, a) ) ,
1840
- _ => None ,
1841
- }
1834
+ self . iter . idx ( index) . map ( |a| ( self . count + index, a) )
1842
1835
}
1843
1836
}
1844
1837
@@ -1865,19 +1858,18 @@ impl<I: Iterator> Iterator for Peekable<I> {
1865
1858
1866
1859
#[ inline]
1867
1860
fn next ( & mut self ) -> Option < I :: Item > {
1868
- if self . peeked . is_some ( ) { self . peeked . take ( ) }
1869
- else { self . iter . next ( ) }
1861
+ match self . peeked {
1862
+ Some ( _) => self . peeked . take ( ) ,
1863
+ None => self . iter . next ( ) ,
1864
+ }
1870
1865
}
1871
1866
1872
1867
#[ inline]
1873
1868
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1874
1869
let ( lo, hi) = self . iter . size_hint ( ) ;
1875
1870
if self . peeked . is_some ( ) {
1876
1871
let lo = lo. saturating_add ( 1 ) ;
1877
- let hi = match hi {
1878
- Some ( x) => x. checked_add ( 1 ) ,
1879
- None => None
1880
- } ;
1872
+ let hi = hi. and_then ( |x| x. checked_add ( 1 ) ) ;
1881
1873
( lo, hi)
1882
1874
} else {
1883
1875
( lo, hi)
@@ -1966,17 +1958,14 @@ impl<I: Iterator, P> Iterator for TakeWhile<I, P>
1966
1958
if self . flag {
1967
1959
None
1968
1960
} else {
1969
- match self . iter . next ( ) {
1970
- Some ( x) => {
1971
- if ( self . predicate ) ( & x) {
1972
- Some ( x)
1973
- } else {
1974
- self . flag = true ;
1975
- None
1976
- }
1961
+ self . iter . next ( ) . and_then ( |x| {
1962
+ if ( self . predicate ) ( & x) {
1963
+ Some ( x)
1964
+ } else {
1965
+ self . flag = true ;
1966
+ None
1977
1967
}
1978
- None => None
1979
- }
1968
+ } )
1980
1969
}
1981
1970
}
1982
1971
@@ -2030,11 +2019,7 @@ impl<I> Iterator for Skip<I> where I: Iterator {
2030
2019
let ( lower, upper) = self . iter . size_hint ( ) ;
2031
2020
2032
2021
let lower = lower. saturating_sub ( self . n ) ;
2033
-
2034
- let upper = match upper {
2035
- Some ( x) => Some ( x. saturating_sub ( self . n ) ) ,
2036
- None => None
2037
- } ;
2022
+ let upper = upper. map ( |x| x. saturating_sub ( self . n ) ) ;
2038
2023
2039
2024
( lower, upper)
2040
2025
}
@@ -2316,9 +2301,8 @@ pub struct Inspect<I, F> {
2316
2301
impl < I : Iterator , F > Inspect < I , F > where F : FnMut ( & I :: Item ) {
2317
2302
#[ inline]
2318
2303
fn do_inspect ( & mut self , elt : Option < I :: Item > ) -> Option < I :: Item > {
2319
- match elt {
2320
- Some ( ref a) => ( self . f ) ( a) ,
2321
- None => ( )
2304
+ if let Some ( ref a) = elt {
2305
+ ( self . f ) ( a) ;
2322
2306
}
2323
2307
2324
2308
elt
@@ -2619,17 +2603,14 @@ impl<A: Step + One + Clone> Iterator for RangeInclusive<A> {
2619
2603
2620
2604
#[ inline]
2621
2605
fn next ( & mut self ) -> Option < A > {
2622
- match self . range . next ( ) {
2623
- Some ( x) => Some ( x) ,
2624
- None => {
2625
- if !self . done && self . range . start == self . range . end {
2626
- self . done = true ;
2627
- Some ( self . range . end . clone ( ) )
2628
- } else {
2629
- None
2630
- }
2606
+ self . range . next ( ) . or_else ( || {
2607
+ if !self . done && self . range . start == self . range . end {
2608
+ self . done = true ;
2609
+ Some ( self . range . end . clone ( ) )
2610
+ } else {
2611
+ None
2631
2612
}
2632
- }
2613
+ } )
2633
2614
}
2634
2615
2635
2616
#[ inline]
@@ -2639,10 +2620,7 @@ impl<A: Step + One + Clone> Iterator for RangeInclusive<A> {
2639
2620
( lo, hi)
2640
2621
} else {
2641
2622
let lo = lo. saturating_add ( 1 ) ;
2642
- let hi = match hi {
2643
- Some ( x) => x. checked_add ( 1 ) ,
2644
- None => None
2645
- } ;
2623
+ let hi = hi. and_then ( |x| x. checked_add ( 1 ) ) ;
2646
2624
( lo, hi)
2647
2625
}
2648
2626
}
@@ -2805,10 +2783,9 @@ impl<A: Step + One + Clone> Iterator for ops::Range<A> {
2805
2783
2806
2784
#[ inline]
2807
2785
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
2808
- if let Some ( hint) = Step :: steps_between ( & self . start , & self . end , & A :: one ( ) ) {
2809
- ( hint, Some ( hint) )
2810
- } else {
2811
- ( 0 , None )
2786
+ match Step :: steps_between ( & self . start , & self . end , & A :: one ( ) ) {
2787
+ Some ( hint) => ( hint, Some ( hint) ) ,
2788
+ None => ( 0 , None )
2812
2789
}
2813
2790
}
2814
2791
}
@@ -2899,13 +2876,8 @@ pub fn iterate<T, F>(seed: T, f: F) -> Iterate<T, F> where
2899
2876
let & mut ( ref mut f, ref mut val, ref mut first) = st;
2900
2877
if * first {
2901
2878
* first = false ;
2902
- } else {
2903
- match val. take ( ) {
2904
- Some ( x) => {
2905
- * val = Some ( ( * f) ( x) )
2906
- }
2907
- None => { }
2908
- }
2879
+ } else if let Some ( x) = val. take ( ) {
2880
+ * val = Some ( ( * f) ( x) )
2909
2881
}
2910
2882
val. clone ( )
2911
2883
}
0 commit comments