From: root Date: Tue, 11 Dec 2007 21:04:40 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: rel-1_8 X-Git-Url: https://git.llucax.com/software/libev.git/commitdiff_plain/0e5eb45308c4238186cdad9a9d838dd04394e1bd?hp=4ce77a5b1de05dae6092eae478b2a4397173d9c3 *** empty log message *** --- diff --git a/ev.c b/ev.c index acde504..371c62b 100644 --- a/ev.c +++ b/ev.c @@ -478,7 +478,7 @@ ev_feed_event (EV_P_ void *w, int revents) } } -void inline_size +void inline_speed queue_events (EV_P_ W *events, int eventcnt, int type) { int i; @@ -640,11 +640,16 @@ upheap (WT *heap, int k) { WT w = heap [k]; - while (k && heap [k >> 1]->at > w->at) + while (k) { - heap [k] = heap [k >> 1]; + int p = (k - 1) >> 1; + + if (heap [p]->at <= w->at) + break; + + heap [k] = heap [p]; ((W)heap [k])->active = k + 1; - k >>= 1; + k = p; } heap [k] = w; @@ -657,19 +662,23 @@ downheap (WT *heap, int N, int k) { WT w = heap [k]; - while (k < (N >> 1)) + for (;;) { - int j = k << 1; + int c = (k << 1) + 1; + + if (c >= N) + break; - if (j + 1 < N && heap [j]->at > heap [j + 1]->at) - ++j; + c += c + 1 < N && heap [c]->at > heap [c + 1]->at + ? 1 : 0; - if (w->at <= heap [j]->at) + if (w->at <= heap [c]->at) break; - heap [k] = heap [j]; + heap [k] = heap [c]; ((W)heap [k])->active = k + 1; - k = j; + + k = c; } heap [k] = w;