yazevnul 9abfb1a53b Restoring authorship annotation for <yazevnul@yandex-team.ru>. Commit 2 of 2. 3 лет назад
..
ut 4f292c7e2f Restoring authorship annotation for <cerevra@yandex-team.ru>. Commit 2 of 2. 3 лет назад
README.md 4f292c7e2f Restoring authorship annotation for <cerevra@yandex-team.ru>. Commit 2 of 2. 3 лет назад
sliding_window.cpp 1110808a9d intermediate changes 3 лет назад
sliding_window.h d3a398281c Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2. 3 лет назад
sliding_window_ut.cpp 9abfb1a53b Restoring authorship annotation for <yazevnul@yandex-team.ru>. Commit 2 of 2. 3 лет назад
ya.make 1110808a9d intermediate changes 3 лет назад

README.md

TSlidingWindow - скользящее окно

TSlidingWindow - класс скользящего окна, позволяющий поддерживать и обновлять определённое значение (максимум, сумму) в промежутке времени определённой длины. Разбивает общий временной промежуток на маленькие бакеты (число задаётся в конструкторе) и ротирует их, поддерживая значение за окно. Есть возможность также указать мьютекс или спинлок для синхронизации (по умолчанию TFakeMutex). Использование:

// Создаём окно, вычисляющее максимум за последние пять минут, поддерживая 50 бакетов со значениями.
TSlidingWindow<TMaxOperation<int>> window(TDuration::Minutes(5), 50);

// Загружаем значения в различные моменты времени
window.Update(42, TInstant::Now());

... // делаем какую-то работу
int currentMaximum = window.Update(50, TInstant::Now());

... // делаем ещё что-то
int currentMaximum = window.Update(25, TInstant::Now());

...
// Просто получаем значение максимума за последние 5 минут
int currentMaximum = window.Update(TInstant::Now());

...
int currentMaximum = window.GetValue(); // получение значения без обновления времени

Поддерживаемые функции

  • TMaxOperation - максимум
  • TMinOperation - минимум
  • TSumOperation - сумма