Skip to content

Commit c8c09d4

Browse files
committed
Reorganise Select traits to not expose internal runtime types. Close #5160. Pending #8215.
1 parent ee5cfb0 commit c8c09d4

File tree

5 files changed

+348
-313
lines changed

5 files changed

+348
-313
lines changed

src/libstd/rt/comm.rs

+17-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use kinds::Send;
1818
use rt;
1919
use rt::sched::Scheduler;
2020
use rt::local::Local;
21-
use rt::select::{Select, SelectPort};
21+
use rt::select::{SelectInner, SelectPortInner};
22+
use select::{Select, SelectPort};
2223
use unstable::atomics::{AtomicUint, AtomicOption, Acquire, Relaxed, SeqCst};
2324
use unstable::sync::UnsafeAtomicRcBox;
2425
use util::Void;
@@ -215,7 +216,7 @@ impl<T> PortOne<T> {
215216
}
216217
}
217218

218-
impl<T> Select for PortOne<T> {
219+
impl<T> SelectInner for PortOne<T> {
219220
#[inline] #[cfg(not(test))]
220221
fn optimistic_check(&mut self) -> bool {
221222
unsafe { (*self.packet()).state.load(Acquire) == STATE_ONE }
@@ -318,7 +319,9 @@ impl<T> Select for PortOne<T> {
318319
}
319320
}
320321

321-
impl<T> SelectPort<T> for PortOne<T> {
322+
impl<T> Select for PortOne<T> { }
323+
324+
impl<T> SelectPortInner<T> for PortOne<T> {
322325
fn recv_ready(self) -> Option<T> {
323326
let mut this = self;
324327
let packet = this.packet();
@@ -349,6 +352,8 @@ impl<T> SelectPort<T> for PortOne<T> {
349352
}
350353
}
351354

355+
impl<T> SelectPort<T> for PortOne<T> { }
356+
352357
impl<T> Peekable<T> for PortOne<T> {
353358
fn peek(&self) -> bool {
354359
unsafe {
@@ -513,7 +518,7 @@ impl<T> Peekable<T> for Port<T> {
513518
// of them, but a &Port<T> should also be selectable so you can select2 on it
514519
// alongside a PortOne<U> without passing the port by value in recv_ready.
515520

516-
impl<'self, T> Select for &'self Port<T> {
521+
impl<'self, T> SelectInner for &'self Port<T> {
517522
#[inline]
518523
fn optimistic_check(&mut self) -> bool {
519524
do self.next.with_mut_ref |pone| { pone.optimistic_check() }
@@ -531,7 +536,9 @@ impl<'self, T> Select for &'self Port<T> {
531536
}
532537
}
533538

534-
impl<T> Select for Port<T> {
539+
impl<'self, T> Select for &'self Port<T> { }
540+
541+
impl<T> SelectInner for Port<T> {
535542
#[inline]
536543
fn optimistic_check(&mut self) -> bool {
537544
(&*self).optimistic_check()
@@ -548,7 +555,9 @@ impl<T> Select for Port<T> {
548555
}
549556
}
550557

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> {
552561
fn recv_ready(self) -> Option<T> {
553562
match self.next.take().recv_ready() {
554563
Some(StreamPayload { val, next }) => {
@@ -560,6 +569,8 @@ impl<'self, T> SelectPort<T> for &'self Port<T> {
560569
}
561570
}
562571

572+
impl<'self, T> SelectPort<T> for &'self Port<T> { }
573+
563574
pub struct SharedChan<T> {
564575
// Just like Chan, but a shared AtomicOption instead of Cell
565576
priv next: UnsafeAtomicRcBox<AtomicOption<StreamChanOne<T>>>

src/libstd/rt/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,7 @@ pub mod tube;
142142
/// Simple reimplementation of core::comm
143143
pub mod comm;
144144

145-
/// Routines for select()ing on pipes.
146-
pub mod select;
145+
mod select;
147146

148147
// FIXME #5248 shouldn't be pub
149148
/// The runtime needs to be able to put a pointer into thread-local storage.

0 commit comments

Comments
 (0)