From 71339d9e699bc5406985f4ea6ffc22f70a780909 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Tue, 10 Jul 2012 16:46:16 -0700 Subject: [PATCH] Pipe code cleanup --- src/libcore/pipes.rs | 28 +++++++++------------------- src/test/run-pass/pipe-select.rs | 4 ++-- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 794f2d3890b4..658d59a43757 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -133,7 +133,6 @@ fn try_recv(-p: recv_packet) -> option { rustrt::task_clear_event_reject(this); let old_state = swap_state_acq(p.header.state, blocked); - #debug("%?", old_state); alt old_state { empty { #debug("no data available on %?, going to sleep.", p_); @@ -230,7 +229,7 @@ impl private_methods for packet_header { #[doc = "Returns when one of the packet headers reports data is available."] -fn wait_many(pkts: ~[&a.packet_header]) -> uint { +fn wait_many(pkts: &[&a.packet_header]) -> uint { let this = rustrt::rust_get_task(); rustrt::task_clear_event_reject(this); @@ -283,39 +282,30 @@ fn select2( +b: recv_packet) -> either<(option, recv_packet), (recv_packet, option)> { - let a = unsafe { uniquify(a.unwrap()) }; - let b = unsafe { uniquify(b.unwrap()) }; - let i = { - let headers = ~[&a.header, - &b.header]; - wait_many(headers) - }; + let i = wait_many([a.header(), b.header()]/_); unsafe { alt i { - 0 { left((try_recv(recv_packet(transmute(a))), - recv_packet(transmute(b)))) } - 1 { right((recv_packet(transmute(a)), - try_recv(recv_packet(transmute(b))))) } + 0 { left((try_recv(a), b)) } + 1 { right((a, try_recv(b))) } _ { fail "select2 return an invalid packet" } } } } +fn selecti(endpoints: &[&recv_packet]) -> uint { + wait_many(endpoints.map(|p| p.header())) +} + #[doc = "Waits on a set of endpoints. Returns a message, its index, and a list of the remaining endpoints."] fn select(+endpoints: ~[recv_packet]) -> (uint, option, ~[recv_packet]) { - let endpoints = vec::map_consume( - endpoints, - |p| unsafe { uniquify(p.unwrap()) }); - let endpoints_r = vec::view(endpoints, 0, endpoints.len()); - let ready = wait_many(endpoints_r.map_r(|p| &p.header)); + let ready = wait_many(endpoints.map(|p| p.header())); let mut remaining = ~[]; let mut result = none; do vec::consume(endpoints) |i, p| { - let p = recv_packet(unsafe { unsafe::transmute(p) }); if i == ready { result = try_recv(p); } diff --git a/src/test/run-pass/pipe-select.rs b/src/test/run-pass/pipe-select.rs index 1b1cc8180747..7142da808482 100644 --- a/src/test/run-pass/pipe-select.rs +++ b/src/test/run-pass/pipe-select.rs @@ -51,7 +51,7 @@ fn main() { }); let (c1, p1) = oneshot::init(); - let (c2, p2) = oneshot::init(); + let (_c2, p2) = oneshot::init(); let c = send(c, (p1, p2)); @@ -59,7 +59,7 @@ fn main() { signal(c1); - let (c1, p1) = oneshot::init(); + let (_c1, p1) = oneshot::init(); let (c2, p2) = oneshot::init(); send(c, (p1, p2));