[−][src]Trait canrun::Fork
Fork a State
into zero or more alternate states.
Added to a State
with .fork()
.
Example:
use canrun::{val, var, Fork, Query, State, StateIter, Val}; use canrun::domains::example::I32; use std::rc::Rc; #[derive(Debug)] struct Is1or2 { x: Val<i32>, } impl<'a> Fork<'a, I32> for Is1or2 { fn fork(&self, state: State<'a, I32>) -> StateIter<'a, I32> { let s1 = state.clone().unify(&self.x, &val!(1)); let s2 = state.unify(&self.x, &val!(2)); Box::new(s1.into_iter().chain(s2.into_iter())) } } let x = var(); let state: State<I32> = State::new(); let state = state.fork(Rc::new(Is1or2 { x: val!(x) })); let results: Vec<i32> = state.query(x).collect(); assert_eq!(results, vec![1, 2]);
Required methods
fn fork(&self, state: State<'a, D>) -> StateIter<'a, D>
Given a State
, return an iterator of states that result from the
fork operation.