From 6742f91192da67324b33cf882383a283a2599f7b Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sat, 18 May 2013 18:59:16 +1000 Subject: [PATCH 1/5] Create tuple element accessor traits --- src/libcore/prelude.rs | 2 + src/libcore/tuple.rs | 165 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 4ed648161fc22..77371b6336848 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -52,6 +52,8 @@ pub use from_str::{FromStr}; pub use to_bytes::IterBytes; pub use to_str::{ToStr, ToStrConsume}; pub use tuple::{CopyableTuple, ImmutableTuple, ExtendedTupleOps}; +pub use tuple::{Tuple2, Tuple3, Tuple4, Tuple5, Tuple6, Tuple7, Tuple8, Tuple9}; +pub use tuple::{Tuple10, Tuple11, Tuple12}; pub use vec::{CopyableVector, ImmutableVector}; pub use vec::{ImmutableEqVector, ImmutableCopyableVector}; pub use vec::{OwnedVector, OwnedCopyableVector, MutableVector}; diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index b29a4e55426df..810ef75ad6a31 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -246,6 +246,154 @@ impl Ord for (A, B, C) { fn gt(&self, other: &(A, B, C)) -> bool { (*other).lt(&(*self)) } } +// Tuple element accessor traits + +macro_rules! n_tuple( + ($name:ident: $($method:ident : $T:ident),+) => ( + pub trait $name<$($T),+> { + $(fn $method(&self) -> $T;)+ + } + ) +) + +n_tuple!(Tuple2: _0:A, _1:B) +n_tuple!(Tuple3: _0:A, _1:B, _2:C) +n_tuple!(Tuple4: _0:A, _1:B, _2:C, _3:D) +n_tuple!(Tuple5: _0:A, _1:B, _2:C, _3:D, _4:E) +n_tuple!(Tuple6: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F) +n_tuple!(Tuple7: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G) +n_tuple!(Tuple8: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H) +n_tuple!(Tuple9: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I) +n_tuple!(Tuple10: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J) +n_tuple!(Tuple11: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J, _10:K) +n_tuple!(Tuple12: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J, _10:K, _11: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 + } + } + )+ + } + ) +) + +impl_n_tuple!(Tuple2: + _0 -> A { (a,_) => a } + _1 -> B { (_,b) => b } +) + +impl_n_tuple!(Tuple3: + _0 -> A { (a,_,_) => a } + _1 -> B { (_,b,_) => b } + _2 -> C { (_,_,c) => c } +) + +impl_n_tuple!(Tuple4: + _0 -> A { (a,_,_,_) => a } + _1 -> B { (_,b,_,_) => b } + _2 -> C { (_,_,c,_) => c } + _3 -> D { (_,_,_,d) => d } +) + +impl_n_tuple!(Tuple5: + _0 -> A { (a,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_) => b } + _2 -> C { (_,_,c,_,_) => c } + _3 -> D { (_,_,_,d,_) => d } + _4 -> E { (_,_,_,_,e) => e } +) + +impl_n_tuple!(Tuple6: + _0 -> A { (a,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_) => d } + _4 -> E { (_,_,_,_,e,_) => e } + _5 -> F { (_,_,_,_,_,f) => f } +) + +impl_n_tuple!(Tuple7: + _0 -> A { (a,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_) => f } + _6 -> G { (_,_,_,_,_,_,g) => g } +) + +impl_n_tuple!(Tuple8: + _0 -> A { (a,_,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_,_) => f } + _6 -> G { (_,_,_,_,_,_,g,_) => g } + _7 -> H { (_,_,_,_,_,_,_,h) => h } +) + +impl_n_tuple!(Tuple9: + _0 -> A { (a,_,_,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_,_,_) => f } + _6 -> G { (_,_,_,_,_,_,g,_,_) => g } + _7 -> H { (_,_,_,_,_,_,_,h,_) => h } + _8 -> I { (_,_,_,_,_,_,_,_,i) => i } +) + +impl_n_tuple!(Tuple10: + _0 -> A { (a,_,_,_,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_,_,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_,_,_,_) => f } + _6 -> G { (_,_,_,_,_,_,g,_,_,_) => g } + _7 -> H { (_,_,_,_,_,_,_,h,_,_) => h } + _8 -> I { (_,_,_,_,_,_,_,_,i,_) => i } + _9 -> J { (_,_,_,_,_,_,_,_,_,j) => j } +) + +impl_n_tuple!(Tuple11: + _0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f } + _6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g } + _7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h } + _8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i } + _9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j } + _10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k } +) + +impl_n_tuple!(Tuple12: + _0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a } + _1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b } + _2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c } + _3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d } + _4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e } + _5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f } + _6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g } + _7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h } + _8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i } + _9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j } + _10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k } + _11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l } +) + #[test] fn test_tuple_ref() { let x = (~"foo", ~"bar"); @@ -268,3 +416,20 @@ fn test_clone() { assert!(a.first() == b.first()); assert!(a.second() == b.second()); } + +#[test] +fn test_n_tuple() { + let t = (0u8, 1u16, 2u32, 3u64, 4u, 5i8, 6i16, 7i32, 8i64, 9i, 10f32, 11f64); + assert_eq!(t._0(), 0u8); + assert_eq!(t._1(), 1u16); + assert_eq!(t._2(), 2u32); + assert_eq!(t._3(), 3u64); + assert_eq!(t._4(), 4u); + assert_eq!(t._5(), 5i8); + assert_eq!(t._6(), 6i16); + assert_eq!(t._7(), 7i32); + assert_eq!(t._8(), 8i64); + assert_eq!(t._9(), 9i); + assert_eq!(t._10(), 10f32); + assert_eq!(t._11(), 11f64); +} From 96cb0dc8a0804256c8620dfabaa415be99562ccc Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sat, 18 May 2013 19:10:12 +1000 Subject: [PATCH 2/5] use n{0..11} instead of _{0..12} for accessor method names --- src/libcore/tuple.rs | 200 +++++++++++++++++++++---------------------- 1 file changed, 100 insertions(+), 100 deletions(-) diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 810ef75ad6a31..7c58385948371 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -256,17 +256,17 @@ macro_rules! n_tuple( ) ) -n_tuple!(Tuple2: _0:A, _1:B) -n_tuple!(Tuple3: _0:A, _1:B, _2:C) -n_tuple!(Tuple4: _0:A, _1:B, _2:C, _3:D) -n_tuple!(Tuple5: _0:A, _1:B, _2:C, _3:D, _4:E) -n_tuple!(Tuple6: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F) -n_tuple!(Tuple7: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G) -n_tuple!(Tuple8: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H) -n_tuple!(Tuple9: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I) -n_tuple!(Tuple10: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J) -n_tuple!(Tuple11: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J, _10:K) -n_tuple!(Tuple12: _0:A, _1:B, _2:C, _3:D, _4:E, _5:F, _6:G, _7:H, _8:I, _9:J, _10:K, _11:L) +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 @@ -285,113 +285,113 @@ macro_rules! impl_n_tuple( ) impl_n_tuple!(Tuple2: - _0 -> A { (a,_) => a } - _1 -> B { (_,b) => b } + n0 -> A { (a,_) => a } + n1 -> B { (_,b) => b } ) impl_n_tuple!(Tuple3: - _0 -> A { (a,_,_) => a } - _1 -> B { (_,b,_) => b } - _2 -> C { (_,_,c) => c } + n0 -> A { (a,_,_) => a } + n1 -> B { (_,b,_) => b } + n2 -> C { (_,_,c) => c } ) impl_n_tuple!(Tuple4: - _0 -> A { (a,_,_,_) => a } - _1 -> B { (_,b,_,_) => b } - _2 -> C { (_,_,c,_) => c } - _3 -> D { (_,_,_,d) => d } + n0 -> A { (a,_,_,_) => a } + n1 -> B { (_,b,_,_) => b } + n2 -> C { (_,_,c,_) => c } + n3 -> D { (_,_,_,d) => d } ) impl_n_tuple!(Tuple5: - _0 -> A { (a,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_) => b } - _2 -> C { (_,_,c,_,_) => c } - _3 -> D { (_,_,_,d,_) => d } - _4 -> E { (_,_,_,_,e) => e } + n0 -> A { (a,_,_,_,_) => a } + n1 -> B { (_,b,_,_,_) => b } + n2 -> C { (_,_,c,_,_) => c } + n3 -> D { (_,_,_,d,_) => d } + n4 -> E { (_,_,_,_,e) => e } ) impl_n_tuple!(Tuple6: - _0 -> A { (a,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_) => d } - _4 -> E { (_,_,_,_,e,_) => e } - _5 -> F { (_,_,_,_,_,f) => f } + n0 -> A { (a,_,_,_,_,_) => a } + n1 -> B { (_,b,_,_,_,_) => b } + n2 -> C { (_,_,c,_,_,_) => c } + n3 -> D { (_,_,_,d,_,_) => d } + n4 -> E { (_,_,_,_,e,_) => e } + n5 -> F { (_,_,_,_,_,f) => f } ) impl_n_tuple!(Tuple7: - _0 -> A { (a,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_) => f } - _6 -> G { (_,_,_,_,_,_,g) => g } + 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 } ) impl_n_tuple!(Tuple8: - _0 -> A { (a,_,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_,_) => f } - _6 -> G { (_,_,_,_,_,_,g,_) => g } - _7 -> H { (_,_,_,_,_,_,_,h) => h } + 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 } ) impl_n_tuple!(Tuple9: - _0 -> A { (a,_,_,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_,_,_) => f } - _6 -> G { (_,_,_,_,_,_,g,_,_) => g } - _7 -> H { (_,_,_,_,_,_,_,h,_) => h } - _8 -> I { (_,_,_,_,_,_,_,_,i) => i } + 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 } ) impl_n_tuple!(Tuple10: - _0 -> A { (a,_,_,_,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_,_,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_,_,_,_) => f } - _6 -> G { (_,_,_,_,_,_,g,_,_,_) => g } - _7 -> H { (_,_,_,_,_,_,_,h,_,_) => h } - _8 -> I { (_,_,_,_,_,_,_,_,i,_) => i } - _9 -> J { (_,_,_,_,_,_,_,_,_,j) => j } + 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 } ) impl_n_tuple!(Tuple11: - _0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f } - _6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g } - _7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h } - _8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i } - _9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j } - _10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k } + 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 } ) impl_n_tuple!(Tuple12: - _0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a } - _1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b } - _2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c } - _3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d } - _4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e } - _5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f } - _6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g } - _7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h } - _8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i } - _9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j } - _10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k } - _11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l } + 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 } ) #[test] @@ -420,16 +420,16 @@ fn test_clone() { #[test] fn test_n_tuple() { let t = (0u8, 1u16, 2u32, 3u64, 4u, 5i8, 6i16, 7i32, 8i64, 9i, 10f32, 11f64); - assert_eq!(t._0(), 0u8); - assert_eq!(t._1(), 1u16); - assert_eq!(t._2(), 2u32); - assert_eq!(t._3(), 3u64); - assert_eq!(t._4(), 4u); - assert_eq!(t._5(), 5i8); - assert_eq!(t._6(), 6i16); - assert_eq!(t._7(), 7i32); - assert_eq!(t._8(), 8i64); - assert_eq!(t._9(), 9i); - assert_eq!(t._10(), 10f32); - assert_eq!(t._11(), 11f64); + assert_eq!(t.n0(), 0u8); + assert_eq!(t.n1(), 1u16); + assert_eq!(t.n2(), 2u32); + assert_eq!(t.n3(), 3u64); + assert_eq!(t.n4(), 4u); + assert_eq!(t.n5(), 5i8); + assert_eq!(t.n6(), 6i16); + assert_eq!(t.n7(), 7i32); + assert_eq!(t.n8(), 8i64); + assert_eq!(t.n9(), 9i); + assert_eq!(t.n10(), 10f32); + assert_eq!(t.n11(), 11f64); } From c1eb539e124771a3e7618d9879345ea6a6cf3ed9 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sat, 18 May 2013 19:10:49 +1000 Subject: [PATCH 3/5] Use assert_eq! instead of assert! --- src/libcore/tuple.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 7c58385948371..334c576ba665b 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -397,24 +397,24 @@ impl_n_tuple!(Tuple12: #[test] fn test_tuple_ref() { let x = (~"foo", ~"bar"); - assert!(x.first_ref() == &~"foo"); - assert!(x.second_ref() == &~"bar"); + assert_eq!(x.first_ref(), &~"foo"); + assert_eq!(x.second_ref(), &~"bar"); } #[test] #[allow(non_implicitly_copyable_typarams)] fn test_tuple() { - assert!((948, 4039.48).first() == 948); - assert!((34.5, ~"foo").second() == ~"foo"); - assert!(('a', 2).swap() == (2, 'a')); + assert_eq!((948, 4039.48).first(), 948); + assert_eq!((34.5, ~"foo").second(), ~"foo"); + assert_eq!(('a', 2).swap(), (2, 'a')); } #[test] fn test_clone() { let a = (1, ~"2"); let b = a.clone(); - assert!(a.first() == b.first()); - assert!(a.second() == b.second()); + assert_eq!(a.first(), b.first()); + assert_eq!(a.second(), b.second()); } #[test] From 5242464d543f0a7e811bcfd7fe8943b62842148a Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sat, 18 May 2013 19:43:14 +1000 Subject: [PATCH 4/5] Merge trait and impl macros by using an inner module --- src/libcore/tuple.rs | 253 +++++++++++++++++++++---------------------- 1 file changed, 124 insertions(+), 129 deletions(-) diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 334c576ba665b..1dfdb42c30310 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 { fn first(&self) -> T; fn second(&self) -> U; @@ -246,152 +248,145 @@ impl 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] From b6038b76339deefc340fa709009a7bea069270e4 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sat, 18 May 2013 20:05:40 +1000 Subject: [PATCH 5/5] Return a reference to the tuple elements instead of copying --- src/libcore/tuple.rs | 186 +++++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 94 deletions(-) diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 1dfdb42c30310..c872839146ab0 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -257,16 +257,14 @@ macro_rules! tuple_getters( } )+) => ( pub mod getters { - use kinds::Copy; - $(pub trait $name<$($T),+> { - $(fn $method(&self) -> $T;)+ + $(fn $method<'a>(&'a self) -> &'a $T;)+ })+ - $(impl<$($T:Copy),+> $name<$($T),+> for ($($T),+) { + $(impl<$($T),+> $name<$($T),+> for ($($T),+) { $( #[inline(always)] - fn $method(&self) -> $T { + fn $method<'a>(&'a self) -> &'a $T { match *self { $accessor => $t } @@ -279,113 +277,113 @@ macro_rules! tuple_getters( tuple_getters!( Tuple2 { - fn n0 -> A { (a,_) => a } - fn n1 -> B { (_,b) => b } + fn n0 -> A { (ref a,_) => a } + fn n1 -> B { (_,ref b) => b } } Tuple3 { - fn n0 -> A { (a,_,_) => a } - fn n1 -> B { (_,b,_) => b } - fn n2 -> C { (_,_,c) => c } + fn n0 -> A { (ref a,_,_) => a } + fn n1 -> B { (_,ref b,_) => b } + fn n2 -> C { (_,_,ref c) => c } } Tuple4 { - fn n0 -> A { (a,_,_,_) => a } - fn n1 -> B { (_,b,_,_) => b } - fn n2 -> C { (_,_,c,_) => c } - fn n3 -> D { (_,_,_,d) => d } + fn n0 -> A { (ref a,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_) => b } + fn n2 -> C { (_,_,ref c,_) => c } + fn n3 -> D { (_,_,_,ref d) => d } } 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 } + fn n0 -> A { (ref a,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_) => d } + fn n4 -> E { (_,_,_,_,ref e) => e } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f) => f } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g) => g } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,ref h) => h } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,ref h,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,ref i) => i } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,ref h,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,ref i,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,ref j) => j } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g,_,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,ref h,_,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,ref i,_,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,ref j,_) => j } + fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,ref k) => k } } 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 } + fn n0 -> A { (ref a,_,_,_,_,_,_,_,_,_,_,_) => a } + fn n1 -> B { (_,ref b,_,_,_,_,_,_,_,_,_,_) => b } + fn n2 -> C { (_,_,ref c,_,_,_,_,_,_,_,_,_) => c } + fn n3 -> D { (_,_,_,ref d,_,_,_,_,_,_,_,_) => d } + fn n4 -> E { (_,_,_,_,ref e,_,_,_,_,_,_,_) => e } + fn n5 -> F { (_,_,_,_,_,ref f,_,_,_,_,_,_) => f } + fn n6 -> G { (_,_,_,_,_,_,ref g,_,_,_,_,_) => g } + fn n7 -> H { (_,_,_,_,_,_,_,ref h,_,_,_,_) => h } + fn n8 -> I { (_,_,_,_,_,_,_,_,ref i,_,_,_) => i } + fn n9 -> J { (_,_,_,_,_,_,_,_,_,ref j,_,_) => j } + fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,ref k,_) => k } + fn n11 -> L { (_,_,_,_,_,_,_,_,_,_,_,ref l) => l } } ) @@ -415,16 +413,16 @@ fn test_clone() { #[test] fn test_n_tuple() { let t = (0u8, 1u16, 2u32, 3u64, 4u, 5i8, 6i16, 7i32, 8i64, 9i, 10f32, 11f64); - assert_eq!(t.n0(), 0u8); - assert_eq!(t.n1(), 1u16); - assert_eq!(t.n2(), 2u32); - assert_eq!(t.n3(), 3u64); - assert_eq!(t.n4(), 4u); - assert_eq!(t.n5(), 5i8); - assert_eq!(t.n6(), 6i16); - assert_eq!(t.n7(), 7i32); - assert_eq!(t.n8(), 8i64); - assert_eq!(t.n9(), 9i); - assert_eq!(t.n10(), 10f32); - assert_eq!(t.n11(), 11f64); + assert_eq!(*t.n0(), 0u8); + assert_eq!(*t.n1(), 1u16); + assert_eq!(*t.n2(), 2u32); + assert_eq!(*t.n3(), 3u64); + assert_eq!(*t.n4(), 4u); + assert_eq!(*t.n5(), 5i8); + assert_eq!(*t.n6(), 6i16); + assert_eq!(*t.n7(), 7i32); + assert_eq!(*t.n8(), 8i64); + assert_eq!(*t.n9(), 9i); + assert_eq!(*t.n10(), 10f32); + assert_eq!(*t.n11(), 11f64); }