@@ -18,7 +18,8 @@ use kinds::Send;
18
18
use rt;
19
19
use rt:: sched:: Scheduler ;
20
20
use rt:: local:: Local ;
21
- use rt:: select:: { Select , SelectPort } ;
21
+ use rt:: select:: { SelectInner , SelectPortInner } ;
22
+ use select:: { Select , SelectPort } ;
22
23
use unstable:: atomics:: { AtomicUint , AtomicOption , Acquire , Relaxed , SeqCst } ;
23
24
use unstable:: sync:: UnsafeAtomicRcBox ;
24
25
use util:: Void ;
@@ -215,7 +216,7 @@ impl<T> PortOne<T> {
215
216
}
216
217
}
217
218
218
- impl < T > Select for PortOne < T > {
219
+ impl < T > SelectInner for PortOne < T > {
219
220
#[ inline] #[ cfg( not( test) ) ]
220
221
fn optimistic_check ( & mut self ) -> bool {
221
222
unsafe { ( * self . packet ( ) ) . state . load ( Acquire ) == STATE_ONE }
@@ -318,7 +319,9 @@ impl<T> Select for PortOne<T> {
318
319
}
319
320
}
320
321
321
- impl < T > SelectPort < T > for PortOne < T > {
322
+ impl < T > Select for PortOne < T > { }
323
+
324
+ impl < T > SelectPortInner < T > for PortOne < T > {
322
325
fn recv_ready ( self ) -> Option < T > {
323
326
let mut this = self ;
324
327
let packet = this. packet ( ) ;
@@ -349,6 +352,8 @@ impl<T> SelectPort<T> for PortOne<T> {
349
352
}
350
353
}
351
354
355
+ impl < T > SelectPort < T > for PortOne < T > { }
356
+
352
357
impl < T > Peekable < T > for PortOne < T > {
353
358
fn peek ( & self ) -> bool {
354
359
unsafe {
@@ -513,7 +518,7 @@ impl<T> Peekable<T> for Port<T> {
513
518
// of them, but a &Port<T> should also be selectable so you can select2 on it
514
519
// alongside a PortOne<U> without passing the port by value in recv_ready.
515
520
516
- impl < ' self , T > Select for & ' self Port < T > {
521
+ impl < ' self , T > SelectInner for & ' self Port < T > {
517
522
#[ inline]
518
523
fn optimistic_check ( & mut self ) -> bool {
519
524
do self . next . with_mut_ref |pone| { pone. optimistic_check ( ) }
@@ -531,7 +536,9 @@ impl<'self, T> Select for &'self Port<T> {
531
536
}
532
537
}
533
538
534
- impl < T > Select for Port < T > {
539
+ impl < ' self , T > Select for & ' self Port < T > { }
540
+
541
+ impl < T > SelectInner for Port < T > {
535
542
#[ inline]
536
543
fn optimistic_check ( & mut self ) -> bool {
537
544
( & * self ) . optimistic_check ( )
@@ -548,7 +555,9 @@ impl<T> Select for Port<T> {
548
555
}
549
556
}
550
557
551
- impl < ' self , T > SelectPort < T > for & ' self Port < T > {
558
+ impl < T > Select for Port < T > { }
559
+
560
+ impl < ' self , T > SelectPortInner < T > for & ' self Port < T > {
552
561
fn recv_ready ( self ) -> Option < T > {
553
562
match self . next . take ( ) . recv_ready ( ) {
554
563
Some ( StreamPayload { val, next } ) => {
@@ -560,6 +569,8 @@ impl<'self, T> SelectPort<T> for &'self Port<T> {
560
569
}
561
570
}
562
571
572
+ impl < ' self , T > SelectPort < T > for & ' self Port < T > { }
573
+
563
574
pub struct SharedChan < T > {
564
575
// Just like Chan, but a shared AtomicOption instead of Cell
565
576
priv next : UnsafeAtomicRcBox < AtomicOption < StreamChanOne < T > > >
0 commit comments