1
Fork 0

replace core::tuple functions with methods

This commit is contained in:
Gareth Daniel Smith 2012-07-16 22:32:59 +01:00
parent 000d12f4af
commit fe43d66613
8 changed files with 34 additions and 29 deletions

View file

@ -6,6 +6,7 @@ import option::{some, none};
import option = option::option; import option = option::option;
import path = path::path; import path = path::path;
import str::extensions; import str::extensions;
import tuple::extensions;
import vec::extensions; import vec::extensions;
import option::extensions; import option::extensions;
import option_iter::extensions; import option_iter::extensions;

View file

@ -878,7 +878,7 @@ unsafe fn key_to_key_value<T>(key: local_data_key<T>) -> *libc::c_void {
// Keys are closures, which are (fnptr,envptr) pairs. Use fnptr. // Keys are closures, which are (fnptr,envptr) pairs. Use fnptr.
// Use reintepret_cast -- transmute would leak (forget) the closure. // Use reintepret_cast -- transmute would leak (forget) the closure.
let pair: (*libc::c_void, *libc::c_void) = unsafe::reinterpret_cast(key); let pair: (*libc::c_void, *libc::c_void) = unsafe::reinterpret_cast(key);
tuple::first(pair) pair.first()
} }
// If returning some(..), returns with @T with the map's reference. Careful! // If returning some(..), returns with @T with the map's reference. Careful!

View file

@ -1,28 +1,33 @@
//! Operations on tuples //! Operations on tuples
/// Return the first element of a pair
pure fn first<T:copy, U:copy>(pair: (T, U)) -> T {
let (t, _) = pair;
ret t;
}
/// Return the second element of a pair impl extensions <T:copy, U:copy> for (T, U) {
pure fn second<T:copy, U:copy>(pair: (T, U)) -> U {
let (_, u) = pair; /// Return the first element of self
ret u; pure fn first() -> T {
} let (t, _) = self;
ret t;
}
/// Return the second element of self
pure fn second() -> U {
let (_, u) = self;
ret u;
}
/// Return the results of swapping the two elements of self
pure fn swap() -> (U, T) {
let (t, u) = self;
ret (u, t);
}
/// Return the results of swapping the two elements of a pair
pure fn swap<T:copy, U:copy>(pair: (T, U)) -> (U, T) {
let (t, u) = pair;
ret (u, t);
} }
#[test] #[test]
fn test_tuple() { fn test_tuple() {
assert first((948, 4039.48)) == 948; assert (948, 4039.48).first() == 948;
assert second((34.5, ~"foo")) == ~"foo"; assert (34.5, ~"foo").second() == ~"foo";
assert swap(('a', 2)) == (2, 'a'); assert ('a', 2).swap() == (2, 'a');
} }

View file

@ -22,8 +22,8 @@ fn merge_sort<T: copy>(le: le<T>, v: ~[const T]) -> ~[T] {
fn merge_sort_<T: copy>(le: le<T>, v: ~[const T], slice: slice) fn merge_sort_<T: copy>(le: le<T>, v: ~[const T], slice: slice)
-> ~[T] { -> ~[T] {
let begin = tuple::first(slice); let begin = slice.first();
let end = tuple::second(slice); let end = slice.second();
let v_len = end - begin; let v_len = end - begin;
if v_len == 0u { ret ~[]; } if v_len == 0u { ret ~[]; }

View file

@ -229,8 +229,8 @@ fn merge_method_attrs(
}; };
do vec::map2(docs, attrs) |doc, attrs| { do vec::map2(docs, attrs) |doc, attrs| {
assert doc.name == tuple::first(attrs); assert doc.name == attrs.first();
let desc = tuple::second(attrs); let desc = attrs.second();
{ {
desc: desc desc: desc

View file

@ -62,7 +62,7 @@ fn usage() {
println(~"Usage: rustdoc ~[options] <cratefile>\n"); println(~"Usage: rustdoc ~[options] <cratefile>\n");
println(~"Options:\n"); println(~"Options:\n");
for opts().each |opt| { for opts().each |opt| {
println(#fmt(" %s", tuple::second(opt))); println(#fmt(" %s", opt.second()));
} }
println(~""); println(~"");
} }
@ -99,7 +99,7 @@ fn parse_config_(
program_output: program_output program_output: program_output
) -> result<config, ~str> { ) -> result<config, ~str> {
let args = vec::tail(args); let args = vec::tail(args);
let opts = tuple::first(vec::unzip(opts())); let opts = vec::unzip(opts()).first();
alt getopts::getopts(args, opts) { alt getopts::getopts(args, opts) {
result::ok(match) { result::ok(match) {
if vec::len(match.free) == 1u { if vec::len(match.free) == 1u {

View file

@ -801,7 +801,7 @@ mod test {
) -> ~str { ) -> ~str {
let (writer_factory, po) = markdown_writer::future_writer_factory(); let (writer_factory, po) = markdown_writer::future_writer_factory();
write_markdown(doc, writer_factory); write_markdown(doc, writer_factory);
ret tuple::second(comm::recv(po)); ret comm::recv(po).second();
} }
fn write_markdown_str_srv( fn write_markdown_str_srv(
@ -811,7 +811,7 @@ mod test {
let (writer_factory, po) = markdown_writer::future_writer_factory(); let (writer_factory, po) = markdown_writer::future_writer_factory();
let pass = mk_pass(writer_factory); let pass = mk_pass(writer_factory);
pass.f(srv, doc); pass.f(srv, doc);
ret tuple::second(comm::recv(po)); ret comm::recv(po).second();
} }
#[test] #[test]

View file

@ -2,7 +2,6 @@
use std; use std;
import tuple::{first, second};
import std::list::{list, cons, nil}; import std::list::{list, cons, nil};
import std::time::precise_time_s; import std::time::precise_time_s;
@ -75,8 +74,8 @@ fn recurse_or_fail(depth: int, st: option<st>) {
unique: ~cons((), @*st.unique), unique: ~cons((), @*st.unique),
fn_box: fn@() -> @nillist { @cons((), fn_box()) }, fn_box: fn@() -> @nillist { @cons((), fn_box()) },
fn_unique: fn~() -> ~nillist { ~cons((), @*fn_unique()) }, fn_unique: fn~() -> ~nillist { ~cons((), @*fn_unique()) },
tuple: (@cons((), first(st.tuple)), tuple: (@cons((), st.tuple.first()),
~cons((), @*second(st.tuple))), ~cons((), @*st.tuple.second())),
vec: st.vec + ~[@cons((), st.vec.last())], vec: st.vec + ~[@cons((), st.vec.last())],
res: r(@cons((), st.res._l)) res: r(@cons((), st.res._l))
}) })