Merged timbyr's win32 branch. -r 547:566.

git-svn-id: svn://localhost/ardour2/trunk@567 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Taybin Rutkin 2006-06-07 14:54:12 +00:00
parent 55ba7c46c6
commit 9fdc36bac5
121 changed files with 755 additions and 3237 deletions

View file

@ -21,8 +21,9 @@
#ifndef ringbuffer_h
#define ringbuffer_h
#include <sys/mman.h>
#include <pbd/atomic.h>
//#include <sys/mman.h>
#include <glib.h>
template<class T>
class RingBuffer
@ -47,14 +48,14 @@ class RingBuffer
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);
@ -69,22 +70,22 @@ class RingBuffer
void get_write_vector (rw_vector *);
void decrement_read_ptr (size_t cnt) {
atomic_set (&read_ptr, (atomic_read(&read_ptr) - cnt) & size_mask);
g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) - cnt) & size_mask);
}
void increment_read_ptr (size_t cnt) {
atomic_set (&read_ptr, (atomic_read(&read_ptr) + cnt) & size_mask);
g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) + cnt) & size_mask);
}
void increment_write_ptr (size_t cnt) {
atomic_set (&write_ptr, (atomic_read(&write_ptr) + cnt) & size_mask);
g_atomic_int_set (&write_ptr, (g_atomic_int_get(&write_ptr) + cnt) & size_mask);
}
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_mask) - 1;
@ -98,8 +99,8 @@ class RingBuffer
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;
@ -109,15 +110,15 @@ class RingBuffer
}
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;
gint write_ptr;
gint read_ptr;
size_t size_mask;
};
@ -130,7 +131,7 @@ RingBuffer<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;
@ -156,7 +157,7 @@ RingBuffer<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;
}
@ -170,7 +171,7 @@ RingBuffer<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;
@ -196,7 +197,7 @@ RingBuffer<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;
}
@ -208,8 +209,8 @@ RingBuffer<T>::get_read_vector (RingBuffer<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;
@ -248,8 +249,8 @@ RingBuffer<T>::get_write_vector (RingBuffer<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_mask) - 1;