NAME
Algorithm::DependencySolver::Traversal - A module for traversing a dependency graph
VERSION
version 1.01
SYNOPSIS
my $traversal = Algorithm::DependencySolver::Traversal->new(
Solver => $solver,
visit => sub {
my $operation = shift;
print "Visited operation: ", $operation->id, "\n";
},
);
$traversal->run;
DESCRIPTION
Given an Algorithm::DependencySolver::Solver.pm object, traverses it in such a way that upon entering a node, all of its prerequisites will have already been entered.
Concurrency
Currently this module is not thread-safe. However, it has been design in such a way that it should be easy to allow concurrency at a later stage, without needing to break backwards compatibility.
Note that if we allow concurrency, the visitable
list may be empty, without indicating that the traversal is complete.
METHODS
choose
During the traversal, we maintain a list of nodes, visitable
, which can be immediately visited. If this list is empty, the traversal is complete.
The choose
function is called to decide which node is visitable
to visit next. Note that choose
is guaranteed to be called, even if visitable
is a singleton (but not if it's empty).
dryrun
Create a linear path and return it as an array of the arguments that would have been passed into the visit
function.
Use run_path
to run a path created by dryrun
.