- /* 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;
- }
+ while (pos > 0 && heap->gt(p, ptrs[parent(pos)])) {
+ /* Move parent down until we find the right spot */
+ ptrs[pos] = ptrs[parent(pos)];
+ pos = parent(pos);