+
+ if (pq->combine != NULL)
+ {
+ struct bt_node *q_ = bt_prev (&pq->bt, &r->bt_node);
+ if (q_ != NULL)
+ {
+ struct pqueue_record *q = bt_data (q_, struct pqueue_record,
+ bt_node);
+ if (q->id == r->id && subcase_equal (&pq->ordering, q->c,
+ &pq->ordering, r->c))
+ {
+ bt_delete (&pq->bt, &r->bt_node);
+ q->c = pq->combine (q->c, r->c, pq->aux);
+ free (r);
+ }
+ }
+ }