@@ -14,7 +14,6 @@ Message passing
14
14
15
15
#[ allow( missing_doc) ] ;
16
16
17
- use cast:: transmute;
18
17
use either:: { Either , Left , Right } ;
19
18
use kinds:: Send ;
20
19
use option:: { Option , Some } ;
@@ -23,12 +22,6 @@ pub use rt::comm::SendDeferred;
23
22
use rtcomm = rt:: comm;
24
23
use rt;
25
24
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
-
32
25
/// A trait for things that can send multiple messages.
33
26
pub trait GenericChan < T > {
34
27
/// Sends a message.
@@ -146,15 +139,6 @@ impl<T: Send> Peekable<T> for Port<T> {
146
139
}
147
140
}
148
141
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
-
158
142
/// A channel that can be shared between many senders.
159
143
pub struct SharedChan < T > {
160
144
inner : Either < Exclusive < pipesy:: Chan < T > > , rtcomm:: SharedChan < T > >
@@ -318,8 +302,8 @@ mod pipesy {
318
302
319
303
use kinds:: Send ;
320
304
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 } ;
323
307
use cast:: transmute_mut;
324
308
325
309
/*proto! oneshot (
@@ -651,103 +635,13 @@ mod pipesy {
651
635
}
652
636
}
653
637
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
- }
728
638
}
729
639
730
640
#[ cfg( test) ]
731
641
mod test {
732
642
use either:: Right ;
733
643
use super :: { Chan , Port , oneshot, stream} ;
734
644
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
-
751
645
#[ test]
752
646
fn test_oneshot ( ) {
753
647
let ( p, c) = oneshot ( ) ;
0 commit comments