+ 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);
+ /*
+ * No need to rebalance: if we are larger than
+ * our parent, we are necessarily larger than
+ * its other child.
+ */
+ } else {
+ break;
+ }
+ }