Anna Schumaker
8bf5aefd1a
The iterator only needs to point to the current position on the GQueue, so we can do away with manual position tracking. This lets us use a GList pointer as an iterator instead of something more complicated. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/*
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
*
|
|
* Queues are lists of tracks that the user has requested to play next.
|
|
* Users of queues are expected to implement their own save and load functions,
|
|
* and to provide a filled out queue_ops structure during initialization.
|
|
*/
|
|
#ifndef OCARINA_CORE_QUEUE_H
|
|
#define OCARINA_CORE_QUEUE_H
|
|
|
|
#include <core/file.h>
|
|
#include <core/tags/track.h>
|
|
|
|
struct queue;
|
|
|
|
|
|
struct queue_ops {
|
|
/* Called to tell a higher layer that a queue has been initialized. */
|
|
void *(*qop_init)(struct queue *, void *);
|
|
|
|
/* Called to tell a higher layer that a queue is deinitializing. */
|
|
void (*qop_deinit)(struct queue *);
|
|
};
|
|
|
|
|
|
struct queue {
|
|
GQueue q_tracks; /* The queue's list of tracks. */
|
|
void *q_private; /* The queue's private data. */
|
|
|
|
const struct queue_ops *q_ops; /* The queue's operations vector. */
|
|
};
|
|
|
|
|
|
/* Called to initialize a queue. */
|
|
void queue_init(struct queue *, const struct queue_ops *, void *);
|
|
|
|
/* Called to deinitialize a queue. */
|
|
void queue_deinit(struct queue *);
|
|
|
|
|
|
/* Called to access the queued track at a given index. */
|
|
static inline struct track *queue_at(struct queue *queue, unsigned int index)
|
|
{
|
|
return (struct track *)g_queue_peek_nth(&queue->q_tracks, index);
|
|
}
|
|
|
|
#endif /* OCARINA_CORE_QUEUE_H */
|