diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2012-10-07 16:01:01 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2012-10-07 17:20:19 -0700 |
| commit | 91b7a9a529cad2db9503fa469b2e2ce7a86257e6 (patch) | |
| tree | 953db0c34d69dfc5bc4bd7a1f114aa2710b978de /src/libcore/tuple.rs | |
| parent | d301dd3686ddd04845c1e9f5b9254aa3498a8a7b (diff) | |
| download | rust-91b7a9a529cad2db9503fa469b2e2ce7a86257e6.tar.gz rust-91b7a9a529cad2db9503fa469b2e2ce7a86257e6.zip | |
libcore: add first_ref and second_ref to tuples
Diffstat (limited to 'src/libcore/tuple.rs')
| -rw-r--r-- | src/libcore/tuple.rs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 246ce16c813..899b16eb132 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -6,13 +6,13 @@ use cmp::{Eq, Ord}; -pub trait TupleOps<T,U> { +pub trait CopyableTuple<T, U> { pure fn first() -> T; pure fn second() -> U; pure fn swap() -> (U, T); } -impl<T: Copy, U: Copy> (T, U): TupleOps<T,U> { +impl<T: Copy, U: Copy> (T, U): CopyableTuple<T, U> { /// Return the first element of self pure fn first() -> T { @@ -34,6 +34,24 @@ impl<T: Copy, U: Copy> (T, U): TupleOps<T,U> { } +pub trait ImmutableTuple<T, U> { + pure fn first_ref(&self) -> &self/T; + pure fn second_ref(&self) -> &self/U; +} + +impl<T, U> (T, U): ImmutableTuple<T, U> { + pure fn first_ref(&self) -> &self/T { + match *self { + (ref t, _) => t, + } + } + pure fn second_ref(&self) -> &self/U { + match *self { + (_, ref u) => u, + } + } +} + pub trait ExtendedTupleOps<A,B> { fn zip(&self) -> ~[(A, B)]; fn map<C>(&self, f: &fn(a: &A, b: &B) -> C) -> ~[C]; @@ -146,6 +164,13 @@ impl<A: Ord, B: Ord, C: Ord> (A, B, C) : Ord { } #[test] +fn test_tuple_ref() { + let (~"foo", ~"bar"); + assert x.first_ref() == &~"foo"; + assert x.second_ref() == &~"bar"; +} + +#[test] #[allow(non_implicitly_copyable_typarams)] fn test_tuple() { assert (948, 4039.48).first() == 948; |
