2016-07-29 Update zh.po for Ardoru 5.0
[ardour.git] / libs / pbd / pbd / ringbuffer.h
index 652457b4937ada5ff5b39ce67e7be054f10f15c1..58c463ecbe5373ea344f0a536a1c17930ffea39a 100644 (file)
 #include <cstring>
 #include <glib.h>
 
+#include "pbd/libpbd_visibility.h"
+
 template<class T>
-class RingBuffer 
+class /*LIBPBD_API*/ RingBuffer
 {
   public:
        RingBuffer (guint sz) {
@@ -37,7 +39,7 @@ class RingBuffer
        buf = new T[size];
        reset ();
        }
-       
+
        virtual ~RingBuffer() {
                delete [] buf;
        }
@@ -53,7 +55,7 @@ class RingBuffer
                g_atomic_int_set (&write_idx, w);
                g_atomic_int_set (&read_idx, r);
        }
-       
+
        guint read  (T *dest, guint cnt);
        guint write (T const * src,  guint cnt);
 
@@ -64,25 +66,25 @@ class RingBuffer
 
        void get_read_vector (rw_vector *);
        void get_write_vector (rw_vector *);
-       
+
        void decrement_read_idx (guint cnt) {
                g_atomic_int_set (&read_idx, (g_atomic_int_get(&read_idx) - cnt) & size_mask);
-       }                
+       }
 
        void increment_read_idx (guint cnt) {
                g_atomic_int_set (&read_idx, (g_atomic_int_get(&read_idx) + cnt) & size_mask);
-       }                
+       }
 
        void increment_write_idx (guint cnt) {
                g_atomic_int_set (&write_idx,  (g_atomic_int_get(&write_idx) + cnt) & size_mask);
-       }                
+       }
 
-       guint write_space () {
+       guint write_space () const {
                guint w, r;
-               
+
                w = g_atomic_int_get (&write_idx);
                r = g_atomic_int_get (&read_idx);
-               
+
                if (w > r) {
                        return ((r - w + size) & size_mask) - 1;
                } else if (w < r) {
@@ -91,13 +93,13 @@ class RingBuffer
                        return size - 1;
                }
        }
-       
-       guint read_space () {
+
+       guint read_space () const {
                guint w, r;
-               
+
                w = g_atomic_int_get (&write_idx);
                r = g_atomic_int_get (&read_idx);
-               
+
                if (w > r) {
                        return w - r;
                } else {
@@ -118,7 +120,7 @@ class RingBuffer
        guint size_mask;
 };
 
-template<class T> guint 
+template<class T> /*LIBPBD_API*/ guint
 RingBuffer<T>::read (T *dest, guint cnt)
 {
         guint free_cnt;
@@ -134,7 +136,7 @@ RingBuffer<T>::read (T *dest, guint cnt)
         }
 
         to_read = cnt > free_cnt ? free_cnt : cnt;
-        
+
         cnt2 = priv_read_idx + to_read;
 
         if (cnt2 > size) {
@@ -144,7 +146,7 @@ RingBuffer<T>::read (T *dest, guint cnt)
                 n1 = to_read;
                 n2 = 0;
         }
-        
+
         memcpy (dest, &buf[priv_read_idx], n1 * sizeof (T));
         priv_read_idx = (priv_read_idx + n1) & size_mask;
 
@@ -157,7 +159,7 @@ RingBuffer<T>::read (T *dest, guint cnt)
         return to_read;
 }
 
-template<class T> guint
+template<class T> /*LIBPBD_API*/ guint
 RingBuffer<T>::write (T const *src, guint cnt)
 
 {
@@ -174,7 +176,7 @@ RingBuffer<T>::write (T const *src, guint cnt)
         }
 
         to_write = cnt > free_cnt ? free_cnt : cnt;
-        
+
         cnt2 = priv_write_idx + to_write;
 
         if (cnt2 > size) {
@@ -197,17 +199,17 @@ RingBuffer<T>::write (T const *src, guint cnt)
         return to_write;
 }
 
-template<class T> void
-RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
+template<class T> /*LIBPBD_API*/ void
+RingBuffer<T>::get_read_vector (typename RingBuffer<T>::rw_vector *vec)
 
 {
        guint free_cnt;
        guint cnt2;
        guint w, r;
-       
+
        w = g_atomic_int_get (&write_idx);
        r = g_atomic_int_get (&read_idx);
-       
+
        if (w > r) {
                free_cnt = w - r;
        } else {
@@ -218,7 +220,7 @@ RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
 
        if (cnt2 > size) {
                /* Two part vector: the rest of the buffer after the
-                  current write ptr, plus some from the start of 
+                  current write ptr, plus some from the start of
                   the buffer.
                */
 
@@ -228,9 +230,9 @@ RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
                vec->len[1] = cnt2 & size_mask;
 
        } else {
-               
+
                /* Single part vector: just the rest of the buffer */
-               
+
                vec->buf[0] = &buf[r];
                vec->len[0] = free_cnt;
                vec->buf[1] = 0;
@@ -238,17 +240,17 @@ RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
        }
 }
 
-template<class T> void
-RingBuffer<T>::get_write_vector (RingBuffer<T>::rw_vector *vec)
+template<class T> /*LIBPBD_API*/ void
+RingBuffer<T>::get_write_vector (typename RingBuffer<T>::rw_vector *vec)
 
 {
        guint free_cnt;
        guint cnt2;
        guint w, r;
-       
+
        w = g_atomic_int_get (&write_idx);
        r = g_atomic_int_get (&read_idx);
-       
+
        if (w > r) {
                free_cnt = ((r - w + size) & size_mask) - 1;
        } else if (w < r) {
@@ -256,13 +258,13 @@ RingBuffer<T>::get_write_vector (RingBuffer<T>::rw_vector *vec)
        } else {
                free_cnt = size - 1;
        }
-       
+
        cnt2 = w + free_cnt;
 
        if (cnt2 > size) {
-               
+
                /* Two part vector: the rest of the buffer after the
-                  current write ptr, plus some from the start of 
+                  current write ptr, plus some from the start of
                   the buffer.
                */