aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/sliding_window/README.md
blob: b9c952ba8ec7c22910ba5039f797262999dfec62 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# TSlidingWindow - скользящее окно 
 
[TSlidingWindow](/arc/trunk/arcadia/library/cpp/sliding_window/sliding_window.h) - класс скользящего окна, позволяющий поддерживать и обновлять определённое значение (максимум, сумму) в промежутке времени определённой длины. Разбивает общий временной промежуток на маленькие бакеты (число задаётся в конструкторе) и ротирует их, поддерживая значение за окно. Есть возможность также указать мьютекс или спинлок для синхронизации (по умолчанию 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` - сумма