PIDUINO
Loading...
Searching...
No Matches
Piduino::ThreadSafeBuffer< T >

This provides a thread safe buffer. More...

#include <threadsafebuffer.h>

Collaboration diagram for Piduino::ThreadSafeBuffer< T >:

Public Member Functions

 ThreadSafeBuffer ()
 
virtual ~ThreadSafeBuffer ()
 
virtual void write (const T &data)
 
virtual void write (const T *buf, size_t len)
 
virtual void write (const std::vector< T > &dataVec)
 
virtual bool read (T &data, long msTimeout=0)
 
virtual size_t read (std::vector< T > &dataVec, long msTimeout=0)
 
virtual size_t read (T *buf, size_t max, long msTimeout=0)
 
virtual bool peek (T &data, long msTimeout=0)
 
virtual size_t peek (std::vector< T > &dataVec, long msTimeout=0)
 
virtual size_t peek (T *buf, size_t max, long msTimeout=0)
 
size_t size () const
 
template<typename Functor >
void iterate (Functor functor)
 

Protected Member Functions

void waitForData (std::unique_lock< std::mutex > &lock, long msTimeout)
 
void writeData (const T &data)
 
void writeData (const T *buf, size_t len)
 
bool readData (T &data)
 
size_t readData (std::vector< T > &dataVec)
 
size_t readData (T *buf, size_t max)
 
bool peekData (T &data)
 
size_t peekData (std::vector< T > &dataVec)
 
size_t peekData (T *buf, size_t max)
 
virtual size_t sizeOfData (const T &) const
 

Protected Attributes

std::list< T > _queue
 
std::mutex _queueMutex
 
std::condition_variable _msgNotification
 
size_t _numEnqueued
 

Detailed Description

template<class T>
class Piduino::ThreadSafeBuffer< T >

This provides a thread safe buffer.

Author
Copyright © 2014 Chris Desjardins
Copyright © 2018-2025 Pascal JEAN

Definition at line 33 of file threadsafebuffer.h.

Constructor & Destructor Documentation

◆ ThreadSafeBuffer()

template<class T >
Piduino::ThreadSafeBuffer< T >::ThreadSafeBuffer ( )
inline

Definition at line 35 of file threadsafebuffer.h.

◆ ~ThreadSafeBuffer()

template<class T >
virtual Piduino::ThreadSafeBuffer< T >::~ThreadSafeBuffer ( )
inlinevirtual

Definition at line 42 of file threadsafebuffer.h.

Member Function Documentation

◆ iterate()

template<class T >
template<typename Functor >
void Piduino::ThreadSafeBuffer< T >::iterate ( Functor  functor)
inline

◆ peek() [1/3]

template<class T >
virtual size_t Piduino::ThreadSafeBuffer< T >::peek ( std::vector< T > &  dataVec,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 114 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::peekData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ peek() [2/3]

template<class T >
virtual bool Piduino::ThreadSafeBuffer< T >::peek ( T &  data,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 102 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::peekData(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ peek() [3/3]

template<class T >
virtual size_t Piduino::ThreadSafeBuffer< T >::peek ( T *  buf,
size_t  max,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 126 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::peekData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ peekData() [1/3]

template<class T >
size_t Piduino::ThreadSafeBuffer< T >::peekData ( std::vector< T > &  dataVec)
inlineprotected

Definition at line 244 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::peekData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::sizeOfData().

Here is the call graph for this function:

◆ peekData() [2/3]

◆ peekData() [3/3]

template<class T >
size_t Piduino::ThreadSafeBuffer< T >::peekData ( T *  buf,
size_t  max 
)
inlineprotected

Definition at line 255 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_numEnqueued, Piduino::ThreadSafeBuffer< T >::peekData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::sizeOfData().

Here is the call graph for this function:

◆ read() [1/3]

template<class T >
virtual size_t Piduino::ThreadSafeBuffer< T >::read ( std::vector< T > &  dataVec,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 79 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::readData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ read() [2/3]

template<class T >
virtual bool Piduino::ThreadSafeBuffer< T >::read ( T &  data,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 67 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::readData(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ read() [3/3]

template<class T >
virtual size_t Piduino::ThreadSafeBuffer< T >::read ( T *  buf,
size_t  max,
long  msTimeout = 0 
)
inlinevirtual

Definition at line 91 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_queueMutex, Piduino::ThreadSafeBuffer< T >::readData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::waitForData().

Here is the call graph for this function:

◆ readData() [1/3]

template<class T >
size_t Piduino::ThreadSafeBuffer< T >::readData ( std::vector< T > &  dataVec)
inlineprotected

Definition at line 211 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::readData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::sizeOfData().

Here is the call graph for this function:

◆ readData() [2/3]

◆ readData() [3/3]

template<class T >
size_t Piduino::ThreadSafeBuffer< T >::readData ( T *  buf,
size_t  max 
)
inlineprotected

Definition at line 222 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_numEnqueued, Piduino::ThreadSafeBuffer< T >::readData(), Piduino::ThreadSafeBuffer< T >::size(), and Piduino::ThreadSafeBuffer< T >::sizeOfData().

Here is the call graph for this function:

◆ size()

◆ sizeOfData()

template<class T >
virtual size_t Piduino::ThreadSafeBuffer< T >::sizeOfData ( const T &  ) const
inlineprotectedvirtual

◆ waitForData()

◆ write() [1/3]

template<class T >
virtual void Piduino::ThreadSafeBuffer< T >::write ( const std::vector< T > &  dataVec)
inlinevirtual

Definition at line 63 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::write().

Here is the call graph for this function:

◆ write() [2/3]

template<class T >
virtual void Piduino::ThreadSafeBuffer< T >::write ( const T &  data)
inlinevirtual

Definition at line 45 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_msgNotification, Piduino::ThreadSafeBuffer< T >::_queueMutex, and Piduino::ThreadSafeBuffer< T >::writeData().

Referenced by Piduino::ThreadSafeBuffer< T >::write().

Here is the call graph for this function:

◆ write() [3/3]

template<class T >
virtual void Piduino::ThreadSafeBuffer< T >::write ( const T *  buf,
size_t  len 
)
inlinevirtual

Definition at line 54 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::_msgNotification, Piduino::ThreadSafeBuffer< T >::_queueMutex, and Piduino::ThreadSafeBuffer< T >::writeData().

Here is the call graph for this function:

◆ writeData() [1/2]

◆ writeData() [2/2]

template<class T >
void Piduino::ThreadSafeBuffer< T >::writeData ( const T *  buf,
size_t  len 
)
inlineprotected

Definition at line 192 of file threadsafebuffer.h.

References Piduino::ThreadSafeBuffer< T >::writeData().

Here is the call graph for this function:

Member Data Documentation

◆ _msgNotification

template<class T >
std::condition_variable Piduino::ThreadSafeBuffer< T >::_msgNotification
protected

◆ _numEnqueued

◆ _queue

◆ _queueMutex