Struct fibers::InPlaceExecutor [] [src]

pub struct InPlaceExecutor { /* fields omitted */ }

An executor that executes spawned fibers and I/O event polling on current thread.

Examples

An example to calculate fibonacci numbers:

use fibers::{Spawn, Executor, InPlaceExecutor};
use futures::{Async, Future, BoxFuture};

fn fib<H: Spawn + Clone>(n: usize, handle: H) -> BoxFuture<usize, ()> {
    if n < 2 {
        futures::finished(n).boxed()
    } else {
        let f0 = handle.spawn_monitor(fib(n - 1, handle.clone()));
        let f1 = handle.spawn_monitor(fib(n - 2, handle.clone()));
        f0.join(f1).map(|(a0, a1)| a0 + a1).map_err(|_| ()).boxed()
    }
}

let mut executor = InPlaceExecutor::new().unwrap();
let mut monitor = executor.spawn_monitor(fib(7, executor.handle()));
loop {
    if let Async::Ready(answer) = monitor.poll().unwrap() {
        assert_eq!(answer, 13);
        return;
    } else {
        executor.run_once().unwrap();
    }
}

Methods

impl InPlaceExecutor
[src]

Creates a new instance of InPlaceExecutor.

Trait Implementations

impl Debug for InPlaceExecutor
[src]

Formats the value using the given formatter.

impl Executor for InPlaceExecutor
[src]

The handle type of the executor.

Returns the handle of the executor.

Runs one one unit of works.

Runs until the monitored fiber exits.

Runs until the future is ready.

Runs infinitely until an error happens.

impl Spawn for InPlaceExecutor
[src]

Spawns a fiber which will execute given boxed future.

Spawns a fiber which will execute given future.

Equivalent to self.spawn(futures::lazy(|| f())).

Spawns a fiber and returns a future to monitor it's execution result.

Spawns a linked fiber. Read more

Converts this instance into a boxed object.