@@ -37,13 +37,8 @@ impl<T> Zip<T> where Zip<T>: Iterator
37
37
}
38
38
}
39
39
40
- // Macro to turn `t.$idx`, where $idx:tt, into an expression.
41
- macro_rules! e(
42
- ( $e: expr) => { $e }
43
- ) ;
44
-
45
40
macro_rules! impl_zip_iter(
46
- ( $( $idx : tt is $ B: ident) ,* ) => (
41
+ ( $( $B: ident) ,* ) => (
47
42
#[ allow( non_snake_case) ]
48
43
impl <$( $B) ,* > Iterator for Zip <( $( $B, ) * ) >
49
44
where
@@ -57,8 +52,11 @@ macro_rules! impl_zip_iter(
57
52
( $( <$B as Iterator >:: Item , ) * )
58
53
>
59
54
{
55
+ let & mut Zip { t : ( $( ref mut $B, ) * ) } = self ;
56
+ // WARNING: partial consume possible
57
+ // Zip worked the same.
60
58
$(
61
- let $B = match e! ( self . t . $idx ) . next( ) {
59
+ let $B = match $B . next( ) {
62
60
None => return None ,
63
61
Some ( elt) => elt
64
62
} ;
@@ -68,13 +66,14 @@ macro_rules! impl_zip_iter(
68
66
69
67
fn size_hint( & self ) -> ( usize , Option <usize >)
70
68
{
71
- let mut low = :: std:: usize :: MAX ;
72
- let mut high = None ;
69
+ let low = :: std:: usize :: MAX ;
70
+ let high = None ;
71
+ let & Zip { t : ( $( ref $B, ) * ) } = self ;
73
72
$(
74
73
// update estimate
75
- let ( l, h) = e! ( self . t . $idx ) . size_hint( ) ;
76
- low = cmp:: min( low, l) ;
77
- high = match ( high, h) {
74
+ let ( l, h) = $B . size_hint( ) ;
75
+ let low = cmp:: min( low, l) ;
76
+ let high = match ( high, h) {
78
77
( Some ( u1) , Some ( u2) ) => Some ( cmp:: min( u1, u2) ) ,
79
78
_ => high. or( h)
80
79
} ;
@@ -85,12 +84,12 @@ macro_rules! impl_zip_iter(
85
84
) ;
86
85
) ;
87
86
88
- impl_zip_iter ! ( 0 is A ) ;
89
- impl_zip_iter ! ( 0 is A , 1 is B ) ;
90
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C ) ;
91
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D ) ;
92
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D , 4 is E ) ;
93
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D , 4 is E , 5 is F ) ;
94
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D , 4 is E , 5 is F , 6 is G ) ;
95
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D , 4 is E , 5 is F , 6 is G , 7 is H ) ;
96
- impl_zip_iter ! ( 0 is A , 1 is B , 2 is C , 3 is D , 4 is E , 5 is F , 6 is G , 7 is H , 8 is I ) ;
87
+ impl_zip_iter ! ( A ) ;
88
+ impl_zip_iter ! ( A , B ) ;
89
+ impl_zip_iter ! ( A , B , C ) ;
90
+ impl_zip_iter ! ( A , B , C , D ) ;
91
+ impl_zip_iter ! ( A , B , C , D , E ) ;
92
+ impl_zip_iter ! ( A , B , C , D , E , F ) ;
93
+ impl_zip_iter ! ( A , B , C , D , E , F , G ) ;
94
+ impl_zip_iter ! ( A , B , C , D , E , F , G , H ) ;
95
+ impl_zip_iter ! ( A , B , C , D , E , F , G , H , I ) ;
0 commit comments