CIRCT 23.0.0git
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
esi::detail::PollingBuffer< BufferedT > Class Template Reference

Shared queue/promise helper for polling-style read APIs. More...

#include <Ports.h>

Collaboration diagram for esi::detail::PollingBuffer< BufferedT >:
Collaboration graph
[legend]

Public Member Functions

 PollingBuffer (uint64_t maxQueued)
 
uint64_t getMaxQueued ()
 Return the current bounded queue size. 0 means unbounded.
 
void setMaxQueued (uint64_t maxMsgs)
 Update the bounded queue size. 0 means unbounded.
 
bool enqueue (BufferedT &value)
 Try to deliver or enqueue a produced value.
 
std::future< BufferedT > readAsync ()
 Read the next value asynchronously.
 

Private Attributes

std::mutex mutex
 
std::queue< BufferedT > dataQueue
 
uint64_t maxQueued
 
std::queue< std::promise< BufferedT > > promiseQueue
 

Detailed Description

template<typename BufferedT>
class esi::detail::PollingBuffer< BufferedT >

Shared queue/promise helper for polling-style read APIs.

Producers either fulfill the oldest waiting reader immediately or enqueue the value for a later readAsync(). Consumers either receive buffered data immediately or install a promise which is fulfilled by the next enqueue.

Definition at line 43 of file Ports.h.

Constructor & Destructor Documentation

◆ PollingBuffer()

template<typename BufferedT >
esi::detail::PollingBuffer< BufferedT >::PollingBuffer ( uint64_t  maxQueued)
inlineexplicit

Definition at line 45 of file Ports.h.

Member Function Documentation

◆ enqueue()

template<typename BufferedT >
bool esi::detail::PollingBuffer< BufferedT >::enqueue ( BufferedT &  value)
inline

Try to deliver or enqueue a produced value.

Returns false only when the bounded queue is full.

Definition at line 62 of file Ports.h.

References assert(), esi::detail::PollingBuffer< BufferedT >::dataQueue, esi::detail::PollingBuffer< BufferedT >::maxQueued, esi::detail::PollingBuffer< BufferedT >::mutex, and esi::detail::PollingBuffer< BufferedT >::promiseQueue.

◆ getMaxQueued()

template<typename BufferedT >
uint64_t esi::detail::PollingBuffer< BufferedT >::getMaxQueued ( )
inline

Return the current bounded queue size. 0 means unbounded.

Definition at line 48 of file Ports.h.

References esi::detail::PollingBuffer< BufferedT >::maxQueued, and esi::detail::PollingBuffer< BufferedT >::mutex.

◆ readAsync()

template<typename BufferedT >
std::future< BufferedT > esi::detail::PollingBuffer< BufferedT >::readAsync ( )
inline

Read the next value asynchronously.

If a value is already buffered, the returned future is ready immediately. Otherwise the future is backed by an internal promise which is fulfilled by a later enqueue().

Definition at line 84 of file Ports.h.

References assert(), esi::detail::PollingBuffer< BufferedT >::dataQueue, esi::detail::PollingBuffer< BufferedT >::mutex, and esi::detail::PollingBuffer< BufferedT >::promiseQueue.

◆ setMaxQueued()

template<typename BufferedT >
void esi::detail::PollingBuffer< BufferedT >::setMaxQueued ( uint64_t  maxMsgs)
inline

Update the bounded queue size. 0 means unbounded.

Definition at line 54 of file Ports.h.

References esi::detail::PollingBuffer< BufferedT >::maxQueued, and esi::detail::PollingBuffer< BufferedT >::mutex.

Member Data Documentation

◆ dataQueue

template<typename BufferedT >
std::queue<BufferedT> esi::detail::PollingBuffer< BufferedT >::dataQueue
private

◆ maxQueued

template<typename BufferedT >
uint64_t esi::detail::PollingBuffer< BufferedT >::maxQueued
private

◆ mutex

template<typename BufferedT >
std::mutex esi::detail::PollingBuffer< BufferedT >::mutex
private

◆ promiseQueue

template<typename BufferedT >
std::queue<std::promise<BufferedT> > esi::detail::PollingBuffer< BufferedT >::promiseQueue
private

The documentation for this class was generated from the following file: