diff --git a/src/libstd/comm.rs b/src/libstd/comm.rs index 18c7674873f1..ec8314795ac0 100644 --- a/src/libstd/comm.rs +++ b/src/libstd/comm.rs @@ -66,15 +66,6 @@ pub fn stream() -> (Port, Chan) { (Port { x: p }, Chan { x: c }) } -pub struct SharedChan { x: rtcomm::SharedChan } - -impl SharedChan { - pub fn new(c: Chan) -> SharedChan { - let Chan { x: c } = c; - SharedChan { x: rtcomm::SharedChan::new(c) } - } -} - impl ChanOne { pub fn send(self, val: T) { let ChanOne { x: c } = self; @@ -161,6 +152,16 @@ impl Peekable for Port { } } + +pub struct SharedChan { x: rtcomm::SharedChan } + +impl SharedChan { + pub fn new(c: Chan) -> SharedChan { + let Chan { x: c } = c; + SharedChan { x: rtcomm::SharedChan::new(c) } + } +} + impl GenericChan for SharedChan { fn send(&self, val: T) { let &SharedChan { x: ref c } = self; @@ -193,3 +194,31 @@ impl Clone for SharedChan { SharedChan { x: c.clone() } } } + +pub struct SharedPort { x: rtcomm::SharedPort } + +impl SharedPort { + pub fn new(p: Port) -> SharedPort { + let Port { x: p } = p; + SharedPort { x: rtcomm::SharedPort::new(p) } + } +} + +impl GenericPort for SharedPort { + fn recv(&self) -> T { + let &SharedPort { x: ref p } = self; + p.recv() + } + + fn try_recv(&self) -> Option { + let &SharedPort { x: ref p } = self; + p.try_recv() + } +} + +impl Clone for SharedPort { + fn clone(&self) -> SharedPort { + let &SharedPort { x: ref p } = self; + SharedPort { x: p.clone() } + } +}