Skip to content

Commit 6869f64

Browse files
committed
---
yaml --- r: 23283 b: refs/heads/master c: 924e787 h: refs/heads/master i: 23281: 61fd3ed 23279: 815a6d2 v: v3
1 parent 9b09ba5 commit 6869f64

File tree

12 files changed

+252
-170
lines changed

12 files changed

+252
-170
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 91622d03104c4d77c1c8bbb15e0600362f247db3
2+
refs/heads/master: 924e787119969c740911d0d1aaf28ab19b77c1a2
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be

trunk/src/libstd/arc.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,12 +420,11 @@ mod tests {
420420
let v = ~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
421421
let arc_v = arc::arc(v);
422422

423-
let p = port();
424-
let c = chan(p);
423+
let (c, p) = pipes::stream();
425424

426425
do task::spawn() {
427-
let p = port();
428-
c.send(chan(p));
426+
let p = pipes::port_set();
427+
c.send(p.chan());
429428

430429
let arc_v = p.recv();
431430

trunk/src/libstd/comm.rs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*!
2+
3+
Higher level communication abstractions.
4+
5+
*/
6+
7+
// NB: transitionary, de-mode-ing.
8+
#[forbid(deprecated_mode)];
9+
#[forbid(deprecated_pattern)];
10+
11+
// Make sure we follow the new conventions
12+
#[forbid(non_camel_case_types)];
13+
14+
import pipes::{channel, recv, chan, port, selectable};
15+
16+
export DuplexStream;
17+
18+
/// An extension of `pipes::stream` that allows both sending and receiving.
19+
struct DuplexStream<T: send, U: send> : channel<T>, recv<U>, selectable {
20+
priv chan: chan<T>;
21+
priv port: port<U>;
22+
23+
fn send(+x: T) {
24+
self.chan.send(x)
25+
}
26+
27+
fn try_send(+x: T) -> bool {
28+
self.chan.try_send(x)
29+
}
30+
31+
fn recv() -> U {
32+
self.port.recv()
33+
}
34+
35+
fn try_recv() -> option<U> {
36+
self.port.try_recv()
37+
}
38+
39+
pure fn peek() -> bool {
40+
self.port.peek()
41+
}
42+
43+
pure fn header() -> *pipes::packet_header {
44+
self.port.header()
45+
}
46+
}
47+
48+
/// Creates a bidirectional stream.
49+
fn DuplexStream<T: send, U: send>()
50+
-> (DuplexStream<T, U>, DuplexStream<U, T>)
51+
{
52+
let (c2, p1) = pipes::stream();
53+
let (c1, p2) = pipes::stream();
54+
(DuplexStream {
55+
chan: c1,
56+
port: p1
57+
},
58+
DuplexStream {
59+
chan: c2,
60+
port: p2
61+
})
62+
}
63+
64+
#[cfg(test)]
65+
mod test {
66+
#[test]
67+
fn DuplexStream1() {
68+
let (left, right) = DuplexStream();
69+
70+
left.send(~"abc");
71+
right.send(123);
72+
73+
assert left.recv() == 123;
74+
assert right.recv() == ~"abc";
75+
}
76+
}

trunk/src/libstd/net_ip.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import create_uv_getaddrinfo_t = uv::ll::getaddrinfo_t;
1919
import set_data_for_req = uv::ll::set_data_for_req;
2020
import get_data_for_req = uv::ll::get_data_for_req;
2121
import ll = uv::ll;
22+
import comm = core::comm;
2223

2324
export ip_addr, parse_addr_err;
2425
export format_addr;
@@ -85,7 +86,7 @@ enum ip_get_addr_err {
8586
*/
8687
fn get_addr(++node: ~str, iotask: iotask)
8788
-> result::result<~[ip_addr], ip_get_addr_err> unsafe {
88-
do comm::listen |output_ch| {
89+
do core::comm::listen |output_ch| {
8990
do str::as_buf(node) |node_ptr, len| {
9091
log(debug, fmt!{"slice len %?", len});
9192
let handle = create_uv_getaddrinfo_t();

0 commit comments

Comments
 (0)