pulling trunk

git-svn-id: svn://localhost/ardour2/branches/undo@586 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Hans Fugal 2006-06-14 18:37:57 +00:00
parent 3038d8ce4a
commit eb3f77df57
237 changed files with 68673 additions and 4051 deletions

View file

@ -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;