summaryrefslogtreecommitdiffstats
path: root/ml/BitRateWindow.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-12-01 06:15:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-12-01 06:15:11 +0000
commit483926a283e118590da3f9ecfa75a8a4d62143ce (patch)
treecb77052778df9a128a8cd3ff5bf7645322a13bc5 /ml/BitRateWindow.cc
parentReleasing debian version 1.31.0-4. (diff)
downloadnetdata-483926a283e118590da3f9ecfa75a8a4d62143ce.tar.xz
netdata-483926a283e118590da3f9ecfa75a8a4d62143ce.zip
Merging upstream version 1.32.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ml/BitRateWindow.cc')
-rw-r--r--ml/BitRateWindow.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/ml/BitRateWindow.cc b/ml/BitRateWindow.cc
new file mode 100644
index 000000000..c4c994c42
--- /dev/null
+++ b/ml/BitRateWindow.cc
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "BitRateWindow.h"
+
+using namespace ml;
+
+std::pair<BitRateWindow::Edge, size_t> BitRateWindow::insert(bool Bit) {
+ Edge E;
+
+ BBC.insert(Bit);
+ switch (CurrState) {
+ case State::NotFilled: {
+ if (BBC.isFilled()) {
+ if (BBC.numSetBits() < SetBitsThreshold) {
+ CurrState = State::BelowThreshold;
+ } else {
+ CurrState = State::AboveThreshold;
+ }
+ } else {
+ CurrState = State::NotFilled;
+ }
+
+ E = {State::NotFilled, CurrState};
+ break;
+ } case State::BelowThreshold: {
+ if (BBC.numSetBits() >= SetBitsThreshold) {
+ CurrState = State::AboveThreshold;
+ }
+
+ E = {State::BelowThreshold, CurrState};
+ break;
+ } case State::AboveThreshold: {
+ if ((BBC.numSetBits() < SetBitsThreshold) ||
+ (CurrLength == MaxLength)) {
+ CurrState = State::Idle;
+ }
+
+ E = {State::AboveThreshold, CurrState};
+ break;
+ } case State::Idle: {
+ if (CurrLength == IdleLength) {
+ CurrState = State::NotFilled;
+ }
+
+ E = {State::Idle, CurrState};
+ break;
+ }
+ }
+
+ Action A = EdgeActions[E];
+ size_t L = (this->*A)(E.first, Bit);
+ return {E, L};
+}
+
+void BitRateWindow::print(std::ostream &OS) const {
+ switch (CurrState) {
+ case State::NotFilled:
+ OS << "NotFilled";
+ break;
+ case State::BelowThreshold:
+ OS << "BelowThreshold";
+ break;
+ case State::AboveThreshold:
+ OS << "AboveThreshold";
+ break;
+ case State::Idle:
+ OS << "Idle";
+ break;
+ default:
+ OS << "UnknownState";
+ break;
+ }
+
+ OS << ": " << BBC << " (Current Length: " << CurrLength << ")";
+}