boost — c ++: круговой буфер с целочисленными индексами в качестве итераторов?

Я пишу приложение на C ++, где мне нужен кеш последнего N сообщения, которые прибыли И мне нужен способ получить индекс последнего сохраненного сообщения, чтобы позже я мог выяснить все сообщения, которые поступили впоследствии. Поскольку этот индекс должен передаваться вперед и назад по HTTP, он должен легко отображаться и проверяться, так как становится потенциально небезопасным пользовательским контентом.

До сих пор я думал об использовании boost::circular_buffer, Но я не смог найти способ выяснить индекс последней записи, кроме итератора.

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

(Допускается все до C ++ 11; STL / stdlib и Boost очень предпочтительны)

2

Решение

Если вам не нужно стирать элементы из буфера до тех пор, пока они не будут перезаписаны новыми данными, это становится почти тривиальным для реализации с помощью std::vector,

std::vector<item> buffer;
buffer.reserve(BUFFER_SIZE);
int next_slot = 0;

// to insert:
if (next_slot >= buffer.size())
buffer.push_back(new_item);
else
buffer[next_slot] = new_item;
++next_slot;
if (next_slot >= BUFFER_SIZE)
next_slot = 0;
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector