aboutsummaryrefslogtreecommitdiffstats
path: root/alc/ringbuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'alc/ringbuffer.h')
-rw-r--r--alc/ringbuffer.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/alc/ringbuffer.h b/alc/ringbuffer.h
index 3151fdcb..78bea846 100644
--- a/alc/ringbuffer.h
+++ b/alc/ringbuffer.h
@@ -25,6 +25,7 @@ using ll_ringbuffer_data_pair = std::pair<ll_ringbuffer_data,ll_ringbuffer_data>
struct RingBuffer {
+private:
std::atomic<size_t> mWritePtr{0u};
std::atomic<size_t> mReadPtr{0u};
size_t mWriteSize{0u};
@@ -33,6 +34,7 @@ struct RingBuffer {
al::FlexArray<al::byte, 16> mBuffer;
+public:
RingBuffer(const size_t count) : mBuffer{count} { }
/** Reset the read and write pointers to zero. This is not thread safe. */
@@ -82,16 +84,16 @@ struct RingBuffer {
/** Advance the write pointer `cnt' places. */
void writeAdvance(size_t cnt) noexcept;
+ /**
+ * Create a new ringbuffer to hold at least `sz' elements of `elem_sz'
+ * bytes. The number of elements is rounded up to the next power of two
+ * (even if it is already a power of two, to ensure the requested amount
+ * can be written).
+ */
+ static std::unique_ptr<RingBuffer> Create(size_t sz, size_t elem_sz, int limit_writes);
+
DEF_FAM_NEWDEL(RingBuffer, mBuffer)
};
using RingBufferPtr = std::unique_ptr<RingBuffer>;
-
-/**
- * Create a new ringbuffer to hold at least `sz' elements of `elem_sz' bytes.
- * The number of elements is rounded up to the next power of two (even if it is
- * already a power of two, to ensure the requested amount can be written).
- */
-RingBufferPtr CreateRingBuffer(size_t sz, size_t elem_sz, int limit_writes);
-
#endif /* RINGBUFFER_H */