[][src]Struct fibers::InPlaceExecutor

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};

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

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]

pub fn new() -> Result<Self>[src]

Creates a new instance of InPlaceExecutor.

Trait Implementations

impl Executor for InPlaceExecutor[src]

type Handle = InPlaceExecutorHandle

The handle type of the executor.

impl Spawn for InPlaceExecutor[src]

impl Debug for InPlaceExecutor[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]