Como você itera para trás sobre o tampão circular sem condicional?
-
26-09-2019 - |
Pergunta
Iterrar a frente através de um tampão circular sem usar um condicional é fácil com o operador restante ...
iterator = (iterator + 1) % buffer_size;
Eu não posso para a vida de mim descobrir a operação reversa, iterando para trás.
Solução
Faz iterator = (iterator + buffer_size - 1) % buffer_size
Trabalho para você? Vá menos do que todo o caminho.
Outras dicas
A resposta de Borealid funciona. (Nota: iterator
está definido como 0 inicialmente).
Outra solução é
iterator = buffer_size - 1 - (buffer_size - iterator) % buffer_size
com iterator
definido como buffer_size
inicialmente.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow