20 #ifndef ringbuffer_npt_h
21 #define ringbuffer_npt_h
54 void set (
size_t r,
size_t w) {
60 size_t read (T *dest,
size_t cnt);
61 size_t write (
const T *src,
size_t cnt);
123 template<
class T>
size_t
130 size_t priv_read_ptr;
132 priv_read_ptr=g_atomic_int_get(&read_ptr);
134 if ((free_cnt = read_space ()) == 0) {
138 to_read = cnt > free_cnt ? free_cnt : cnt;
140 cnt2 = priv_read_ptr + to_read;
143 n1 = size - priv_read_ptr;
150 memcpy (dest, &buf[priv_read_ptr], n1 *
sizeof (T));
151 priv_read_ptr = (priv_read_ptr + n1) % size;
154 memcpy (dest+n1, buf, n2 *
sizeof (T));
158 g_atomic_int_set(&read_ptr, priv_read_ptr);
162 template<
class T>
size_t
169 size_t priv_write_ptr;
171 priv_write_ptr=g_atomic_int_get(&write_ptr);
173 if ((free_cnt = write_space ()) == 0) {
177 to_write = cnt > free_cnt ? free_cnt : cnt;
179 cnt2 = priv_write_ptr + to_write;
182 n1 = size - priv_write_ptr;
189 memcpy (&buf[priv_write_ptr], src, n1 *
sizeof (T));
190 priv_write_ptr = (priv_write_ptr + n1) % size;
193 memcpy (buf, src+n1, n2 *
sizeof (T));
197 g_atomic_int_set(&write_ptr, priv_write_ptr);
201 template<
class T>
void
208 w = g_atomic_int_get (&write_ptr);
209 r = g_atomic_int_get (&read_ptr);
214 free_cnt = (w - r + size) % size;
225 vec->
buf[0] = &buf[r];
226 vec->
len[0] = size - r;
228 vec->
len[1] = cnt2 % size;
234 vec->
buf[0] = &buf[r];
235 vec->
len[0] = free_cnt;
241 template<
class T>
void
248 w = g_atomic_int_get (&write_ptr);
249 r = g_atomic_int_get (&read_ptr);
252 free_cnt = ((r - w + size) % size) - 1;
254 free_cnt = (r - w) - 1;
268 vec->
buf[0] = &buf[w];
269 vec->
len[0] = size - w;
271 vec->
len[1] = cnt2 % size;
273 vec->
buf[0] = &buf[w];
274 vec->
len[0] = free_cnt;
void get_read_vector(rw_vector *)
size_t get_read_ptr() const
size_t write(const T *src, size_t cnt)
void set(size_t r, size_t w)
size_t read(T *dest, size_t cnt)
void increment_read_ptr(size_t cnt)
void get_write_vector(rw_vector *)
void increment_write_ptr(size_t cnt)
void decrement_read_ptr(size_t cnt)
size_t get_write_ptr() const