mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-22 06:36:29 +01:00
pulling trunk
git-svn-id: svn://localhost/ardour2/branches/undo@586 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3038d8ce4a
commit
eb3f77df57
237 changed files with 68673 additions and 4051 deletions
|
|
@ -21,8 +21,9 @@
|
|||
#ifndef ringbuffer_npt_h
|
||||
#define ringbuffer_npt_h
|
||||
|
||||
#include <sys/mman.h>
|
||||
#include <pbd/atomic.h>
|
||||
//#include <sys/mman.h>
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
/* ringbuffer class where the element size is not required to be a power of two */
|
||||
|
||||
|
|
@ -43,14 +44,14 @@ class RingBufferNPT
|
|||
|
||||
void reset () {
|
||||
/* !!! NOT THREAD SAFE !!! */
|
||||
atomic_set (&write_ptr, 0);
|
||||
atomic_set (&read_ptr, 0);
|
||||
g_atomic_int_set (&write_ptr, 0);
|
||||
g_atomic_int_set (&read_ptr, 0);
|
||||
}
|
||||
|
||||
void set (size_t r, size_t w) {
|
||||
/* !!! NOT THREAD SAFE !!! */
|
||||
atomic_set (&write_ptr, w);
|
||||
atomic_set (&read_ptr, r);
|
||||
g_atomic_int_set (&write_ptr, w);
|
||||
g_atomic_int_set (&read_ptr, r);
|
||||
}
|
||||
|
||||
size_t read (T *dest, size_t cnt);
|
||||
|
|
@ -65,22 +66,22 @@ class RingBufferNPT
|
|||
void get_write_vector (rw_vector *);
|
||||
|
||||
void decrement_read_ptr (size_t cnt) {
|
||||
atomic_set (&read_ptr, (atomic_read(&read_ptr) - cnt) % size);
|
||||
g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) - cnt) % size);
|
||||
}
|
||||
|
||||
void increment_read_ptr (size_t cnt) {
|
||||
atomic_set (&read_ptr, (atomic_read(&read_ptr) + cnt) % size);
|
||||
g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) + cnt) % size);
|
||||
}
|
||||
|
||||
void increment_write_ptr (size_t cnt) {
|
||||
atomic_set (&write_ptr, (atomic_read(&write_ptr) + cnt) % size);
|
||||
g_atomic_int_set (&write_ptr, (g_atomic_int_get(&write_ptr) + cnt) % size);
|
||||
}
|
||||
|
||||
size_t write_space () {
|
||||
size_t w, r;
|
||||
|
||||
w = atomic_read (&write_ptr);
|
||||
r = atomic_read (&read_ptr);
|
||||
w = g_atomic_int_get (&write_ptr);
|
||||
r = g_atomic_int_get (&read_ptr);
|
||||
|
||||
if (w > r) {
|
||||
return ((r - w + size) % size) - 1;
|
||||
|
|
@ -94,8 +95,8 @@ class RingBufferNPT
|
|||
size_t read_space () {
|
||||
size_t w, r;
|
||||
|
||||
w = atomic_read (&write_ptr);
|
||||
r = atomic_read (&read_ptr);
|
||||
w = g_atomic_int_get (&write_ptr);
|
||||
r = g_atomic_int_get (&read_ptr);
|
||||
|
||||
if (w > r) {
|
||||
return w - r;
|
||||
|
|
@ -105,15 +106,15 @@ class RingBufferNPT
|
|||
}
|
||||
|
||||
T *buffer () { return buf; }
|
||||
size_t get_write_ptr () const { return atomic_read (&write_ptr); }
|
||||
size_t get_read_ptr () const { return atomic_read (&read_ptr); }
|
||||
size_t get_write_ptr () const { return g_atomic_int_get (&write_ptr); }
|
||||
size_t get_read_ptr () const { return g_atomic_int_get (&read_ptr); }
|
||||
size_t bufsize () const { return size; }
|
||||
|
||||
protected:
|
||||
T *buf;
|
||||
size_t size;
|
||||
atomic_t write_ptr;
|
||||
atomic_t read_ptr;
|
||||
mutable gint write_ptr;
|
||||
mutable gint read_ptr;
|
||||
};
|
||||
|
||||
template<class T> size_t
|
||||
|
|
@ -125,7 +126,7 @@ RingBufferNPT<T>::read (T *dest, size_t cnt)
|
|||
size_t n1, n2;
|
||||
size_t priv_read_ptr;
|
||||
|
||||
priv_read_ptr=atomic_read(&read_ptr);
|
||||
priv_read_ptr=g_atomic_int_get(&read_ptr);
|
||||
|
||||
if ((free_cnt = read_space ()) == 0) {
|
||||
return 0;
|
||||
|
|
@ -151,7 +152,7 @@ RingBufferNPT<T>::read (T *dest, size_t cnt)
|
|||
priv_read_ptr = n2;
|
||||
}
|
||||
|
||||
atomic_set(&read_ptr, priv_read_ptr);
|
||||
g_atomic_int_set(&read_ptr, priv_read_ptr);
|
||||
return to_read;
|
||||
}
|
||||
|
||||
|
|
@ -164,7 +165,7 @@ RingBufferNPT<T>::write (T *src, size_t cnt)
|
|||
size_t n1, n2;
|
||||
size_t priv_write_ptr;
|
||||
|
||||
priv_write_ptr=atomic_read(&write_ptr);
|
||||
priv_write_ptr=g_atomic_int_get(&write_ptr);
|
||||
|
||||
if ((free_cnt = write_space ()) == 0) {
|
||||
return 0;
|
||||
|
|
@ -190,7 +191,7 @@ RingBufferNPT<T>::write (T *src, size_t cnt)
|
|||
priv_write_ptr = n2;
|
||||
}
|
||||
|
||||
atomic_set(&write_ptr, priv_write_ptr);
|
||||
g_atomic_int_set(&write_ptr, priv_write_ptr);
|
||||
return to_write;
|
||||
}
|
||||
|
||||
|
|
@ -201,8 +202,8 @@ RingBufferNPT<T>::get_read_vector (RingBufferNPT<T>::rw_vector *vec)
|
|||
size_t cnt2;
|
||||
size_t w, r;
|
||||
|
||||
w = atomic_read (&write_ptr);
|
||||
r = atomic_read (&read_ptr);
|
||||
w = g_atomic_int_get (&write_ptr);
|
||||
r = g_atomic_int_get (&read_ptr);
|
||||
|
||||
if (w > r) {
|
||||
free_cnt = w - r;
|
||||
|
|
@ -240,8 +241,8 @@ RingBufferNPT<T>::get_write_vector (RingBufferNPT<T>::rw_vector *vec)
|
|||
size_t cnt2;
|
||||
size_t w, r;
|
||||
|
||||
w = atomic_read (&write_ptr);
|
||||
r = atomic_read (&read_ptr);
|
||||
w = g_atomic_int_get (&write_ptr);
|
||||
r = g_atomic_int_get (&read_ptr);
|
||||
|
||||
if (w > r) {
|
||||
free_cnt = ((r - w + size) % size) - 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue