Struct DeferredManager

Source
pub struct DeferredManager<S> { /* private fields */ }
Expand description

Deferred execution manager used to store and resume.

Implementations§

Source§

impl<S> DeferredManager<S>

Source

pub fn new() -> Self

Creates new deferred execution manager.

§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
Source

pub fn count(&self) -> usize

Gets number of deferred executions currently waiting to resume.

Source

pub fn run(&mut self, deferred: Deferred<S>) -> Id

Register deferred logic for later execution.

§Arguments
  • deferred - deferred execution unit.
§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
Source

pub fn cancel(&mut self, id: Id) -> bool

Creates new deferred execution manager.

§Arguments
  • id - deferred execution id (got from calling run() method).
§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.cancel(id);
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), false);
Source

pub fn resume(&mut self, id: Id) -> bool

Resume specified deferred execution unit by its id.

§Arguments
  • id - deferred execution id (got from calling run() method).
§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume(id);
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
Source

pub fn consume(&mut self, id: Id) -> Option<S>

Consume specified deferred execution unit by its id and return its state.

§Arguments
  • id - deferred execution id (got from calling run() method).
§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.consume(id).unwrap();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
Source

pub fn has(&self, id: Id) -> bool

Tells if deferred execution unit with given id currently waits for later execution.

§Arguments
  • id - deferred execution id (got from calling run() method).
§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
manager.resume_all();
assert_eq!(manager.has(id), false);
Source

pub fn resume_all(&mut self)

Resume sall deferred execution units.

§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
Source

pub fn consume_all(&mut self) -> Vec<(Id, S)>

Consume all deferred execution units and return vector of id-state pairs.

§Example
use std::rc::Rc;
use std::cell::Cell;

type RcBool = Rc<Cell<bool>>;

fn foo(v: RcBool) -> Deferred<Value> {
    deferred!(value!(v), [
        |c| {
            let v = c.state().consume::<RcBool>();
            v.set(true);
            state!(value!(v))
        }
    ])
}

let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.consume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);

Trait Implementations§

Source§

impl<S> Default for DeferredManager<S>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<S> Freeze for DeferredManager<S>

§

impl<S> RefUnwindSafe for DeferredManager<S>
where S: RefUnwindSafe,

§

impl<S> Send for DeferredManager<S>
where S: Send,

§

impl<S> Sync for DeferredManager<S>
where S: Sync,

§

impl<S> Unpin for DeferredManager<S>
where S: Unpin,

§

impl<S> UnwindSafe for DeferredManager<S>
where S: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.