mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-21 06:06:25 +01:00
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:
parent
55ba7c46c6
commit
9fdc36bac5
121 changed files with 755 additions and 3237 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue