BitBufferCounter.h 964 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef BIT_BUFFER_COUNTER_H
  3. #define BIT_BUFFER_COUNTER_H
  4. #include "ml-private.h"
  5. namespace ml {
  6. class BitBufferCounter {
  7. public:
  8. BitBufferCounter(size_t Capacity) : V(Capacity, 0), NumSetBits(0), N(0) {}
  9. std::vector<bool> getBuffer() const;
  10. void insert(bool Bit);
  11. void print(std::ostream &OS) const;
  12. bool isFilled() const {
  13. return N >= V.size();
  14. }
  15. size_t numSetBits() const {
  16. return NumSetBits;
  17. }
  18. private:
  19. inline size_t size() const {
  20. return N < V.size() ? N : V.size();
  21. }
  22. inline size_t start() const {
  23. if (N <= V.size())
  24. return 0;
  25. return N % V.size();
  26. }
  27. private:
  28. std::vector<bool> V;
  29. size_t NumSetBits;
  30. size_t N;
  31. };
  32. } // namespace ml
  33. inline std::ostream& operator<<(std::ostream &OS, const ml::BitBufferCounter &BBC) {
  34. BBC.print(OS);
  35. return OS;
  36. }
  37. #endif /* BIT_BUFFER_COUNTER_H */