23#include <SLES/OpenSLES.h>
44 assert(
size < std::numeric_limits<int>::max());
55 return push([&](T* ptr) ->
bool {
66 bool check __attribute__((unused));
68 check =
push([&](T* head) ->
bool {
74 assert(check == (result !=
nullptr));
81 bool result =
push([&](T* head) ->
bool {
102 int readptr = read_.load(std::memory_order_acquire);
103 int writeptr = write_.load(std::memory_order_relaxed);
108 int space = buffer_.size() - (int) (writeptr - readptr);
113 if (writer(buffer_.data() + (writeptr % buffer_.size()))) {
115 write_.store(writeptr, std::memory_order_release);
123 return front([&](T* ptr) ->
bool {
131 int readptr = read_.load(std::memory_order_relaxed);
133 read_.store(readptr, std::memory_order_release);
141 int writeptr = write_.load(std::memory_order_acquire);
142 int readptr = read_.load(std::memory_order_relaxed);
145 int available = (int) (writeptr - readptr);
146 if (available >= 1) {
148 reader(buffer_.data() + (readptr % buffer_.size()));
155 int writeptr = write_.load(std::memory_order_acquire);
156 int readptr = read_.load(std::memory_order_relaxed);
158 return (uint32_t) (writeptr - readptr);
163 std::vector<T> buffer_;
164 std::atomic<int> read_ {0};
165 std::atomic<int> write_ {0};
175 :
buf_(new uint8_t[alloc])
179 :
buf_(new uint8_t[alloc])
bool commitWriteablePtr(T *ptr)
ProducerConsumerQueue(size_t size)
bool front(const F &reader)
bool push(const F &writer)
Simple macro to hide class' copy constructor and assignment operator.
#define NON_COPYABLE(ClassName)
sample_buf(sample_buf &&o)
sample_buf & operator=(sample_buf &&o)
sample_buf(size_t alloc, size_t size)