Skip to content

Commit 4e3c3bd

Browse files
author
Oliver Schneider
committed
refactor tuple zip macros and traits
1 parent 6690f1b commit 4e3c3bd

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

src/ziptuple.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,8 @@ impl<T> Zip<T> where Zip<T>: Iterator
3737
}
3838
}
3939

40-
// Macro to turn `t.$idx`, where $idx:tt, into an expression.
41-
macro_rules! e(
42-
($e:expr) => { $e }
43-
);
44-
4540
macro_rules! impl_zip_iter(
46-
($($idx:tt is $B:ident),*) => (
41+
($($B:ident),*) => (
4742
#[allow(non_snake_case)]
4843
impl<$($B),*> Iterator for Zip<($($B,)*)>
4944
where
@@ -57,8 +52,11 @@ macro_rules! impl_zip_iter(
5752
($(<$B as Iterator>::Item,)*)
5853
>
5954
{
55+
let &mut Zip { t : ($(ref mut $B,)*)} = self;
56+
// WARNING: partial consume possible
57+
// Zip worked the same.
6058
$(
61-
let $B = match e!(self.t. $idx).next() {
59+
let $B = match $B.next() {
6260
None => return None,
6361
Some(elt) => elt
6462
};
@@ -68,13 +66,14 @@ macro_rules! impl_zip_iter(
6866

6967
fn size_hint(&self) -> (usize, Option<usize>)
7068
{
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;
7372
$(
7473
// 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) {
7877
(Some(u1), Some(u2)) => Some(cmp::min(u1, u2)),
7978
_ => high.or(h)
8079
};
@@ -85,12 +84,12 @@ macro_rules! impl_zip_iter(
8584
);
8685
);
8786

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

Comments
 (0)