Struct gpp_solver::Solver [−][src]
pub struct Solver<P> { /* fields omitted */ }
Expand description
Hybrid push-pull solver.
Implementations
Consume self
and return the wrapped Problem
instance.
Enqueue a fragment to be solved.
Only fragments enqueued through this method and their transitive dependencies will be considered for evaluation.
Get an interator to all fragments that are currently punted. Interpretation of punted fragments depends on the current status:
Status::Pending
: fragments are pending on dependencies.Status::DoneWithCycles
: fragments are part of one or more cycles.Status::Done
: the returned iterator will be empty.
Assume the given fragment is already evaluated.
Run the solver until all enqueued fragments and their transitive dependencies are either
solved or proven to be part of cycles. See the module docs for the limitations when
concurrency > 1
.
Returns an interator with all fragments that are part of at least one cycle, if any. See
Solver::punted_iter
.
Returns an error if any evaluation returns an error.
Known Issues
- If
Solver::enqueue_fragment
is called whileSolver::run
is executing, those new fragments may not be solved. - If
Solver::run
returns with an error, theSolver
may be left in an inconsistent state.
Run a single solver step for a single fragment.
Returns false
if there are no more fragments that can be evaluated.
Returns an error if Problem::evaluate
was called and evaluation returned an error.
Known Issues
- If
Solver::step
is not run to completion theSolver
may be left in an inconsistent state.