core/queue: Add queue_{save|load}_tracks() function
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
9ec2497ac5
commit
9a98a009e9
20
core/queue.c
20
core/queue.c
|
@ -154,6 +154,26 @@ void queue_deinit(struct queue *queue)
|
|||
queue->q_sort = NULL;
|
||||
}
|
||||
|
||||
void queue_save_tracks(struct queue *queue, struct file *file)
|
||||
{
|
||||
struct queue_iter it;
|
||||
|
||||
file_writef(file, "%u", queue_size(queue));
|
||||
queue_for_each(queue, &it)
|
||||
file_writef(file, " %u", queue_iter_val(&it)->tr_dbe.dbe_index);
|
||||
}
|
||||
|
||||
void queue_load_tracks(struct queue *queue, struct file *file)
|
||||
{
|
||||
unsigned int i, n, t;
|
||||
|
||||
file_readf(file, "%u ", &n);
|
||||
for (i = 0; i < n; i++) {
|
||||
file_readf(file, "%u", &t);
|
||||
queue_add(queue, track_get(t));
|
||||
}
|
||||
}
|
||||
|
||||
void queue_set_flag(struct queue *queue, enum queue_flags flag)
|
||||
{
|
||||
queue->q_flags |= flag;
|
||||
|
|
20
core/tempq.c
20
core/tempq.c
|
@ -32,28 +32,18 @@ static void __tempq_free(struct queue *queue)
|
|||
|
||||
static void __tempq_read_queue()
|
||||
{
|
||||
unsigned int flags, count, i, track;
|
||||
struct queue *queue;
|
||||
unsigned int flags;
|
||||
|
||||
file_readf(&tempq_file, "%u %u", &flags, &count);
|
||||
file_readf(&tempq_file, "%u", &flags);
|
||||
queue = __tempq_alloc(flags);
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
file_readf(&tempq_file, "%u", &track);
|
||||
queue_add(queue, track_get(track));
|
||||
}
|
||||
queue_load_tracks(queue, &tempq_file);
|
||||
}
|
||||
|
||||
static void __tempq_write_queue(struct queue *queue)
|
||||
{
|
||||
struct queue_iter it;
|
||||
struct track *track;
|
||||
|
||||
file_writef(&tempq_file, "%u %u", queue->q_flags, queue_size(queue));
|
||||
queue_for_each(queue, &it) {
|
||||
track = queue_iter_val(&it);
|
||||
file_writef(&tempq_file, " %u", track->tr_dbe.dbe_index);
|
||||
}
|
||||
file_writef(&tempq_file, "%u ", queue->q_flags);
|
||||
queue_save_tracks(queue, &tempq_file);
|
||||
file_writef(&tempq_file, "\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,13 @@ void queue_init(struct queue *, unsigned int, const struct queue_ops *);
|
|||
void queue_deinit(struct queue *);
|
||||
|
||||
|
||||
/* Called to save the list of queued tracks. */
|
||||
void queue_save_tracks(struct queue *, struct file *);
|
||||
|
||||
/* Called to load queued tracks from file. */
|
||||
void queue_load_tracks(struct queue *, struct file *);
|
||||
|
||||
|
||||
/* Called to set a queue flag. */
|
||||
void queue_set_flag(struct queue *, enum queue_flags);
|
||||
|
||||
|
|
|
@ -488,6 +488,35 @@ static void test_sorting()
|
|||
test_equal(q.q_length, 0);
|
||||
test_equal(queue_size(&q), 0);
|
||||
test_equal((void *)q.q_sort, NULL);
|
||||
}
|
||||
|
||||
static void test_save_load()
|
||||
{
|
||||
struct file f = FILE_INIT("queue.q", 0, 0);
|
||||
struct queue q, r;
|
||||
unsigned int i;
|
||||
|
||||
queue_init(&q, 0, &test_ops);
|
||||
queue_init(&r, 0, &test_ops);
|
||||
|
||||
for (i = 0; i < 13; i++)
|
||||
queue_add(&q, track_get(i));
|
||||
|
||||
test_equal(file_exists(&f), (bool)false);
|
||||
test_equal(file_open(&f, OPEN_WRITE), (bool)true);
|
||||
queue_save_tracks(&q, &f);
|
||||
file_close(&f);
|
||||
test_equal(file_exists(&f), (bool)true);
|
||||
|
||||
test_equal(file_open(&f, OPEN_READ), (bool)true);
|
||||
queue_load_tracks(&r, &f);
|
||||
file_close(&f);
|
||||
|
||||
test_equal(queue_size(&r), 13);
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(queue_has(&r, track_get(i)), (bool)true, i);
|
||||
} test_loop_passed();
|
||||
|
||||
__test_deinit_core();
|
||||
}
|
||||
|
||||
|
@ -499,4 +528,5 @@ DECLARE_UNIT_TESTS(
|
|||
UNIT_TEST("Queue Stress (n = 100,000)", test_stress_100K),
|
||||
UNIT_TEST("Queue Random Next and Selection", test_rand_select),
|
||||
UNIT_TEST("Queue Sorting", test_sorting),
|
||||
UNIT_TEST("Queue Save and Load", test_save_load),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue