aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/ringbuffer.cpp
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-12-22 11:38:38 -0800
committerChris Robinson <[email protected]>2018-12-22 11:38:38 -0800
commit10ce121dbd05e048c89a2b7c32f2ddabbc8fbe77 (patch)
tree534a48d8776c2e7cac9ee275f040aeb78198a534 /Alc/ringbuffer.cpp
parentb955c5cf5dbdc0814daa349e90907229774574aa (diff)
Use a normal delete instead of ll_ringbuffer_free
And use RingBufferPtr in more places
Diffstat (limited to 'Alc/ringbuffer.cpp')
-rw-r--r--Alc/ringbuffer.cpp45
1 files changed, 12 insertions, 33 deletions
diff --git a/Alc/ringbuffer.cpp b/Alc/ringbuffer.cpp
index 5ee2616f..a298ff43 100644
--- a/Alc/ringbuffer.cpp
+++ b/Alc/ringbuffer.cpp
@@ -31,25 +31,9 @@
#include "compat.h"
-/* NOTE: This lockless ringbuffer implementation is copied from JACK, extended
- * to include an element size. Consequently, parameters and return values for a
- * size or count is in 'elements', not bytes. Additionally, it only supports
- * single-consumer/single-provider operation. */
-struct ll_ringbuffer {
- std::atomic<size_t> write_ptr{0u};
- std::atomic<size_t> read_ptr{0u};
- size_t size{0u};
- size_t size_mask{0u};
- size_t elem_size{0u};
-
- alignas(16) char buf[];
-
- DEF_PLACE_NEWDEL()
-};
-
-ll_ringbuffer_t *ll_ringbuffer_create(size_t sz, size_t elem_sz, int limit_writes)
+ll_ringbuffer *ll_ringbuffer_create(size_t sz, size_t elem_sz, int limit_writes)
{
- ll_ringbuffer_t *rb;
+ ll_ringbuffer *rb;
size_t power_of_two = 0;
if(sz > 0)
@@ -75,12 +59,7 @@ ll_ringbuffer_t *ll_ringbuffer_create(size_t sz, size_t elem_sz, int limit_write
return rb;
}
-void ll_ringbuffer_free(ll_ringbuffer_t *rb)
-{
- delete rb;
-}
-
-void ll_ringbuffer_reset(ll_ringbuffer_t *rb)
+void ll_ringbuffer_reset(ll_ringbuffer *rb)
{
rb->write_ptr.store(0, std::memory_order_relaxed);
rb->read_ptr.store(0, std::memory_order_relaxed);
@@ -88,14 +67,14 @@ void ll_ringbuffer_reset(ll_ringbuffer_t *rb)
}
-size_t ll_ringbuffer_read_space(const ll_ringbuffer_t *rb)
+size_t ll_ringbuffer_read_space(const ll_ringbuffer *rb)
{
size_t w = rb->write_ptr.load(std::memory_order_acquire);
size_t r = rb->read_ptr.load(std::memory_order_acquire);
return (w-r) & rb->size_mask;
}
-size_t ll_ringbuffer_write_space(const ll_ringbuffer_t *rb)
+size_t ll_ringbuffer_write_space(const ll_ringbuffer *rb)
{
size_t w = rb->write_ptr.load(std::memory_order_acquire);
size_t r = rb->read_ptr.load(std::memory_order_acquire);
@@ -104,7 +83,7 @@ size_t ll_ringbuffer_write_space(const ll_ringbuffer_t *rb)
}
-size_t ll_ringbuffer_read(ll_ringbuffer_t *rb, void *dest, size_t cnt)
+size_t ll_ringbuffer_read(ll_ringbuffer *rb, void *dest, size_t cnt)
{
size_t read_ptr;
size_t free_cnt;
@@ -143,7 +122,7 @@ size_t ll_ringbuffer_read(ll_ringbuffer_t *rb, void *dest, size_t cnt)
return to_read;
}
-size_t ll_ringbuffer_peek(ll_ringbuffer_t *rb, void *dest, size_t cnt)
+size_t ll_ringbuffer_peek(ll_ringbuffer *rb, void *dest, size_t cnt)
{
size_t free_cnt;
size_t cnt2;
@@ -180,7 +159,7 @@ size_t ll_ringbuffer_peek(ll_ringbuffer_t *rb, void *dest, size_t cnt)
return to_read;
}
-size_t ll_ringbuffer_write(ll_ringbuffer_t *rb, const void *src, size_t cnt)
+size_t ll_ringbuffer_write(ll_ringbuffer *rb, const void *src, size_t cnt)
{
size_t write_ptr;
size_t free_cnt;
@@ -220,18 +199,18 @@ size_t ll_ringbuffer_write(ll_ringbuffer_t *rb, const void *src, size_t cnt)
}
-void ll_ringbuffer_read_advance(ll_ringbuffer_t *rb, size_t cnt)
+void ll_ringbuffer_read_advance(ll_ringbuffer *rb, size_t cnt)
{
rb->read_ptr.fetch_add(cnt, std::memory_order_acq_rel);
}
-void ll_ringbuffer_write_advance(ll_ringbuffer_t *rb, size_t cnt)
+void ll_ringbuffer_write_advance(ll_ringbuffer *rb, size_t cnt)
{
rb->write_ptr.fetch_add(cnt, std::memory_order_acq_rel);
}
-ll_ringbuffer_data_pair ll_ringbuffer_get_read_vector(const ll_ringbuffer_t *rb)
+ll_ringbuffer_data_pair ll_ringbuffer_get_read_vector(const ll_ringbuffer *rb)
{
ll_ringbuffer_data_pair ret;
size_t free_cnt;
@@ -265,7 +244,7 @@ ll_ringbuffer_data_pair ll_ringbuffer_get_read_vector(const ll_ringbuffer_t *rb)
return ret;
}
-ll_ringbuffer_data_pair ll_ringbuffer_get_write_vector(const ll_ringbuffer_t *rb)
+ll_ringbuffer_data_pair ll_ringbuffer_get_write_vector(const ll_ringbuffer *rb)
{
ll_ringbuffer_data_pair ret;
size_t free_cnt;