CIRCT 24.0.0git
Loading...
Searching...
No Matches
esi::detail::PollingBuffer< BufferedT > Class Template Reference

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

#include <Ports.h>

Inheritance diagram for esi::detail::PollingBuffer< BufferedT >:
Collaboration diagram for esi::detail::PollingBuffer< BufferedT >:

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.

◆ 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.

◆ 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.

◆ 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.

Member Data Documentation

◆ dataQueue

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

Definition at line 103 of file Ports.h.

◆ maxQueued

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

Definition at line 104 of file Ports.h.

◆ mutex

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

Definition at line 102 of file Ports.h.

◆ promiseQueue

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

Definition at line 105 of file Ports.h.


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