30 lines
624 B
C
30 lines
624 B
C
/*
|
|
* Copyright 2015 (c) Anna Schumaker.
|
|
*/
|
|
|
|
#include <core/containers/queue.h>
|
|
|
|
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;
|
|
}
|