MultiProducerQueueAdapter::SharedFifoState
Public Functions
| Name | |
|---|---|
| void | push(T & data, uint64_t arrive_cycle) |
| bool | full() const |
| std::optional< uint64_t > | frontArrival() const |
| bool | empty() const |
| template <typename Visitor > bool | consume(uint64_t current_cycle, Visitor && visitor) |
| void | clear() |
| bool | canAdmitAt(uint64_t cycle) const |
| bool | canAdmit() const |
| void | beginCycle(uint64_t cycle) |
| size_t | available() const |
| SharedFifoState(size_t logical_capacity) |
Public Attributes
| Name | |
|---|---|
| size_t | size |
| const size_t | ring_mask |
| const size_t | ring_capacity |
| const size_t | logical_capacity |
| size_t | high_water |
| uint64_t | head_ticket |
| std::vector< SharedEntry > | entries |
| size_t | admitted_this_cycle |
| uint64_t | admission_cycle |
Detailed Description
struct MultiProducerQueueAdapter::SharedFifoState;
Receiver-only bounded destination FIFO.
The object is separately allocated and cache-line aligned so producer access to the lane table and signal words never shares a cache line with the receiver's head/size/admission counters. Storage is allocated once at configuration time and uses a power-of-two ring; no receive allocates.
Public Functions Documentation
function push
inline void push(
T & data,
uint64_t arrive_cycle
)
function full
inline bool full() const
function frontArrival
inline std::optional< uint64_t > frontArrival() const
function empty
inline bool empty() const
function consume
template <typename Visitor >
inline bool consume(
uint64_t current_cycle,
Visitor && visitor
)
function clear
inline void clear()
function canAdmitAt
inline bool canAdmitAt(
uint64_t cycle
) const
function canAdmit
inline bool canAdmit() const
function beginCycle
inline void beginCycle(
uint64_t cycle
)
function available
inline size_t available() const
function SharedFifoState
inline explicit SharedFifoState(
size_t logical_capacity
)
Public Attributes Documentation
variable size
size_t size = 0;
variable ring_mask
const size_t ring_mask;
variable ring_capacity
const size_t ring_capacity;
variable logical_capacity
const size_t logical_capacity;
variable high_water
size_t high_water = 0;
variable head_ticket
uint64_t head_ticket = 0;
variable entries
std::vector< SharedEntry > entries;
variable admitted_this_cycle
size_t admitted_this_cycle = 0;
variable admission_cycle
uint64_t admission_cycle = std::numeric_limits<uint64_t>::max();
Updated on 2026-07-18 at 12:27:27 +0000