|
CIRCT 23.0.0git
|
Shared queue/promise helper for polling-style read APIs. More...
#include <Ports.h>

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 |
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.
|
inlineexplicit |
|
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.
|
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.
|
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.
|
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.
|
private |
Definition at line 103 of file Ports.h.
Referenced by esi::detail::PollingBuffer< BufferedT >::enqueue(), and esi::detail::PollingBuffer< BufferedT >::readAsync().
|
private |
Definition at line 104 of file Ports.h.
Referenced by esi::detail::PollingBuffer< BufferedT >::enqueue(), esi::detail::PollingBuffer< BufferedT >::getMaxQueued(), and esi::detail::PollingBuffer< BufferedT >::setMaxQueued().
|
private |
|
private |
Definition at line 105 of file Ports.h.
Referenced by esi::detail::PollingBuffer< BufferedT >::enqueue(), and esi::detail::PollingBuffer< BufferedT >::readAsync().