☎️ rtchan
Realtime-safe channels (lock-free queues) for C++20
Loading...
Searching...
No Matches
rtchan::spsc< T, N > Class Template Reference

Single-producer, single-consumer queue. More...

#include <spsc.hpp>

Inheritance diagram for rtchan::spsc< T, N >:
rtchan::chan< T >

Additional Inherited Members

Public Member Functions inherited from rtchan::chan< T >
virtual auto try_send (T &&item) noexcept -> bool=0
 Tries to send item over the channel, aborting if there is not enough room.
virtual auto try_send (span< const T > &&items) noexcept -> span< const T >=0
 Tries to send as many items in items over the channel as will fit.
virtual void send (T &&item) noexcept=0
 Sends item over the channel. If the channel is full, this function will block until space is available using a busy-wait loop.
virtual void send (span< const T > &&items) noexcept=0
 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.
virtual auto try_recv (T &dest) noexcept -> bool=0
 Tries to receive an item from the channel, placing it into dest.
virtual auto try_recv (span< T > &dest) noexcept -> span< T >=0
 Tries to receive items up to the capacity of dest from the channel into dest.
virtual void recv (T &dest) noexcept=0
 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.
virtual void recv (span< T > &dest) noexcept=0
 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.
virtual auto try_reserve_send (size_t count) noexcept -> span< T >=0
 Tries to reserve space for count items in the channel to be manually written into.
virtual auto reserve_send_up_to (size_t count) noexcept -> span< T >=0
 Tries to reserve space for up to count items in the channel to be manually written into.
virtual auto reserve_send (size_t count) noexcept -> span< T >=0
 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.
virtual auto try_commit_send (span< const T > &reservation) noexcept -> bool=0
 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.
virtual void commit_send (span< const T > &reservation) noexcept=0
 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.
virtual auto try_reserve_recv (size_t count) noexcept -> span< T >=0
 Tries to reserve space for count items in the channel to be manually read from.
virtual auto reserve_recv_up_to (size_t count) noexcept -> span< T >=0
 Tries to reserve space for up to count items in the channel to be manually read from.
virtual auto reserve_recv (size_t count) noexcept -> span< T >=0
 Reserves space for count items in the channel to be manually read from.
virtual auto try_commit_recv (span< const T > &reservation) noexcept -> bool=0
 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.
virtual void commit_recv (span< const T > &reservation) noexcept=0
 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.

Detailed Description

template<typename T, size_t N>
requires (0 < N) && (std::has_single_bit(N))
class rtchan::spsc< T, N >

Single-producer, single-consumer queue.

Template Parameters
TThe type of item or message the queue holds
NThe capacity of the queue, must be a power of 2

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