/* * Copyright 2015 (c) Anna Schumaker. */ #include guint _q_add_sorted(struct _queue *queue, gpointer data, GCompareDataFunc func, gpointer user_data) { struct _q_iter it; _q_for_each(queue, &it) { if (func(_q_iter_val(&it), data, user_data) > 0) { g_queue_insert_before(&queue->_queue, it.it_iter, data); return it.it_pos; } } return _q_add_tail(queue, data); } gpointer _q_remove_it(struct _queue *queue, struct _q_iter *it) { gpointer ret = _q_iter_val(it); GList *link = it->it_iter; _q_iter_prev(it); g_queue_delete_link(&queue->_queue, link); return ret; }