Gliph\Traversal\DepthFirst::find_sources PHP Method

find_sources() public static method

Finds source vertices in a Digraph, then enqueues them.
public static find_sources ( Gliph\Graph\Digraph $graph, Gliph\Visitor\DepthFirstVisitorInterface $visitor ) : SplQueue
$graph Gliph\Graph\Digraph
$visitor Gliph\Visitor\DepthFirstVisitorInterface
return SplQueue
    public static function find_sources(Digraph $graph, DepthFirstVisitorInterface $visitor)
    {
        $incomings = new \SplObjectStorage();
        $queue = new \SplQueue();
        foreach ($graph->edges() as $edge) {
            if (!isset($incomings[$edge[1]])) {
                $incomings[$edge[1]] = new \SplObjectStorage();
            }
            $incomings[$edge[1]]->attach($edge[0]);
        }
        // Prime the queue with vertices that have no incoming edges.
        foreach ($graph->vertices() as $vertex) {
            if (!$incomings->contains($vertex)) {
                $queue->push($vertex);
                $visitor->onInitializeVertex($vertex, TRUE, $queue);
            } else {
                $visitor->onInitializeVertex($vertex, FALSE, $queue);
            }
        }
        return $queue;
    }