| 1234567891011121314151617181920212223242526272829303132333435 | #pragma once#include <cstdint>  // for uint8_t#include <cstring>  // for size_t#include <memory>   // for unique_ptr#include <mutex>    // for mutex#include <vector>   // for vector#include "WrappedSemaphore.h"  // for WrappedSemaphorenamespace bell {class CircularBuffer { public:  CircularBuffer(size_t dataCapacity);  std::unique_ptr<bell::WrappedSemaphore> dataSemaphore;  size_t size() const { return dataSize; }  size_t capacity() const { return dataCapacity; }  size_t write(const uint8_t* data, size_t bytes);  size_t read(uint8_t* data, size_t bytes);  void emptyBuffer();  void emptyExcept(size_t size); private:  std::mutex bufferMutex;  size_t begIndex = 0;  size_t endIndex = 0;  size_t dataSize = 0;  size_t dataCapacity = 0;  std::vector<uint8_t> buffer;};}  // namespace bell
 |