diff options
| author | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2013-05-18 19:43:14 +1000 |
|---|---|---|
| committer | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2013-05-18 19:43:14 +1000 |
| commit | 5242464d543f0a7e811bcfd7fe8943b62842148a (patch) | |
| tree | 294227b8f5a3017c46fa792c9b7ec5744e98522b | |
| parent | c1eb539e124771a3e7618d9879345ea6a6cf3ed9 (diff) | |
| download | rust-5242464d543f0a7e811bcfd7fe8943b62842148a.tar.gz rust-5242464d543f0a7e811bcfd7fe8943b62842148a.zip | |
Merge trait and impl macros by using an inner module
| -rw-r--r-- | src/libcore/tuple.rs | 253 |
1 files changed, 124 insertions, 129 deletions
diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 334c576ba66..1dfdb42c303 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -16,6 +16,8 @@ use vec; #[cfg(not(test))] use cmp::{Eq, Ord}; +pub use self::getters::*; + pub trait CopyableTuple<T, U> { fn first(&self) -> T; fn second(&self) -> U; @@ -246,152 +248,145 @@ impl<A:Ord,B:Ord,C:Ord> Ord for (A, B, C) { fn gt(&self, other: &(A, B, C)) -> bool { (*other).lt(&(*self)) } } -// Tuple element accessor traits +// Tuple element getters -macro_rules! n_tuple( - ($name:ident: $($method:ident : $T:ident),+) => ( - pub trait $name<$($T),+> { - $(fn $method(&self) -> $T;)+ +macro_rules! tuple_getters( + ($( + $name:ident { + $(fn $method:ident -> $T:ident { $accessor:pat => $t:expr })+ } - ) -) - -n_tuple!(Tuple2: n0:A, n1:B) -n_tuple!(Tuple3: n0:A, n1:B, n2:C) -n_tuple!(Tuple4: n0:A, n1:B, n2:C, n3:D) -n_tuple!(Tuple5: n0:A, n1:B, n2:C, n3:D, n4:E) -n_tuple!(Tuple6: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F) -n_tuple!(Tuple7: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G) -n_tuple!(Tuple8: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H) -n_tuple!(Tuple9: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I) -n_tuple!(Tuple10: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J) -n_tuple!(Tuple11: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J, n10:K) -n_tuple!(Tuple12: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J, n10:K, n11:L) - -// Tuple element accessor trait implementations - -macro_rules! impl_n_tuple( - ($name:ident: $($method:ident -> $T:ident { $accessor:pat => $t:expr })+) => ( - impl<$($T:Copy),+> $name<$($T),+> for ($($T),+) { - $( - fn $method(&self) -> $T { - match *self { - $accessor => $t + )+) => ( + pub mod getters { + use kinds::Copy; + + $(pub trait $name<$($T),+> { + $(fn $method(&self) -> $T;)+ + })+ + + $(impl<$($T:Copy),+> $name<$($T),+> for ($($T),+) { + $( + #[inline(always)] + fn $method(&self) -> $T { + match *self { + $accessor => $t + } } - } - )+ + )+ + })+ } ) ) -impl_n_tuple!(Tuple2: - n0 -> A { (a,_) => a } - n1 -> B { (_,b) => b } -) +tuple_getters!( + Tuple2 { + fn n0 -> A { (a,_) => a } + fn n1 -> B { (_,b) => b } + } -impl_n_tuple!(Tuple3: - n0 -> A { (a,_,_) => a } - n1 -> B { (_,b,_) => b } - n2 -> C { (_,_,c) => c } -) + Tuple3 { + fn n0 -> A { (a,_,_) => a } + fn n1 -> B { (_,b,_) => b } + fn n2 -> C { (_,_,c) => c } + } -impl_n_tuple!(Tuple4: - n0 -> A { (a,_,_,_) => a } - n1 -> B { (_,b,_,_) => b } - n2 -> C { (_,_,c,_) => c } - n3 -> D { (_,_,_,d) => d } -) + Tuple4 { + fn n0 -> A { (a,_,_,_) => a } + fn n1 -> B { (_,b,_,_) => b } + fn n2 -> C { (_,_,c,_) => c } + fn n3 -> D { (_,_,_,d) => d } + } -impl_n_tuple!(Tuple5: - n0 -> A { (a,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_) => b } - n2 -> C { (_,_,c,_,_) => c } - n3 -> D { (_,_,_,d,_) => d } - n4 -> E { (_,_,_,_,e) => e } -) + Tuple5 { + fn n0 -> A { (a,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_) => c } + fn n3 -> D { (_,_,_,d,_) => d } + fn n4 -> E { (_,_,_,_,e) => e } + } -impl_n_tuple!(Tuple6: - n0 -> A { (a,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_) => d } - n4 -> E { (_,_,_,_,e,_) => e } - n5 -> F { (_,_,_,_,_,f) => f } -) + Tuple6 { + fn n0 -> A { (a,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_) => e } + fn n5 -> F { (_,_,_,_,_,f) => f } + } -impl_n_tuple!(Tuple7: - n0 -> A { (a,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_) => f } - n6 -> G { (_,_,_,_,_,_,g) => g } -) + Tuple7 { + fn n0 -> A { (a,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g) => g } + } -impl_n_tuple!(Tuple8: - n0 -> A { (a,_,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_,_) => f } - n6 -> G { (_,_,_,_,_,_,g,_) => g } - n7 -> H { (_,_,_,_,_,_,_,h) => h } -) + Tuple8 { + fn n0 -> A { (a,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,h) => h } + } -impl_n_tuple!(Tuple9: - n0 -> A { (a,_,_,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_,_,_) => f } - n6 -> G { (_,_,_,_,_,_,g,_,_) => g } - n7 -> H { (_,_,_,_,_,_,_,h,_) => h } - n8 -> I { (_,_,_,_,_,_,_,_,i) => i } -) + Tuple9 { + fn n0 -> A { (a,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,h,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,i) => i } + } -impl_n_tuple!(Tuple10: - n0 -> A { (a,_,_,_,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_,_,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_,_,_,_) => f } - n6 -> G { (_,_,_,_,_,_,g,_,_,_) => g } - n7 -> H { (_,_,_,_,_,_,_,h,_,_) => h } - n8 -> I { (_,_,_,_,_,_,_,_,i,_) => i } - n9 -> J { (_,_,_,_,_,_,_,_,_,j) => j } -) + Tuple10 { + fn n0 -> A { (a,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,h,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,i,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,j) => j } + } -impl_n_tuple!(Tuple11: - n0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f } - n6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g } - n7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h } - n8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i } - n9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j } - n10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k } -) + Tuple11 { + fn n0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j } + fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k } + } -impl_n_tuple!(Tuple12: - n0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a } - n1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b } - n2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c } - n3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d } - n4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e } - n5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f } - n6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g } - n7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h } - n8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i } - n9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j } - n10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k } - n11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l } + Tuple12 { + fn n0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j } + fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k } + fn n11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l } + } ) #[test] |
