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
//#include <sys/mman.h>
+#include <cstring>
#include <glib.h>
+#include "pbd/libpbd_visibility.h"
+
+namespace PBD {
+
/* ringbuffer class where the element size is not required to be a power of two */
template<class T>
-class RingBufferNPT
+class LIBPBD_API RingBufferNPT
{
public:
RingBufferNPT (size_t sz) {
size = sz;
buf = new T[size];
reset ();
-
- };
+ }
- virtual ~RingBufferNPT() {
+ virtual ~RingBufferNPT () {
delete [] buf;
}
}
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];
mutable gint read_ptr;
};
-template<class T> size_t
+template<class T> LIBPBD_API size_t
RingBufferNPT<T>::read (T *dest, size_t cnt)
{
size_t free_cnt;
return to_read;
}
-template<class T> size_t
-RingBufferNPT<T>::write (T *src, size_t cnt)
+template<class T> LIBPBD_API size_t
+RingBufferNPT<T>::write (const T *src, size_t cnt)
{
size_t free_cnt;
size_t cnt2;
return to_write;
}
-template<class T> void
+template<class T> LIBPBD_API void
RingBufferNPT<T>::get_read_vector (RingBufferNPT<T>::rw_vector *vec)
{
size_t free_cnt;
vec->buf[0] = &buf[r];
vec->len[0] = free_cnt;
+ vec->buf[1] = 0;
vec->len[1] = 0;
}
}
-template<class T> void
+template<class T> LIBPBD_API void
RingBufferNPT<T>::get_write_vector (RingBufferNPT<T>::rw_vector *vec)
{
size_t free_cnt;
}
}
+} /* namespace */
+
#endif /* __ringbuffer_npt_h__ */