Commit f0be6a4b authored by Max Kellermann's avatar Max Kellermann

MusicBuffer: allocate with new/delete

parent bdab5d5f
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment