X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=timeeventq.c;fp=timeeventq.c;h=0000000000000000000000000000000000000000;hb=f93eca3530bef2cc23ffe6c3a04493ad171c2aed;hp=fc84157fb42bf7761594b1983426adba8cd8cd8a;hpb=42c9b99f2bb21d0ff1f1918314f9d5dd82a62763;p=catta diff --git a/timeeventq.c b/timeeventq.c deleted file mode 100644 index fc84157..0000000 --- a/timeeventq.c +++ /dev/null @@ -1,160 +0,0 @@ -#include "timeeventq.h" -#include "util.h" - -static gint compare(gconstpointer _a, gconstpointer _b) { - const AvahiTimeEvent *a = _a, *b = _b; - - return avahi_timeval_compare(&a->expiry, &b->expiry); -} - -static gboolean prepare_func(GSource *source, gint *timeout) { - AvahiTimeEventQueue *q = (AvahiTimeEventQueue*) source; - AvahiTimeEvent *e; - GTimeVal now; - - g_assert(source); - g_assert(timeout); - - if (!q->prioq->root) { - *timeout = -1; - return FALSE; - } - - e = q->prioq->root->data; - g_assert(e); - - g_source_get_current_time(source, &now); - - if (avahi_timeval_compare(&now, &e->expiry) >= 0) { - *timeout = -1; - return TRUE; - } - - *timeout = (gint) (avahi_timeval_diff(&e->expiry, &now)/1000); - - return FALSE; -} - -static gboolean check_func(GSource *source) { - AvahiTimeEventQueue *q = (AvahiTimeEventQueue*) source; - AvahiTimeEvent *e; - GTimeVal now; - - g_assert(source); - - if (!q->prioq->root) - return FALSE; - - e = q->prioq->root->data; - g_assert(e); - - g_source_get_current_time(source, &now); - - return avahi_timeval_compare(&now, &e->expiry) >= 0; -} - -static gboolean dispatch_func(GSource *source, GSourceFunc callback, gpointer user_data) { - AvahiTimeEventQueue *q = (AvahiTimeEventQueue*) source; - GTimeVal now; - - g_assert(source); - - g_source_get_current_time(source, &now); - - while (q->prioq->root) { - AvahiTimeEvent *e = q->prioq->root->data; - - if (avahi_timeval_compare(&now, &e->expiry) < 0) - break; - - g_assert(e->callback); - e->callback(e, e->userdata); - } - - return TRUE; -} - -AvahiTimeEventQueue* avahi_time_event_queue_new(GMainContext *context, gint priority) { - AvahiTimeEventQueue *q; - - static GSourceFuncs source_funcs = { - prepare_func, - check_func, - dispatch_func, - NULL, - NULL, - NULL - }; - - q = (AvahiTimeEventQueue*) g_source_new(&source_funcs, sizeof(AvahiTimeEventQueue)); - q->prioq = avahi_prio_queue_new(compare); - - g_source_set_priority((GSource*) q, priority); - - g_source_attach(&q->source, context); - - return q; -} - -void avahi_time_event_queue_free(AvahiTimeEventQueue *q) { - g_assert(q); - - while (q->prioq->root) - avahi_time_event_queue_remove(q, q->prioq->root->data); - avahi_prio_queue_free(q->prioq); - - g_source_destroy(&q->source); - g_source_unref(&q->source); -} - -AvahiTimeEvent* avahi_time_event_queue_add(AvahiTimeEventQueue *q, const GTimeVal *timeval, void (*callback)(AvahiTimeEvent *e, void *userdata), void *userdata) { - AvahiTimeEvent *e; - - g_assert(q); - g_assert(timeval); - g_assert(callback); - g_assert(userdata); - - e = g_new(AvahiTimeEvent, 1); - e->queue = q; - e->expiry = *timeval; - e->callback = callback; - e->userdata = userdata; - - e->node = avahi_prio_queue_put(q->prioq, e); - - return e; -} - -void avahi_time_event_queue_remove(AvahiTimeEventQueue *q, AvahiTimeEvent *e) { - g_assert(q); - g_assert(e); - g_assert(e->queue == q); - - avahi_prio_queue_remove(q->prioq, e->node); - g_free(e); -} - -void avahi_time_event_queue_update(AvahiTimeEventQueue *q, AvahiTimeEvent *e, const GTimeVal *timeval) { - g_assert(q); - g_assert(e); - g_assert(e->queue == q); - - e->expiry = *timeval; - - avahi_prio_queue_shuffle(q->prioq, e->node); -} - -AvahiTimeEvent* avahi_time_event_queue_root(AvahiTimeEventQueue *q) { - g_assert(q); - - return q->prioq->root ? q->prioq->root->data : NULL; -} - -AvahiTimeEvent* avahi_time_event_next(AvahiTimeEvent *e) { - g_assert(e); - - return e->node->next->data; -} - -