diff options
author | Andrey Fomichev <andrey.fomichev@gmail.com> | 2022-02-10 16:49:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:15 +0300 |
commit | 1c61afbf3db63940d05e6fefa3104b03457788a1 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/sliding_window/sliding_window.h | |
parent | e542cc14db4240643a06bb0dde87ecf361f101ab (diff) | |
download | ydb-1c61afbf3db63940d05e6fefa3104b03457788a1.tar.gz |
Restoring authorship annotation for Andrey Fomichev <andrey.fomichev@gmail.com>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/sliding_window/sliding_window.h')
-rw-r--r-- | library/cpp/sliding_window/sliding_window.h | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/library/cpp/sliding_window/sliding_window.h b/library/cpp/sliding_window/sliding_window.h index 8c6bc516f8..180bdf93d0 100644 --- a/library/cpp/sliding_window/sliding_window.h +++ b/library/cpp/sliding_window/sliding_window.h @@ -1,26 +1,26 @@ -#pragma once - +#pragma once + #include <util/datetime/base.h> #include <util/generic/vector.h> #include <util/system/guard.h> #include <util/system/mutex.h> #include <util/system/types.h> #include <util/system/yassert.h> - + #include <functional> #include <limits> - + namespace NSlidingWindow { namespace NPrivate { template <class TValueType_, class TCmp, TValueType_ initialValue> // std::less for max, std::greater for min struct TMinMaxOperationImpl { using TValueType = TValueType_; using TValueVector = TVector<TValueType>; - + static constexpr TValueType InitialValue() { return initialValue; } - + // Updates value in current bucket and returns window value static TValueType UpdateBucket(TValueType windowValue, TValueVector& buckets, size_t index, TValueType newVal) { Y_ASSERT(index < buckets.size()); @@ -34,7 +34,7 @@ namespace NSlidingWindow { } return windowValue; } - + static TValueType ClearBuckets(TValueType windowValue, TValueVector& buckets, const size_t firstElemIndex, const size_t bucketsToClear) { Y_ASSERT(!buckets.empty()); Y_ASSERT(firstElemIndex < buckets.size()); @@ -72,7 +72,7 @@ namespace NSlidingWindow { }; } - + template <class TValueType> using TMaxOperation = NPrivate::TMinMaxOperationImpl<TValueType, std::less<TValueType>, std::numeric_limits<TValueType>::min()>; @@ -111,7 +111,7 @@ namespace NSlidingWindow { return windowValue; } }; - + ///////////////////////////////////////////////////////////////////////////////////////// // TSlidingWindow ///////////////////////////////////////////////////////////////////////////////////////// @@ -121,7 +121,7 @@ namespace NSlidingWindow { using TValueType = typename TOperation::TValueType; using TValueVector = TVector<TValueType>; using TSizeType = typename TValueVector::size_type; - + public: TSlidingWindow(const TDuration& length, TSizeType partsNum) : Mutex() @@ -133,7 +133,7 @@ namespace NSlidingWindow { , MicroSecondsPerBucket(length.MicroSeconds() / partsNum) { } - + TSlidingWindow(const TSlidingWindow& w) : Mutex() { @@ -175,20 +175,20 @@ namespace NSlidingWindow { TValueType GetValue() const { TGuard<TMutexImpl> guard(&Mutex); return WindowValue; - } - + } + private: void UpdateCurrentBucket(TValueType val) { const TSizeType arraySize = Buckets.size(); const TSizeType pos = (FirstElem + arraySize - 1) % arraySize; WindowValue = TOperation::UpdateBucket(WindowValue, Buckets, pos, val); } - + void AdvanceTime(const TInstant& time) { if (time < PeriodStart + Length) { return; } - + if (PeriodStart.MicroSeconds() == 0) { PeriodStart = time - Length; return; |