/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $graph: $libraries;

var $root created_on = 848800783;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$graph];
var $root manager = $graph;

public method .breadth_search() {
    arg node, data, neighbors, is_dest;
    var d, i, j, path;
    
    d = #[[node, 'source]];
    i = 1;
    while ((i <= ((d.keys()).length())) && (!(node = (d.keys())[i++]).(is_dest)(data))) {
        refresh();
        for j in (node.(neighbors)())
            d = d.add(j, node);
    }
    if (i <= ((d.keys()).length())) {
        refresh();
        path = [node];
        while ((node = d[node]) != 'source)
            path += [node];
        return path;
    } else {
        return 0;
    }
};

public method .topological_sort() {
    arg list, comparator;
    var i, j;
    
    i = list.length();
    while (i >= 1) {
        j = 2;
        while (j <= i) {
            if ((list[j - 1]).(comparator)(list[j]))
                list = list.swap(j - 1, j);
            refresh();
            j++;
        }
        i--;
    }
    return list;
};