CircularBuffer.h 718 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <algorithm>
  3. #include <memory>
  4. #include <cstring>
  5. #include <mutex>
  6. #include <vector>
  7. #include "WrappedSemaphore.h"
  8. namespace bell {
  9. class CircularBuffer {
  10. public:
  11. CircularBuffer(size_t dataCapacity);
  12. std::unique_ptr<bell::WrappedSemaphore> dataSemaphore;
  13. size_t size() const {
  14. return dataSize;
  15. }
  16. size_t capacity() const {
  17. return dataCapacity;
  18. }
  19. size_t write(const uint8_t *data, size_t bytes);
  20. size_t read(uint8_t *data, size_t bytes);
  21. void emptyBuffer();
  22. void emptyExcept(size_t size);
  23. private:
  24. std::mutex bufferMutex;
  25. size_t begIndex = 0;
  26. size_t endIndex = 0;
  27. size_t dataSize = 0;
  28. size_t dataCapacity = 0;
  29. std::vector<uint8_t> buffer;
  30. };
  31. } // namespace bell