X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2FringbufferNPT.h;h=65fe939597e942df4d41793a1552992e5d5e560e;hb=8648a8a13b04549362f14a0738947d997ef1abc7;hp=fee2efce3d8c78c4900eb09d0cb08580bf04c456;hpb=22c20ab6f215c0ab24702a479aa6821c25a7d058;p=ardour.git diff --git a/libs/pbd/pbd/ringbufferNPT.h b/libs/pbd/pbd/ringbufferNPT.h index fee2efce3d..65fe939597 100644 --- a/libs/pbd/pbd/ringbufferNPT.h +++ b/libs/pbd/pbd/ringbufferNPT.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef ringbuffer_npt_h @@ -23,22 +22,26 @@ //#include +#include #include +#include "pbd/libpbd_visibility.h" + +namespace PBD { + /* ringbuffer class where the element size is not required to be a power of two */ template -class RingBufferNPT +class LIBPBD_API RingBufferNPT { public: RingBufferNPT (size_t sz) { size = sz; buf = new T[size]; reset (); - - }; + } - virtual ~RingBufferNPT() { + virtual ~RingBufferNPT () { delete [] buf; } @@ -55,7 +58,7 @@ class RingBufferNPT } size_t read (T *dest, size_t cnt); - size_t write (T *src, size_t cnt); + size_t write (const T *src, size_t cnt); struct rw_vector { T *buf[2]; @@ -117,7 +120,7 @@ class RingBufferNPT mutable gint read_ptr; }; -template size_t +template LIBPBD_API size_t RingBufferNPT::read (T *dest, size_t cnt) { size_t free_cnt; @@ -156,8 +159,8 @@ RingBufferNPT::read (T *dest, size_t cnt) return to_read; } -template size_t -RingBufferNPT::write (T *src, size_t cnt) +template LIBPBD_API size_t +RingBufferNPT::write (const T *src, size_t cnt) { size_t free_cnt; size_t cnt2; @@ -195,7 +198,7 @@ RingBufferNPT::write (T *src, size_t cnt) return to_write; } -template void +template LIBPBD_API void RingBufferNPT::get_read_vector (RingBufferNPT::rw_vector *vec) { size_t free_cnt; @@ -230,11 +233,12 @@ RingBufferNPT::get_read_vector (RingBufferNPT::rw_vector *vec) vec->buf[0] = &buf[r]; vec->len[0] = free_cnt; + vec->buf[1] = 0; vec->len[1] = 0; } } -template void +template LIBPBD_API void RingBufferNPT::get_write_vector (RingBufferNPT::rw_vector *vec) { size_t free_cnt; @@ -272,4 +276,6 @@ RingBufferNPT::get_write_vector (RingBufferNPT::rw_vector *vec) } } +} /* namespace */ + #endif /* __ringbuffer_npt_h__ */