/* the stable insertion sort */ void queue_sort(queue_t *queue, int (*cmp)(const queue_t *, const queue_t *)) { queue_t *q, *prev, *next; q = queue_head(queue); if (q == queue_tail(queue)) { return; } for (q = queue_next(q); q != queue_sentinel(queue); q = next) { prev = queue_prev(q); next = queue_next(q); queue_remove(q); do { if (cmp(prev, q) <= 0) { break; } prev = queue_prev(prev); } while (prev != queue_sentinel(queue)); queue_insert_head(prev, q); } }
int httproute_call(HttpSession *session) { queue_t *route_queue=&session->server->routes; char *path=session->request.path; queue_t *q=NULL; HttpRoute *route; //printf("httproute_call in !\n"); if(queue_empty(route_queue))return 404; for(q = queue_prev(route_queue); q != queue_sentinel(route_queue); q = queue_last(q) ) { route = queue_data(q, HttpRoute, node); if(strcmp(path,route->path)==0 ) { TraceInfo("route callback found!\n"); return route->func(session,route->arg); } } TraceInfo("route callback not found!\n"); return 404; }
static __inline__ void _delayed_call_enqueue( queue_t queue, timer_call_t call) { timer_call_t current; current = TC(queue_first(queue)); while (TRUE) { if ( queue_end(queue, qe(current)) || call->deadline < current->deadline ) { current = TC(queue_prev(qe(current))); break; } current = TC(queue_next(qe(current))); } insque(qe(call), qe(current)); call->state = DELAYED; }
gboolean spop_mpris2_player_previous(Mpris2Player* obj, GDBusMethodInvocation* invoc) { g_debug("mpris2: previous"); queue_prev(TRUE); mpris2_player_complete_previous(obj, invoc); return TRUE; }