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§
Sourcefn pull(&mut self) -> &mut Option<T>
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§
Sourcefn recv(&mut self) -> Option<T>
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}