]> git.lizzy.rs Git - rust.git/commitdiff
Merge trait and impl macros by using an inner module
authorBrendan Zabarauskas <bjzaba@yahoo.com.au>
Sat, 18 May 2013 09:43:14 +0000 (19:43 +1000)
committerBrendan Zabarauskas <bjzaba@yahoo.com.au>
Sat, 18 May 2013 09:43:14 +0000 (19:43 +1000)
src/libcore/tuple.rs

index 334c576ba665b0f469acff2a78550ddb6afc77cc..1dfdb42c30310be9d6b3cfed96ddbf691d95b618 100644 (file)
@@ -16,6 +16,8 @@
 
 #[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 @@ fn ge(&self, other: &(A, B, C)) -> bool { !(*self).lt(other) }
     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]