pub struct Computation<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> { /* private fields */ }Expand description
A stateful computation that can be suspended and resumed.
Computation is the default implementation of Algorithm. It delegates the
actual computation logic to a ComputationStep implementation while handling
the boilerplate of state management and cancellation checking.
§Type Parameters
CONTEXT: Immutable configuration passed to each stepSTATE: Mutable state that persists across stepsOUTPUT: The final result typeSTEP: TheComputationStepimplementation that defines the computation logic
§Example
use computation_process::{Computation, ComputationStep, Completable, Incomplete, Computable, Stateful};
struct SumStep;
impl ComputationStep<Vec<i32>, usize, i32> for SumStep {
fn step(numbers: &Vec<i32>, index: &mut usize) -> Completable<i32> {
if *index < numbers.len() {
*index += 1;
Err(Incomplete::Suspended) // Suspend after processing each number
} else {
Ok(numbers.iter().sum())
}
}
}
let mut computation = Computation::<Vec<i32>, usize, i32, SumStep>::from_parts(
vec![1, 2, 3, 4, 5],
0,
);
assert_eq!(computation.compute().unwrap(), 15);Trait Implementations§
Source§impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Algorithm<CONTEXT, STATE, OUTPUT> for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Algorithm<CONTEXT, STATE, OUTPUT> for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§fn run<I1: Into<CONTEXT>, I2: Into<STATE>>(
context: I1,
initial_state: I2,
) -> Cancellable<OUTPUT>where
Self: Sized + 'static,
fn run<I1: Into<CONTEXT>, I2: Into<STATE>>(
context: I1,
initial_state: I2,
) -> Cancellable<OUTPUT>where
Self: Sized + 'static,
Configure and immediately execute the computation, skipping over all suspended states.
Source§fn dyn_algorithm(self) -> DynAlgorithm<CONTEXT, STATE, OUTPUT>where
Self: Sized + 'static,
fn dyn_algorithm(self) -> DynAlgorithm<CONTEXT, STATE, OUTPUT>where
Self: Sized + 'static,
Convert to a dynamic
Algorithm variant.Source§impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Computable<OUTPUT> for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Computable<OUTPUT> for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§fn try_compute(&mut self) -> Completable<OUTPUT>
fn try_compute(&mut self) -> Completable<OUTPUT>
Try to advance this computation, returning a value once the computation is done.
Source§fn compute_completable(&mut self) -> Completable<T>
fn compute_completable(&mut self) -> Completable<T>
Advance this computation until it either completes, is canceled, or becomes exhausted,
skipping over all suspended states. Read more
Source§fn compute(&mut self) -> Cancellable<T>
fn compute(&mut self) -> Cancellable<T>
Advance this computation until completion, skipping over all suspended states. Read more
Source§fn dyn_computable(self) -> DynComputable<T>where
Self: Sized + 'static,
fn dyn_computable(self) -> DynComputable<T>where
Self: Sized + 'static,
Utility method to convert this
Computable to a dynamic type.Source§impl<CONTEXT: Debug, STATE: Debug, OUTPUT: Debug, STEP: Debug + ComputationStep<CONTEXT, STATE, OUTPUT>> Debug for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT: Debug, STATE: Debug, OUTPUT: Debug, STEP: Debug + ComputationStep<CONTEXT, STATE, OUTPUT>> Debug for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§impl<'de, CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Deserialize<'de> for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<'de, CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Deserialize<'de> for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Serialize for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Serialize for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Stateful<CONTEXT, STATE> for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP: ComputationStep<CONTEXT, STATE, OUTPUT>> Stateful<CONTEXT, STATE> for Computation<CONTEXT, STATE, OUTPUT, STEP>
Source§fn from_parts(context: CONTEXT, state: STATE) -> Selfwhere
Self: Sized + 'static,
fn from_parts(context: CONTEXT, state: STATE) -> Selfwhere
Self: Sized + 'static,
Source§fn into_parts(self) -> (CONTEXT, STATE)
fn into_parts(self) -> (CONTEXT, STATE)
Source§fn state_mut(&mut self) -> &mut STATE
fn state_mut(&mut self) -> &mut STATE
Access to the underlying
STATE as a mutable reference. Read moreAuto Trait Implementations§
impl<CONTEXT, STATE, OUTPUT, STEP> Freeze for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP> RefUnwindSafe for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP> Send for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP> Sync for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP> Unpin for Computation<CONTEXT, STATE, OUTPUT, STEP>
impl<CONTEXT, STATE, OUTPUT, STEP> UnwindSafe for Computation<CONTEXT, STATE, OUTPUT, STEP>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more