RingBuffer (guint sz) {
// size = ffs(sz); /* find first [bit] set is a single inlined assembly instruction. But it looks like the API rounds up so... */
guint power_of_two;
- for (power_of_two = 1; 1U<<power_of_two < sz; power_of_two++);
- size = 1<<power_of_two;
- size_mask = size;
- size_mask -= 1;
- buf = new T[size];
- reset ();
-
- };
+ for (power_of_two = 1; 1U<<power_of_two < sz; power_of_two++) {}
+ size = 1<<power_of_two;
+ size_mask = size;
+ size_mask -= 1;
+ buf = new T[size];
+ reset ();
+ }
virtual ~RingBuffer() {
delete [] buf;
}
guint read (T *dest, guint cnt);
- guint write (T *src, guint cnt);
+ guint write (T const * src, guint cnt);
struct rw_vector {
T *buf[2];
}
template<class T> guint
-RingBuffer<T>::write (T *src, guint cnt)
+RingBuffer<T>::write (T const *src, guint cnt)
{
guint free_cnt;
vec->buf[0] = &buf[r];
vec->len[0] = free_cnt;
+ vec->buf[1] = 0;
vec->len[1] = 0;
}
}