aboutsummaryrefslogtreecommitdiff
path: root/src/MusicBuffer.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-01-04 17:03:50 +0100
committerMax Kellermann <max@duempel.org>2013-01-04 17:03:50 +0100
commitf0be6a4b9edf193a018f0e671106616f6f8dd30c (patch)
tree3ed6d9627e2870c9bdcdd272a65bf8aa31b7d1c4 /src/MusicBuffer.cxx
parentbdab5d5f6ed5362f96faa3912fe8e6d1ed53505d (diff)
MusicBuffer: allocate with new/delete
Diffstat (limited to 'src/MusicBuffer.cxx')
-rw-r--r--src/MusicBuffer.cxx60
1 files changed, 30 insertions, 30 deletions
diff --git a/src/MusicBuffer.cxx b/src/MusicBuffer.cxx
index 59e59a95..e90344ae 100644
--- a/src/MusicBuffer.cxx
+++ b/src/MusicBuffer.cxx
@@ -37,49 +37,49 @@ struct music_buffer {
#ifndef NDEBUG
unsigned num_allocated;
#endif
-};
-struct music_buffer *
-music_buffer_new(unsigned num_chunks)
-{
- struct music_buffer *buffer;
- struct music_chunk *chunk;
-
- assert(num_chunks > 0);
-
- buffer = g_new(struct music_buffer, 1);
+ music_buffer(unsigned _num_chunks)
+ :chunks(g_new(struct music_chunk, _num_chunks)),
+ num_chunks(_num_chunks),
+ available(chunks),
+ mutex(g_mutex_new())
+#ifndef NDEBUG
+ , num_allocated(0)
+#endif
+ {
+ assert(num_chunks > 0);
- buffer->chunks = g_new(struct music_chunk, num_chunks);
- buffer->num_chunks = num_chunks;
+ struct music_chunk *chunk;
+ chunk = available = chunks;
- chunk = buffer->available = buffer->chunks;
+ for (unsigned i = 1; i < num_chunks; ++i) {
+ chunk->next = &chunks[i];
+ chunk = chunk->next;
+ }
- for (unsigned i = 1; i < num_chunks; ++i) {
- chunk->next = &buffer->chunks[i];
- chunk = chunk->next;
+ chunk->next = nullptr;
}
- chunk->next = NULL;
+ ~music_buffer() {
+ assert(chunks != nullptr);
+ assert(num_chunks > 0);
+ assert(num_allocated == 0);
- buffer->mutex = g_mutex_new();
-
-#ifndef NDEBUG
- buffer->num_allocated = 0;
-#endif
+ g_mutex_free(mutex);
+ g_free(chunks);
+ }
+};
- return buffer;
+struct music_buffer *
+music_buffer_new(unsigned num_chunks)
+{
+ return new music_buffer(num_chunks);
}
void
music_buffer_free(struct music_buffer *buffer)
{
- assert(buffer->chunks != NULL);
- assert(buffer->num_chunks > 0);
- assert(buffer->num_allocated == 0);
-
- g_mutex_free(buffer->mutex);
- g_free(buffer->chunks);
- g_free(buffer);
+ delete buffer;
}
unsigned