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.