simplify read/write space calculations
This optimization is possible because the buffer size is always a power of 2. See [1] for details. [1]: https://github.com/drobilla/zix/pull/1#issuecomment-1212687196
This commit is contained in:
parent
06749e0c67
commit
4ab3b0744a
|
@ -183,11 +183,7 @@ jack_ringbuffer_read_space (const jack_ringbuffer_t * rb)
|
|||
w = rb->write_ptr; JACK_ACQ_FENCE();
|
||||
r = rb->read_ptr;
|
||||
|
||||
if (w > r) {
|
||||
return w - r;
|
||||
} else {
|
||||
return (w - r + rb->size) & rb->size_mask;
|
||||
}
|
||||
return (w - r) & rb->size_mask;
|
||||
}
|
||||
|
||||
/* Return the number of bytes available for writing. This is the
|
||||
|
@ -202,13 +198,7 @@ jack_ringbuffer_write_space (const jack_ringbuffer_t * rb)
|
|||
w = rb->write_ptr;
|
||||
r = rb->read_ptr; JACK_ACQ_FENCE();
|
||||
|
||||
if (w > r) {
|
||||
return ((r - w + rb->size) & rb->size_mask) - 1;
|
||||
} else if (w < r) {
|
||||
return (r - w) - 1;
|
||||
} else {
|
||||
return rb->size - 1;
|
||||
}
|
||||
return (r - w - 1) & rb->size_mask;
|
||||
}
|
||||
|
||||
/* The copying data reader. Copy at most `cnt' bytes from `rb' to
|
||||
|
@ -367,17 +357,10 @@ jack_ringbuffer_get_read_vector (const jack_ringbuffer_t * rb,
|
|||
{
|
||||
size_t free_cnt;
|
||||
size_t cnt2;
|
||||
size_t w, r;
|
||||
size_t r;
|
||||
|
||||
w = rb->write_ptr; JACK_ACQ_FENCE();
|
||||
r = rb->read_ptr;
|
||||
|
||||
if (w > r) {
|
||||
free_cnt = w - r;
|
||||
} else {
|
||||
free_cnt = (w - r + rb->size) & rb->size_mask;
|
||||
}
|
||||
|
||||
free_cnt = jack_ringbuffer_read_space(rb);
|
||||
cnt2 = r + free_cnt;
|
||||
|
||||
if (cnt2 > rb->size) {
|
||||
|
@ -411,19 +394,10 @@ jack_ringbuffer_get_write_vector (const jack_ringbuffer_t * rb,
|
|||
{
|
||||
size_t free_cnt;
|
||||
size_t cnt2;
|
||||
size_t w, r;
|
||||
size_t w;
|
||||
|
||||
w = rb->write_ptr;
|
||||
r = rb->read_ptr; JACK_ACQ_FENCE();
|
||||
|
||||
if (w > r) {
|
||||
free_cnt = ((r - w + rb->size) & rb->size_mask) - 1;
|
||||
} else if (w < r) {
|
||||
free_cnt = (r - w) - 1;
|
||||
} else {
|
||||
free_cnt = rb->size - 1;
|
||||
}
|
||||
|
||||
free_cnt = jack_ringbuffer_write_space(rb);
|
||||
cnt2 = w + free_cnt;
|
||||
|
||||
if (cnt2 > rb->size) {
|
||||
|
|
Loading…
Reference in New Issue