Trait Pull

Source
pub trait Pull<T> {
    // Required method
    fn pull(&mut self) -> &mut Option<T>;

    // Provided method
    fn recv(&mut self) -> Option<T> { ... }
}
Expand description

Pulling elements of type T.

Required Methods§

Source

fn pull(&mut self) -> &mut Option<T>

Pulls an element and provides the opportunity to take ownership.

The puller may mutate the result, in particular take ownership of the data by replacing it with other data or even None. This allows the puller to return resources to the implementor.

If pull returns None this conventionally signals that no more data is available at the moment, and the puller should find something better to do.

Provided Methods§

Source

fn recv(&mut self) -> Option<T>

Takes an Option<T> and leaves None behind.

Examples found in repository?
examples/comm_hello.rs (line 30)
6fn main() {
7
8    // extract the configuration from user-supplied arguments, initialize the computation.
9    let config = timely_communication::Config::from_args(std::env::args()).unwrap();
10    let guards = timely_communication::initialize(config, |mut allocator| {
11
12        println!("worker {} of {} started", allocator.index(), allocator.peers());
13
14        // allocates a pair of senders list and one receiver.
15        let (mut senders, mut receiver) = allocator.allocate(0);
16
17        // send typed data along each channel
18        for i in 0 .. allocator.peers() {
19            senders[i].send(Message::from_typed(format!("hello, {}", i)));
20            senders[i].done();
21        }
22
23        // no support for termination notification,
24        // we have to count down ourselves.
25        let mut received = 0;
26        while received < allocator.peers() {
27
28            allocator.receive();
29
30            if let Some(message) = receiver.recv() {
31                println!("worker {}: received: <{}>", allocator.index(), message.deref());
32                received += 1;
33            }
34
35            allocator.release();
36        }
37
38        allocator.index()
39    });
40
41    // computation runs until guards are joined or dropped.
42    if let Ok(guards) = guards {
43        for guard in guards.join() {
44            println!("result: {:?}", guard);
45        }
46    }
47    else { println!("error in computation"); }
48}

Implementations on Foreign Types§

Source§

impl<T, P: ?Sized + Pull<T>> Pull<T> for Box<P>

Source§

fn pull(&mut self) -> &mut Option<T>

Implementors§

Source§

impl<T> Pull<T> for timely_communication::allocator::thread::Puller<T>

Source§

impl<T, P: Pull<T>> Pull<T> for timely_communication::allocator::counters::Puller<T, P>

Source§

impl<T: Data> Pull<Message<T>> for timely_communication::allocator::zero_copy::push_pull::Puller<T>

Source§

impl<T: Data> Pull<Message<T>> for PullerInner<T>