/* * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef RTC_BASE_NUMERICS_MOVING_MAX_COUNTER_H_ #define RTC_BASE_NUMERICS_MOVING_MAX_COUNTER_H_ #include <stdint.h> #include <deque> #include <limits> #include <utility> #include "absl/types/optional.h" #include "rtc_base/checks.h" namespace rtc { // Implements moving max: can add samples to it and calculate maximum over some // fixed moving window. // // Window size is configured at constructor. // Samples can be added with `Add()` and max over current window is returned by // `MovingMax`. `current_time_ms` in successive calls to Add and MovingMax // should never decrease as if it's a wallclock time. template <class T> class MovingMaxCounter { … }; template <class T> MovingMaxCounter<T>::MovingMaxCounter(int64_t window_length_ms) : … { … } template <class T> void MovingMaxCounter<T>::Add(const T& sample, int64_t current_time_ms) { … } template <class T> absl::optional<T> MovingMaxCounter<T>::Max(int64_t current_time_ms) { … } template <class T> void MovingMaxCounter<T>::Reset() { … } template <class T> void MovingMaxCounter<T>::RollWindow(int64_t new_time_ms) { … } } // namespace rtc #endif // RTC_BASE_NUMERICS_MOVING_MAX_COUNTER_H_