diff options
| author | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2013-05-18 20:05:40 +1000 |
|---|---|---|
| committer | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2013-05-18 20:05:40 +1000 |
| commit | b6038b76339deefc340fa709009a7bea069270e4 (patch) | |
| tree | ac322341677763241ce17a22bf680d1cb7cebf4d | |
| parent | 5242464d543f0a7e811bcfd7fe8943b62842148a (diff) | |
| download | rust-b6038b76339deefc340fa709009a7bea069270e4.tar.gz rust-b6038b76339deefc340fa709009a7bea069270e4.zip | |
Return a reference to the tuple elements instead of copying
| -rw-r--r-- | src/libcore/tuple.rs | 186 |
1 files changed, 92 insertions, 94 deletions
diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 1dfdb42c303..c872839146a 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); } |
