function topological_sort_helper()

in core/src/main/resources/org/apache/karaf/webconsole/core/behavior/dracula/dracula_algorithms.js [566:599]


function topological_sort_helper(g) {
    //Find node with no incoming edges
    var node;
    for(i in g.nodes) {
	if(g.nodes[i].deleted)
	    continue; //Bad style, meh
	
	var incoming = false;
	for(j in g.nodes[i].edges) {
	    if(g.nodes[i].edges[j].target == g.nodes[i]
	      && g.nodes[i].edges[j].source.deleted == false) {
		incoming = true;
		break;
	    }
	}
	if(!incoming) {
	    node = g.nodes[i];
	    break;
	}
    }

    // Either unsortable or done. Either way, GTFO
    if(node == undefined)
	return [];

    //"Delete" node from g
    node.deleted = true;
    
    var tail = topological_sort_helper(g);

    tail.unshift(node);

    return tail;
}