MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / _downheap

Function _downheap

mysys/queues.c:272–318  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

270#ifndef OLD_VERSION
271
272void _downheap(register QUEUE *queue, uint idx)
273{
274 uchar *element;
275 uint elements,half_queue,offset_to_key, next_index;
276 my_bool first= TRUE;
277 uint start_idx= idx;
278
279 offset_to_key=queue->offset_to_key;
280 element=queue->root[idx];
281 half_queue=(elements=queue->elements) >> 1;
282
283 while (idx <= half_queue)
284 {
285 next_index=idx+idx;
286 if (next_index < elements &&
287 (queue->compare(queue->first_cmp_arg,
288 queue->root[next_index]+offset_to_key,
289 queue->root[next_index+1]+offset_to_key) *
290 queue->max_at_top) > 0)
291 next_index++;
292 if (first &&
293 (((queue->compare(queue->first_cmp_arg,
294 queue->root[next_index]+offset_to_key,
295 element+offset_to_key) * queue->max_at_top) >= 0)))
296 {
297 queue->root[idx]= element;
298 return;
299 }
300 queue->root[idx]=queue->root[next_index];
301 idx=next_index;
302 first= FALSE;
303 }
304
305 next_index= idx >> 1;
306 while (next_index > start_idx)
307 {
308 if ((queue->compare(queue->first_cmp_arg,
309 queue->root[next_index]+offset_to_key,
310 element+offset_to_key) *
311 queue->max_at_top) < 0)
312 break;
313 queue->root[idx]=queue->root[next_index];
314 idx=next_index;
315 next_index= idx >> 1;
316 }
317 queue->root[idx]=element;
318}
319
320#else
321 /*

Callers 3

queue_removeFunction · 0.85
queue_replacedFunction · 0.85
queue_fixFunction · 0.85

Calls 1

compareMethod · 0.45

Tested by

no test coverage detected