core/tempq: Clean up tempq alloc and free

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-12-14 12:54:53 -05:00
parent 15f5b8fc87
commit 5c92d0771f
1 changed files with 22 additions and 18 deletions

View File

@ -12,6 +12,22 @@ extern "C" {
static GSList *tempq_list;
static struct file deck_file;
static struct queue *__tempq_alloc(struct queue_ops *ops, unsigned int flags)
{
struct queue *queue = new struct queue;
tempq_list = g_slist_append(tempq_list, queue);
queue_init(queue, flags | Q_ENABLED | Q_SAVE_FLAGS | Q_SAVE_SORT, ops);
return queue;
}
static void __tempq_free(struct queue *queue)
{
tempq_list = g_slist_remove(tempq_list, queue);
queue_deinit(queue);
delete queue;
}
void tempq_init(struct queue_ops *ops)
{
@ -28,7 +44,7 @@ void tempq_init(struct queue_ops *ops)
file_readf(&deck_file, "%u", &num);
for (i = 0; i < num; i++) {
file_readf(&deck_file, "%u %u", &flags, &count);
queue = tempq_alloc(NULL, flags);
queue = __tempq_alloc(NULL, flags);
for (j = 0; j < count; j++) {
file_readf(&deck_file, "%u", &id);
queue_add(queue, track_get(id));
@ -40,15 +56,8 @@ void tempq_init(struct queue_ops *ops)
void tempq_deinit()
{
GSList *cur;
for (cur = tempq_list; cur; cur = g_slist_next(cur)) {
queue_deinit((struct queue *)cur->data);
delete (struct queue *)cur->data;
}
g_slist_free(tempq_list);
tempq_list = NULL;
while (tempq_list)
__tempq_free((struct queue *)tempq_list->data);
}
void tempq_save(struct queue *queue, enum queue_flags flag)
@ -75,20 +84,15 @@ void tempq_save(struct queue *queue, enum queue_flags flag)
struct queue *tempq_alloc(struct queue_ops *ops, unsigned int flags)
{
struct queue *queue = new struct queue;
tempq_list = g_slist_append(tempq_list, queue);
queue_init(queue, flags | Q_ENABLED | Q_SAVE_FLAGS | Q_SAVE_SORT, ops);
struct queue *queue = __tempq_alloc(ops, flags);
tempq_save(queue, Q_ENABLED);
return queue;
}
void tempq_free(struct queue *queue)
{
tempq_list = g_slist_remove(tempq_list, queue);
queue_deinit(queue);
tempq_save(queue, Q_ENABLED);
delete queue;
__tempq_free(queue);
tempq_save(NULL, Q_ENABLED);
}
struct queue *tempq_get(unsigned int index)