diff options
author | David Robillard <d@drobilla.net> | 2022-08-09 21:54:29 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-08-12 01:05:19 -0400 |
commit | c99c6d4cf66dca1e9a13d6068da8a993f6540486 (patch) | |
tree | 38217cca8d3f2bf369a01f030df18c06081a2123 | |
parent | c041764ecd80a30c90a23a559d8c7ae4ddd7f37c (diff) | |
download | zix-c99c6d4cf66dca1e9a13d6068da8a993f6540486.tar.gz zix-c99c6d4cf66dca1e9a13d6068da8a993f6540486.tar.bz2 zix-c99c6d4cf66dca1e9a13d6068da8a993f6540486.zip |
Simplify ring writing code
The compiler is surely smart enough to factor out these common expressions, but
I find this easier to read this way anyway.
-rw-r--r-- | src/ring.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -194,16 +194,18 @@ zix_ring_write(ZixRing* ring, const void* src, uint32_t size) return 0; } - if (w + size <= ring->size) { + const uint32_t end = w + size; + if (end <= ring->size) { memcpy(&ring->buf[w], src, size); ZIX_WRITE_BARRIER(); - ring->write_head = (w + size) & ring->size_mask; + ring->write_head = end & ring->size_mask; } else { - const uint32_t this_size = ring->size - w; - memcpy(&ring->buf[w], src, this_size); - memcpy(&ring->buf[0], (const char*)src + this_size, size - this_size); + const uint32_t size1 = ring->size - w; + const uint32_t size2 = size - size1; + memcpy(&ring->buf[w], src, size1); + memcpy(&ring->buf[0], (const char*)src + size1, size2); ZIX_WRITE_BARRIER(); - ring->write_head = size - this_size; + ring->write_head = size2; } return size; |