int el_timer_add(eventloop_t *el, long long milliseconds, timer_callback *proc, void *ud) { ev_timer_t t; rr_dt_expire_at(milliseconds, &t.sec, &t.ms); t.timer_cb = proc; t.ud = ud; if (minheap_push(el->timers, &t)) return RR_EV_ERR; return RR_EV_OK; }
struct fts_iterator_t *fts_search(fts_t *fts, robj *query, unsigned long *size) { dict_t * scores = search_with_bm25_score(fts, query); *size = dict_length(scores); struct fts_iterator_t *it = create_fts_iterator(*size); dict_iterator_t *dict_it = dict_iter_create(scores); while (dict_iter_hasnext(dict_it)) { dict_kv_t score = dict_iter_next(dict_it); minheap_push(it->docs, score.value); } dict_free(scores); return it; }
int el_timer_process(eventloop_t *el) { int processed = 0, ret; uint32_t len = minheap_len(el->timers); while (len) { ev_timer_t *t = (ev_timer_t *) minheap_min(el->timers); if (!rr_dt_is_past(t->sec, t->ms)) break; t = (ev_timer_t *) minheap_pop(el->timers); long long millisecond = t->timer_cb(el, t->ud); /* if the timer is still active, push it back to heap */ if (millisecond > 0) { rr_dt_expire_at(millisecond, &t->sec, &t->ms); ret = minheap_push(el->timers, t); assert(!ret); } processed++; len--; } return processed; }
int qminheap_push(qminheap_t *heap, void *data) { return minheap_push(heap, data); }