Iterating forward through a circular buffer without using a conditional is easy with the remainder operator...
iterator = (iterator + 1) % buffer_size;
I can't for the life of me figure out the reverse operation, iterating backward.
Iterating forward through a circular buffer without using a conditional is easy with the remainder operator...
iterator = (iterator + 1) % buffer_size;
I can't for the life of me figure out the reverse operation, iterating backward.
Does iterator = (iterator + buffer_size - 1) % buffer_size
work for you? Go one less than all the way around.
Borealid's answer works. (note: iterator
is set to 0 initially).
Another solution is
iterator = buffer_size - 1 - (buffer_size - iterator) % buffer_size
with iterator
set to buffer_size
initially.
© 2022 - 2024 — McMap. All rights reserved.
buffer_size - (iterator + 1) % buffer_size - 1
? – Amyloid