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;
};