summaryrefslogtreecommitdiffstats
path: root/src/ring.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-08-09 21:54:29 -0400
committerDavid Robillard <d@drobilla.net>2022-08-12 01:05:19 -0400
commitc99c6d4cf66dca1e9a13d6068da8a993f6540486 (patch)
tree38217cca8d3f2bf369a01f030df18c06081a2123 /src/ring.c
parentc041764ecd80a30c90a23a559d8c7ae4ddd7f37c (diff)
downloadzix-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.
Diffstat (limited to 'src/ring.c')
-rw-r--r--src/ring.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/ring.c b/src/ring.c
index f15b582..c08798b 100644
--- a/src/ring.c
+++ b/src/ring.c
@@ -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;