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

var $root created_on = 848818545;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root help_node = $help_heap;
var $root inited = 1;
var $root managed = [$heap];
var $root manager = $heap;

public method .del() {
    arg heap, i, priority_ind;
    var j, len, min;
    
    len = listlen(heap);
    if (i > len)
        throw(~invarg, "Index %d out of bounds - can't delete".format(i));
    anticipate_assignment();
    while (i != len) {
        min = len;
        j = i * 2;
        if ((j < len) && (((heap[j])[priority_ind]) < ((heap[min])[priority_ind])))
            min = j;
        j++;
        if ((j < len) && (((heap[j])[priority_ind]) < ((heap[min])[priority_ind])))
            min = j;
        heap = replace(heap, i, heap[min]);
        i = min;
    }
    heap = heap.subrange(1, len - 1);
    return heap;
};

public method .push() {
    arg heap, element, priority_ind;
    var i, j;
    
    i = listlen(heap) + 1;
    if (i == 1)
        return [element];
    anticipate_assignment();
    heap += [0];
    while ((i > 1) && ((element[priority_ind]) < ((heap[(j = i / 2)])[priority_ind])))
        heap = replace(heap, i, heap[(i = j)]);
    heap = heap.replace(i, element);
    return heap;
};