Как эффективно обернуть индекс кольцевого буфера фиксированного размера

У меня есть кольцевой буфер фиксированного размера (реализованный в виде массива): при инициализации буфер заполняется с указанным максимальным количеством элементов, который позволяет использовать единичный индекс позиции для отслеживания нашей текущей позиции в круге.

Каков эффективный способ доступа к элементу в кольцевом буфере? Вот мое текущее решение:

int GetElement(int index)
{
    if (index >= buffer_size || index < 0)
    {
        // some code to handle the case
    }
    else
    {
        // wrap the index
        index = end_index + index >= buffer_size ? (index + end_index) - buffer_size : end_index + index;
    }

    return buffer[index];
}

Некоторые определения:
end_index - это индекс элемента сразу после последнего элемента в круге (он также будет считаться таким же, как start_index или первый элемент круга).
buffer_size равно максимальный размер буфера.

5
задан Kiril 1 February 2011 в 21:27
поделиться