#[cfg(not(test))] use cmp::{Eq, Ord};
+pub use self::getters::*;
+
pub trait CopyableTuple<T, U> {
fn first(&self) -> T;
fn second(&self) -> U;
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]