23#include <condition_variable>
45 virtual void write (
const T& data) {
54 virtual void write (
const T * buf,
size_t len) {
63 virtual void write (
const std::vector<T>& dataVec) {
64 write (dataVec.data(), dataVec.size());
67 virtual bool read (T& data,
long msTimeout = 0) {
79 virtual size_t read (std::vector<T>& dataVec,
long msTimeout = 0) {
91 virtual size_t read (T * buf,
size_t max,
long msTimeout = 0) {
102 virtual bool peek (T& data,
long msTimeout = 0) {
114 virtual size_t peek (std::vector<T>& dataVec,
long msTimeout = 0) {
126 virtual size_t peek (T * buf,
size_t max,
long msTimeout = 0) {
151 template <
typename Functor>
void iterate (Functor functor) {
158 int numChanged = functor (
_queue);
165 void waitForData (std::unique_lock<std::mutex>& lock,
long msTimeout) {
166 if (msTimeout != 0) {
168 std::chrono::system_clock::time_point timeLimit = std::chrono::system_clock::now() +
169 std::chrono::milliseconds (msTimeout);
170 while (
_queue.empty() ==
true) {
175 if (std::chrono::system_clock::now() >= timeLimit) {
202 if (
_queue.empty() ==
false) {
217 dataVec.push_back (data);
237 if (
_queue.empty() ==
false) {
250 dataVec.push_back (data);
This provides a thread safe buffer.
virtual bool read(T &data, long msTimeout=0)
virtual size_t read(std::vector< T > &dataVec, long msTimeout=0)
virtual void write(const std::vector< T > &dataVec)
void iterate(Functor functor)
virtual size_t peek(std::vector< T > &dataVec, long msTimeout=0)
void waitForData(std::unique_lock< std::mutex > &lock, long msTimeout)
virtual size_t read(T *buf, size_t max, long msTimeout=0)
void writeData(const T *buf, size_t len)
size_t readData(std::vector< T > &dataVec)
virtual size_t sizeOfData(const T &) const
void writeData(const T &data)
size_t peekData(std::vector< T > &dataVec)
virtual void write(const T &data)
virtual void write(const T *buf, size_t len)
size_t peekData(T *buf, size_t max)
size_t readData(T *buf, size_t max)
std::condition_variable _msgNotification
virtual size_t peek(T *buf, size_t max, long msTimeout=0)
virtual ~ThreadSafeBuffer()
virtual bool peek(T &data, long msTimeout=0)
Global namespace for Piduino.