@@ -14,7 +14,6 @@ Message passing
1414
1515#[ allow( missing_doc) ] ;
1616
17- use cast:: transmute;
1817use either:: { Either , Left , Right } ;
1918use kinds:: Send ;
2019use option:: { Option , Some } ;
@@ -23,12 +22,6 @@ pub use rt::comm::SendDeferred;
2322use rtcomm = rt:: comm;
2423use rt;
2524
26- use pipes:: { wait_many, PacketHeader } ;
27-
28- // FIXME #5160: Making this public exposes some plumbing from
29- // pipes. Needs some refactoring
30- pub use pipes:: Selectable ;
31-
3225/// A trait for things that can send multiple messages.
3326pub trait GenericChan < T > {
3427 /// Sends a message.
@@ -146,15 +139,6 @@ impl<T: Send> Peekable<T> for Port<T> {
146139 }
147140}
148141
149- impl < T : Send > Selectable for Port < T > {
150- fn header ( & mut self ) -> * mut PacketHeader {
151- match self . inner {
152- Left ( ref mut port) => port. header ( ) ,
153- Right ( _) => fail ! ( "can't select on newsched ports" )
154- }
155- }
156- }
157-
158142/// A channel that can be shared between many senders.
159143pub struct SharedChan < T > {
160144 inner : Either < Exclusive < pipesy:: Chan < T > > , rtcomm:: SharedChan < T > >
@@ -318,8 +302,8 @@ mod pipesy {
318302
319303 use kinds:: Send ;
320304 use option:: { Option , Some , None } ;
321- use pipes:: { recv, try_recv, peek, PacketHeader } ;
322- use super :: { GenericChan , GenericSmartChan , GenericPort , Peekable , Selectable } ;
305+ use pipes:: { recv, try_recv, peek} ;
306+ use super :: { GenericChan , GenericSmartChan , GenericPort , Peekable } ;
323307 use cast:: transmute_mut;
324308
325309 /*proto! oneshot (
@@ -651,103 +635,13 @@ mod pipesy {
651635 }
652636 }
653637
654- impl < T : Send > Selectable for Port < T > {
655- fn header ( & mut self ) -> * mut PacketHeader {
656- match self . endp {
657- Some ( ref mut endp) => endp. header ( ) ,
658- None => fail ! ( "peeking empty stream" )
659- }
660- }
661- }
662-
663- }
664-
665- /// Returns the index of an endpoint that is ready to receive.
666- pub fn selecti < T : Selectable > ( endpoints : & mut [ T ] ) -> uint {
667- wait_many ( endpoints)
668- }
669-
670- /// Returns 0 or 1 depending on which endpoint is ready to receive
671- pub fn select2i < A : Selectable , B : Selectable > ( a : & mut A , b : & mut B )
672- -> Either < ( ) , ( ) > {
673- let mut endpoints = [ a. header ( ) , b. header ( ) ] ;
674- match wait_many ( endpoints) {
675- 0 => Left ( ( ) ) ,
676- 1 => Right ( ( ) ) ,
677- _ => fail ! ( "wait returned unexpected index" ) ,
678- }
679- }
680-
681- /// Receive a message from one of two endpoints.
682- pub trait Select2 < T : Send , U : Send > {
683- /// Receive a message or return `None` if a connection closes.
684- fn try_select ( & mut self ) -> Either < Option < T > , Option < U > > ;
685- /// Receive a message or fail if a connection closes.
686- fn select ( & mut self ) -> Either < T , U > ;
687- }
688-
689- impl < T : Send ,
690- U : Send ,
691- Left : Selectable + GenericPort < T > ,
692- Right : Selectable + GenericPort < U > >
693- Select2 < T , U >
694- for ( Left , Right ) {
695- fn select ( & mut self ) -> Either < T , U > {
696- // XXX: Bad borrow check workaround.
697- unsafe {
698- let this: & ( Left , Right ) = transmute ( self ) ;
699- match * this {
700- ( ref lp, ref rp) => {
701- let lp: & mut Left = transmute ( lp) ;
702- let rp: & mut Right = transmute ( rp) ;
703- match select2i ( lp, rp) {
704- Left ( ( ) ) => Left ( lp. recv ( ) ) ,
705- Right ( ( ) ) => Right ( rp. recv ( ) ) ,
706- }
707- }
708- }
709- }
710- }
711-
712- fn try_select ( & mut self ) -> Either < Option < T > , Option < U > > {
713- // XXX: Bad borrow check workaround.
714- unsafe {
715- let this: & ( Left , Right ) = transmute ( self ) ;
716- match * this {
717- ( ref lp, ref rp) => {
718- let lp: & mut Left = transmute ( lp) ;
719- let rp: & mut Right = transmute ( rp) ;
720- match select2i ( lp, rp) {
721- Left ( ( ) ) => Left ( lp. try_recv ( ) ) ,
722- Right ( ( ) ) => Right ( rp. try_recv ( ) ) ,
723- }
724- }
725- }
726- }
727- }
728638}
729639
730640#[ cfg( test) ]
731641mod test {
732642 use either:: Right ;
733643 use super :: { Chan , Port , oneshot, stream} ;
734644
735- #[ test]
736- fn test_select2 ( ) {
737- let ( p1, c1) = stream ( ) ;
738- let ( p2, c2) = stream ( ) ;
739-
740- c1. send ( ~"abc") ;
741-
742- let mut tuple = ( p1, p2) ;
743- match tuple. select ( ) {
744- Right ( _) => fail ! ( ) ,
745- _ => ( ) ,
746- }
747-
748- c2. send ( 123 ) ;
749- }
750-
751645 #[ test]
752646 fn test_oneshot ( ) {
753647 let ( p, c) = oneshot ( ) ;
0 commit comments