|
☎️ rtchan
Realtime-safe channels (lock-free queues) for C++20
|
Multiple-producer, multiple-consumer queue. More...
#include <mpmc.hpp>
Public Member Functions | |
| auto | try_send (T &&item) noexcept -> bool override |
Tries to send item over the channel, aborting if there is not enough room. | |
| auto | try_send (span< const T > &&items) noexcept -> span< const T > override |
Tries to send as many items in items over the channel as will fit. | |
| void | send (T &&item) noexcept override |
Sends item over the channel. If the channel is full, this function will block until space is available using a busy-wait loop. | |
| void | send (span< const T > &&items) noexcept override |
Sends all items in items over the channel. If the channel cannot fit all of items, this function will block until space is available using a busy-wait loop. | |
| auto | try_recv (T &dest) noexcept -> bool override |
Tries to receive an item from the channel, placing it into dest. | |
| auto | try_recv (span< T > &dest) noexcept -> span< T > override |
Tries to receive items up to the capacity of dest from the channel into dest. | |
| void | recv (T &dest) noexcept override |
Receives an item from the channel into dest. If the channel is empty, this function will block until an item is available using a busy-wait loop. | |
| void | recv (span< T > &dest) noexcept override |
Receives items equal to the capacity of dest from the channel into dest. If the channel does not have enough items to fill dest, this function will block until there are enough available items using a busy-wait loop. | |
| auto | try_reserve_send (size_t count) noexcept -> span< T > override |
Tries to reserve space for count items in the channel to be manually written into. | |
| auto | reserve_send_up_to (size_t count) noexcept -> span< T > override |
Tries to reserve space for up to count items in the channel to be manually written into. | |
| auto | reserve_send (size_t count) noexcept -> span< T > override |
Reserves space for count items in the channel to be manually written into. This function may spin until it can return a contiguous span of length count. | |
| auto | try_commit_send (span< const T > &reservation) noexcept -> bool override |
Tries to commit the items in reservation, indicating that they are finished being sent and are ready to be received. This function will fail until all previously obtained reservations to reservation have been committed. | |
| void | commit_send (span< const T > &reservation) noexcept override |
Commits the items in reservation, indicating that they are finished being sent and are ready to be received. This function may spin until all previously obtained reservations to reservation have been committed. | |
| auto | try_reserve_recv (size_t count) noexcept -> span< T > override |
Tries to reserve space for count items in the channel to be manually read from. | |
| auto | reserve_recv_up_to (size_t count) noexcept -> span< T > override |
Tries to reserve space for up to count items in the channel to be manually read from. | |
| auto | reserve_recv (size_t count) noexcept -> span< T > override |
Reserves space for count items in the channel to be manually read from. | |
| auto | try_commit_recv (span< const T > &reservation) noexcept -> bool override |
Tries to release the items in reservation, indicating that they are finished being received and are safe to be overwritten. This function may spin until all previously obtained reservations to reservation have been committed. | |
| void | commit_recv (span< const T > &reservation) noexcept override |
Releases the items in reservation, indicating that they are finished being received and are safe to be overwritten. This function may spin until all previously obtained reservations to reservation have been committed. | |
Multiple-producer, multiple-consumer queue.
| T | The type of item or message the queue holds |
| N | The capacity of the queue, must be a power of 2 |
|
inlineoverridevirtualnoexcept |
Releases the items in reservation, indicating that they are finished being received and are safe to be overwritten. This function may spin until all previously obtained reservations to reservation have been committed.
| reservation | The reservation of items to mark as received |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Commits the items in reservation, indicating that they are finished being sent and are ready to be received. This function may spin until all previously obtained reservations to reservation have been committed.
| reservation | The reservation of items to mark as sent |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Receives items equal to the capacity of dest from the channel into dest. If the channel does not have enough items to fill dest, this function will block until there are enough available items using a busy-wait loop.
| dest | The destination to receive the items into |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Receives an item from the channel into dest. If the channel is empty, this function will block until an item is available using a busy-wait loop.
| dest | The destination to receive the item into |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Reserves space for count items in the channel to be manually read from.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to reserve space for up to count items in the channel to be manually read from.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Reserves space for count items in the channel to be manually written into. This function may spin until it can return a contiguous span of length count.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to reserve space for up to count items in the channel to be manually written into.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Sends all items in items over the channel. If the channel cannot fit all of items, this function will block until space is available using a busy-wait loop.
| items | The items to send |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Sends item over the channel. If the channel is full, this function will block until space is available using a busy-wait loop.
| item | The item to send |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to release the items in reservation, indicating that they are finished being received and are safe to be overwritten. This function may spin until all previously obtained reservations to reservation have been committed.
| reservation | The reservation of items to mark as received |
reservation was able to be committed or not. Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to commit the items in reservation, indicating that they are finished being sent and are ready to be received. This function will fail until all previously obtained reservations to reservation have been committed.
| reservation | The reservation of items to mark as sent |
reservation was able to be committed or not. Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to receive items up to the capacity of dest from the channel into dest.
| dest | The destination to receive the items into |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to receive an item from the channel, placing it into dest.
| dest | The destination to receive the item into |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to reserve space for count items in the channel to be manually read from.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to reserve space for count items in the channel to be manually written into.
| count | How many items to try to reserve space for |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to send as many items in items over the channel as will fit.
| items | The items to try to send |
Implements rtchan::chan< T >.
|
inlineoverridevirtualnoexcept |
Tries to send item over the channel, aborting if there is not enough room.
| item | The item to try to send |
Implements rtchan::chan< T >.