summaryrefslogtreecommitdiffstats
path: root/ml/BitBufferCounter.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-12-01 06:15:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-12-01 06:15:04 +0000
commite970e0b37b8bd7f246feb3f70c4136418225e434 (patch)
tree0b67c0ca45f56f2f9d9c5c2e725279ecdf52d2eb /ml/BitBufferCounter.h
parentAdding upstream version 1.31.0. (diff)
downloadnetdata-e970e0b37b8bd7f246feb3f70c4136418225e434.tar.xz
netdata-e970e0b37b8bd7f246feb3f70c4136418225e434.zip
Adding upstream version 1.32.0.upstream/1.32.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ml/BitBufferCounter.h')
-rw-r--r--ml/BitBufferCounter.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/ml/BitBufferCounter.h b/ml/BitBufferCounter.h
new file mode 100644
index 000000000..db924d776
--- /dev/null
+++ b/ml/BitBufferCounter.h
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef BIT_BUFFER_COUNTER_H
+#define BIT_BUFFER_COUNTER_H
+
+#include "ml-private.h"
+
+namespace ml {
+
+class BitBufferCounter {
+public:
+ BitBufferCounter(size_t Capacity) : V(Capacity, 0), NumSetBits(0), N(0) {}
+
+ std::vector<bool> getBuffer() const;
+
+ void insert(bool Bit);
+
+ void print(std::ostream &OS) const;
+
+ bool isFilled() const {
+ return N >= V.size();
+ }
+
+ size_t numSetBits() const {
+ return NumSetBits;
+ }
+
+private:
+ inline size_t size() const {
+ return N < V.size() ? N : V.size();
+ }
+
+ inline size_t start() const {
+ if (N <= V.size())
+ return 0;
+
+ return N % V.size();
+ }
+
+private:
+ std::vector<bool> V;
+ size_t NumSetBits;
+
+ size_t N;
+};
+
+} // namespace ml
+
+inline std::ostream& operator<<(std::ostream &OS, const ml::BitBufferCounter &BBC) {
+ BBC.print(OS);
+ return OS;
+}
+
+#endif /* BIT_BUFFER_COUNTER_H */