diff options
Diffstat (limited to 'mysys/queues.c')
-rw-r--r-- | mysys/queues.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/mysys/queues.c b/mysys/queues.c index 1c7a1a4a618..3deee86c23a 100644 --- a/mysys/queues.c +++ b/mysys/queues.c @@ -124,7 +124,6 @@ byte *queue_remove(register QUEUE *queue, uint idx) } } - /* Fix when element on top has been replaced */ #ifndef queue_replaced @@ -166,3 +165,19 @@ void _downheap(register QUEUE *queue, uint idx) } queue->root[idx]=element; } + + +static int queue_fix_cmp(QUEUE *queue, void *a, void *b) +{ + return queue->compare(queue->first_cmp_arg, + a+queue->offset_to_key, + b+queue->offset_to_key); +} + + /* Fix heap when every element was changed */ +void queue_fix(QUEUE *queue) +{ + qsort2(queue->root+1,queue->elements, sizeof(void *), + (qsort2_cmp)queue_fix_cmp, queue); +} + |