about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-08-01 07:46:38 -0700
committerbors <bors@rust-lang.org>2013-08-01 07:46:38 -0700
commitfe28ac6891ae2619094e88d9b7859772e685a27f (patch)
treec7e0ccbdf6c36ba41212bf3e8d61947ed6cad843 /src/libstd
parent18d124b9b5dcb9915e5e1489eed81ed6a8b90c39 (diff)
parentebd14c92f8b15f6d9388ea9bf6f19793a1b77a59 (diff)
downloadrust-fe28ac6891ae2619094e88d9b7859772e685a27f.tar.gz
rust-fe28ac6891ae2619094e88d9b7859772e685a27f.zip
auto merge of #8164 : brson/rust/noportset, r=pcwalton
...haredChan.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/comm.rs83
1 files changed, 2 insertions, 81 deletions
diff --git a/src/libstd/comm.rs b/src/libstd/comm.rs
index 9fe6aa57958..acdf2cee841 100644
--- a/src/libstd/comm.rs
+++ b/src/libstd/comm.rs
@@ -14,14 +14,10 @@ Message passing
 
 #[allow(missing_doc)];
 
-use cast::{transmute, transmute_mut};
-use container::Container;
+use cast::transmute;
 use either::{Either, Left, Right};
 use kinds::Send;
-use option::{Option, Some, None};
-use uint;
-use vec::OwnedVector;
-use util::replace;
+use option::{Option, Some};
 use unstable::sync::Exclusive;
 use rtcomm = rt::comm;
 use rt;
@@ -143,81 +139,6 @@ impl<T: Send> Selectable for Port<T> {
     }
 }
 
-/// Treat many ports as one.
-#[unsafe_mut_field(ports)]
-pub struct PortSet<T> {
-    ports: ~[pipesy::Port<T>],
-}
-
-impl<T: Send> PortSet<T> {
-    pub fn new() -> PortSet<T> {
-        PortSet {
-            ports: ~[]
-        }
-    }
-
-    pub fn add(&self, port: Port<T>) {
-        let Port { inner } = port;
-        let port = match inner {
-            Left(p) => p,
-            Right(_) => fail!("PortSet not implemented")
-        };
-        unsafe {
-            let self_ports = transmute_mut(&self.ports);
-            self_ports.push(port)
-        }
-    }
-
-    pub fn chan(&self) -> Chan<T> {
-        let (po, ch) = stream();
-        self.add(po);
-        ch
-    }
-}
-
-impl<T:Send> GenericPort<T> for PortSet<T> {
-    fn try_recv(&self) -> Option<T> {
-        unsafe {
-            let self_ports = transmute_mut(&self.ports);
-            let mut result = None;
-            // we have to swap the ports array so we aren't borrowing
-            // aliasable mutable memory.
-            let mut ports = replace(self_ports, ~[]);
-            while result.is_none() && ports.len() > 0 {
-                let i = wait_many(ports);
-                match ports[i].try_recv() {
-                    Some(m) => {
-                        result = Some(m);
-                    }
-                    None => {
-                        // Remove this port.
-                        let _ = ports.swap_remove(i);
-                    }
-                }
-            }
-            *self_ports = ports;
-            result
-        }
-    }
-    fn recv(&self) -> T {
-        self.try_recv().expect("port_set: endpoints closed")
-    }
-}
-
-impl<T: Send> Peekable<T> for PortSet<T> {
-    fn peek(&self) -> bool {
-        // It'd be nice to use self.port.each, but that version isn't
-        // pure.
-        for uint::range(0, self.ports.len()) |i| {
-            let port: &pipesy::Port<T> = &self.ports[i];
-            if port.peek() {
-                return true;
-            }
-        }
-        false
-    }
-}
-
 /// A channel that can be shared between many senders.
 pub struct SharedChan<T> {
     inner: Either<Exclusive<pipesy::Chan<T>>, rtcomm::SharedChan<T>>