Skip to content

Commit

Permalink
Remove old tests and code for select
Browse files Browse the repository at this point in the history
Not compatible with newsched
  • Loading branch information
brson committed Aug 4, 2013
1 parent 2f8346b commit 3f4c6ce
Show file tree
Hide file tree
Showing 4 changed files with 3 additions and 199 deletions.
9 changes: 1 addition & 8 deletions src/libextra/comm.rs
Expand Up @@ -18,9 +18,8 @@ Higher level communication abstractions.


use std::comm::{GenericChan, GenericSmartChan, GenericPort};
use std::comm::{Chan, Port, Selectable, Peekable};
use std::comm::{Chan, Port, Peekable};
use std::comm;
use std::pipes;

/// An extension of `pipes::stream` that allows both sending and receiving.
pub struct DuplexStream<T, U> {
Expand Down Expand Up @@ -75,12 +74,6 @@ impl<T:Send,U:Send> Peekable<U> for DuplexStream<T, U> {
}
}

impl<T:Send,U:Send> Selectable for DuplexStream<T, U> {
fn header(&mut self) -> *mut pipes::PacketHeader {
self.port.header()
}
}

/// Creates a bidirectional stream.
pub fn DuplexStream<T:Send,U:Send>()
-> (DuplexStream<T, U>, DuplexStream<U, T>)
Expand Down
110 changes: 2 additions & 108 deletions src/libstd/comm.rs
Expand Up @@ -14,7 +14,6 @@ Message passing

#[allow(missing_doc)];

use cast::transmute;
use either::{Either, Left, Right};
use kinds::Send;
use option::{Option, Some};
Expand All @@ -23,12 +22,6 @@ pub use rt::comm::SendDeferred;
use rtcomm = rt::comm;
use rt;

use pipes::{wait_many, PacketHeader};

// FIXME #5160: Making this public exposes some plumbing from
// pipes. Needs some refactoring
pub use pipes::Selectable;

/// A trait for things that can send multiple messages.
pub trait GenericChan<T> {
/// Sends a message.
Expand Down Expand Up @@ -146,15 +139,6 @@ impl<T: Send> Peekable<T> for Port<T> {
}
}

impl<T: Send> Selectable for Port<T> {
fn header(&mut self) -> *mut PacketHeader {
match self.inner {
Left(ref mut port) => port.header(),
Right(_) => fail!("can't select on newsched ports")
}
}
}

/// A channel that can be shared between many senders.
pub struct SharedChan<T> {
inner: Either<Exclusive<pipesy::Chan<T>>, rtcomm::SharedChan<T>>
Expand Down Expand Up @@ -318,8 +302,8 @@ mod pipesy {

use kinds::Send;
use option::{Option, Some, None};
use pipes::{recv, try_recv, peek, PacketHeader};
use super::{GenericChan, GenericSmartChan, GenericPort, Peekable, Selectable};
use pipes::{recv, try_recv, peek};
use super::{GenericChan, GenericSmartChan, GenericPort, Peekable};
use cast::transmute_mut;

/*proto! oneshot (
Expand Down Expand Up @@ -651,103 +635,13 @@ mod pipesy {
}
}

impl<T: Send> Selectable for Port<T> {
fn header(&mut self) -> *mut PacketHeader {
match self.endp {
Some(ref mut endp) => endp.header(),
None => fail!("peeking empty stream")
}
}
}

}

/// Returns the index of an endpoint that is ready to receive.
pub fn selecti<T: Selectable>(endpoints: &mut [T]) -> uint {
wait_many(endpoints)
}

/// Returns 0 or 1 depending on which endpoint is ready to receive
pub fn select2i<A:Selectable, B:Selectable>(a: &mut A, b: &mut B)
-> Either<(), ()> {
let mut endpoints = [ a.header(), b.header() ];
match wait_many(endpoints) {
0 => Left(()),
1 => Right(()),
_ => fail!("wait returned unexpected index"),
}
}

/// Receive a message from one of two endpoints.
pub trait Select2<T: Send, U: Send> {
/// Receive a message or return `None` if a connection closes.
fn try_select(&mut self) -> Either<Option<T>, Option<U>>;
/// Receive a message or fail if a connection closes.
fn select(&mut self) -> Either<T, U>;
}

impl<T:Send,
U:Send,
Left:Selectable + GenericPort<T>,
Right:Selectable + GenericPort<U>>
Select2<T, U>
for (Left, Right) {
fn select(&mut self) -> Either<T, U> {
// XXX: Bad borrow check workaround.
unsafe {
let this: &(Left, Right) = transmute(self);
match *this {
(ref lp, ref rp) => {
let lp: &mut Left = transmute(lp);
let rp: &mut Right = transmute(rp);
match select2i(lp, rp) {
Left(()) => Left(lp.recv()),
Right(()) => Right(rp.recv()),
}
}
}
}
}

fn try_select(&mut self) -> Either<Option<T>, Option<U>> {
// XXX: Bad borrow check workaround.
unsafe {
let this: &(Left, Right) = transmute(self);
match *this {
(ref lp, ref rp) => {
let lp: &mut Left = transmute(lp);
let rp: &mut Right = transmute(rp);
match select2i(lp, rp) {
Left(()) => Left (lp.try_recv()),
Right(()) => Right(rp.try_recv()),
}
}
}
}
}
}

#[cfg(test)]
mod test {
use either::Right;
use super::{Chan, Port, oneshot, stream};

#[test]
fn test_select2() {
let (p1, c1) = stream();
let (p2, c2) = stream();

c1.send(~"abc");

let mut tuple = (p1, p2);
match tuple.select() {
Right(_) => fail!(),
_ => (),
}

c2.send(123);
}

#[test]
fn test_oneshot() {
let (p, c) = oneshot();
Expand Down
44 changes: 0 additions & 44 deletions src/libstd/pipes.rs
Expand Up @@ -868,47 +868,3 @@ pub mod rt {
pub fn make_some<T>(val: T) -> Option<T> { Some(val) }
pub fn make_none<T>() -> Option<T> { None }
}

#[cfg(test)]
mod test {
use either::Right;
use comm::{Chan, Port, oneshot, recv_one, stream, Select2,
GenericChan, Peekable};

#[test]
fn test_select2() {
let (p1, c1) = stream();
let (p2, c2) = stream();

c1.send(~"abc");

let mut tuple = (p1, p2);
match tuple.select() {
Right(_) => fail!(),
_ => (),
}

c2.send(123);
}

#[test]
fn test_oneshot() {
let (p, c) = oneshot();

c.send(());

recv_one(p)
}

#[test]
fn test_peek_terminated() {
let (port, chan): (Port<int>, Chan<int>) = stream();

{
// Destroy the channel
let _chan = chan;
}

assert!(!port.peek());
}
}
39 changes: 0 additions & 39 deletions src/test/run-pass/issue-3176.rs

This file was deleted.

5 comments on commit 3f4c6ce

@bors
Copy link
Contributor

@bors bors commented on 3f4c6ce Aug 5, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from brson
at brson@3f4c6ce

@bors
Copy link
Contributor

@bors bors commented on 3f4c6ce Aug 5, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging brson/rust/more-newsched-fixes = 3f4c6ce into auto

@bors
Copy link
Contributor

@bors bors commented on 3f4c6ce Aug 5, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

brson/rust/more-newsched-fixes = 3f4c6ce merged ok, testing candidate = dc5b0b9

@bors
Copy link
Contributor

@bors bors commented on 3f4c6ce Aug 5, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = dc5b0b9

Please sign in to comment.