39 lines
774 B
C
39 lines
774 B
C
/*
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/queue.h>
|
|
#include <core/string.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
static inline void *__queue_init(struct queue *queue, void *data)
|
|
{
|
|
if (queue->q_ops)
|
|
return queue->q_ops->qop_init(queue, data);
|
|
return NULL;
|
|
}
|
|
|
|
static inline void __queue_deinit(struct queue *queue)
|
|
{
|
|
if (queue->q_ops)
|
|
queue->q_ops->qop_deinit(queue);
|
|
}
|
|
|
|
void queue_init(struct queue *queue, const struct queue_ops *ops, void *data)
|
|
{
|
|
queue->q_ops = ops;
|
|
|
|
g_queue_init(&queue->q_tracks);
|
|
queue_iter_init(queue, &queue->q_cur);
|
|
|
|
queue->q_private = __queue_init(queue, data);
|
|
}
|
|
|
|
void queue_deinit(struct queue *queue)
|
|
{
|
|
g_queue_clear(&queue->q_tracks);
|
|
__queue_deinit(queue);
|
|
queue->q_cur.it_pos = UINT_MAX;
|
|
queue->q_cur.it_iter = NULL;
|
|
}
|