示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
int
qminheap_push(qminheap_t *heap, void *data) {
  return minheap_push(heap, data);
}