aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Playlist.hxx4
-rw-r--r--src/Queue.cxx46
-rw-r--r--src/Queue.hxx24
-rw-r--r--test/TestQueuePriority.cxx3
4 files changed, 32 insertions, 45 deletions
diff --git a/src/Playlist.hxx b/src/Playlist.hxx
index b158d046..a93c88f0 100644
--- a/src/Playlist.hxx
+++ b/src/Playlist.hxx
@@ -70,12 +70,10 @@ struct playlist {
int queued;
playlist(unsigned max_length)
- :current(-1), queued(-1) {
- queue_init(&queue, max_length);
+ :queue(max_length), current(-1), queued(-1) {
}
~playlist() {
- queue_finish(&queue);
}
};
diff --git a/src/Queue.cxx b/src/Queue.cxx
index 485ffb1c..a8a73754 100644
--- a/src/Queue.cxx
+++ b/src/Queue.cxx
@@ -300,40 +300,32 @@ queue_clear(struct queue *queue)
queue->length = 0;
}
-void
-queue_init(struct queue *queue, unsigned max_length)
+queue::queue(unsigned _max_length)
+ :max_length(_max_length), length(0),
+ version(1),
+ items(g_new(struct queue_item, max_length)),
+ order((unsigned *)g_malloc(sizeof(order[0]) * max_length)),
+ id_to_position((int *)g_malloc(sizeof(id_to_position[0]) *
+ max_length * QUEUE_HASH_MULT)),
+ repeat(false),
+ single(false),
+ consume(false),
+ random(false),
+ rand(g_rand_new())
{
- queue->max_length = max_length;
- queue->length = 0;
- queue->version = 1;
- queue->repeat = false;
- queue->random = false;
- queue->single = false;
- queue->consume = false;
-
- queue->items = g_new(struct queue_item, max_length);
- queue->order = (unsigned *)
- g_malloc(sizeof(queue->order[0]) * max_length);
- queue->id_to_position = (int *)
- g_malloc(sizeof(queue->id_to_position[0]) *
- max_length * QUEUE_HASH_MULT);
-
for (unsigned i = 0; i < max_length * QUEUE_HASH_MULT; ++i)
- queue->id_to_position[i] = -1;
-
- queue->rand = g_rand_new();
+ id_to_position[i] = -1;
}
-void
-queue_finish(struct queue *queue)
+queue::~queue()
{
- queue_clear(queue);
+ queue_clear(this);
- g_free(queue->items);
- g_free(queue->order);
- g_free(queue->id_to_position);
+ g_free(items);
+ g_free(order);
+ g_free(id_to_position);
- g_rand_free(queue->rand);
+ g_rand_free(rand);
}
static const struct queue_item *
diff --git a/src/Queue.hxx b/src/Queue.hxx
index 4c6d5ea1..6ab0a833 100644
--- a/src/Queue.hxx
+++ b/src/Queue.hxx
@@ -99,6 +99,17 @@ struct queue {
/** random number generator for shuffle and random mode */
GRand *rand;
+
+ queue(unsigned max_length);
+
+ /**
+ * Deinitializes a queue object. It does not free the queue
+ * pointer itself.
+ */
+ ~queue();
+
+ queue(const queue &other) = delete;
+ queue &operator=(const queue &other) = delete;
};
static inline unsigned
@@ -233,19 +244,6 @@ queue_song_newer(const struct queue *queue, unsigned position,
}
/**
- * Initialize a queue object.
- */
-void
-queue_init(struct queue *queue, unsigned max_length);
-
-/**
- * Deinitializes a queue object. It does not free the queue pointer
- * itself.
- */
-void
-queue_finish(struct queue *queue);
-
-/**
* Returns the order number following the specified one. This takes
* end of queue and "repeat" mode into account.
*
diff --git a/test/TestQueuePriority.cxx b/test/TestQueuePriority.cxx
index b187176e..5a0f6916 100644
--- a/test/TestQueuePriority.cxx
+++ b/test/TestQueuePriority.cxx
@@ -50,8 +50,7 @@ main(G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
{
struct song songs[16];
- struct queue queue;
- queue_init(&queue, 32);
+ struct queue queue(32);
for (unsigned i = 0; i < G_N_ELEMENTS(songs); ++i)
queue_append(&queue, &songs[i], 0);