+ pos = heap->len - 1;
+ /* Bubble it up to the appropriate position. */
+ for (;;) {
+ if (pos > 0 && heap->gt(ptrs[pos], ptrs[parent(pos)])) {
+ void *tmp;
+
+ /* Need to exchange */
+ tmp = ptrs[pos];
+ ptrs[pos] = ptrs[parent(pos)];
+ ptrs[parent(pos)] = tmp;
+ pos = parent(pos);
+ /* rebalance */
+ heapify(heap, pos);
+ } else {
+ break;
+ }
+ }