53#include <condition_variable>
75 virtual void write (
const T& data) {
84 virtual void write (
const T * buf,
size_t len) {
93 virtual void write (
const std::vector<T>& dataVec) {
94 write (dataVec.data(), dataVec.size());
97 virtual bool read (T& data,
long msTimeout = 0) {
109 virtual size_t read (std::vector<T>& dataVec,
long msTimeout = 0) {
121 virtual size_t read (T * buf,
size_t max,
long msTimeout = 0) {
132 virtual bool peek (T& data,
long msTimeout = 0) {
144 virtual size_t peek (std::vector<T>& dataVec,
long msTimeout = 0) {
156 virtual size_t peek (T * buf,
size_t max,
long msTimeout = 0) {
181 template <
typename Functor>
void iterate (Functor functor) {
188 int numChanged = functor (
_queue);
195 void waitForData (std::unique_lock<std::mutex>& lock,
long msTimeout) {
196 if (msTimeout != 0) {
198 std::chrono::system_clock::time_point timeLimit = std::chrono::system_clock::now() +
199 std::chrono::milliseconds (msTimeout);
200 while (
_queue.empty() ==
true) {
205 if (std::chrono::system_clock::now() >= timeLimit) {
232 if (
_queue.empty() ==
false) {
247 dataVec.push_back (data);
267 if (
_queue.empty() ==
false) {
280 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.