8#include <choc/containers/choc_SingleReaderSingleWriterFIFO.h>
22template<
typename T, std::
size_t Capacity>
24 static_assert(Capacity > 0,
"Capacity must be > 0");
28 fifo_.reset(Capacity);
33 const bool pushed = fifo_.push(item);
34 if (!pushed) overflow_count_.fetch_add(1, std::memory_order_relaxed);
39 const bool pushed = fifo_.push(std::move(item));
40 if (!pushed) overflow_count_.fetch_add(1, std::memory_order_relaxed);
46 return fifo_.pop(item);
59 return fifo_.getUsedSlots() == 0;
63 return fifo_.getUsedSlots();
67 return overflow_count_.load(std::memory_order_relaxed);
71 overflow_count_.store(0, std::memory_order_relaxed);
82 static constexpr std::size_t
capacity() {
return Capacity; }
85 choc::fifo::SingleReaderSingleWriterFIFO<T> fifo_;
86 std::atomic<std::uint64_t> overflow_count_{0};
std::size_t size_approx() const
Definition spsc_queue.hpp:62
bool try_pop(T &item)
Definition spsc_queue.hpp:45
SpscQueue()
Definition spsc_queue.hpp:27
void reset_overflow_count()
Definition spsc_queue.hpp:70
std::uint64_t overflow_count() const
Definition spsc_queue.hpp:66
std::optional< T > try_pop()
Definition spsc_queue.hpp:50
bool try_push(T &&item)
Definition spsc_queue.hpp:38
static constexpr std::size_t capacity()
Definition spsc_queue.hpp:82
bool try_push(const T &item)
Definition spsc_queue.hpp:32
bool empty() const
Definition spsc_queue.hpp:58
SpscQueueTelemetry telemetry() const
Definition spsc_queue.hpp:74
Definition generated_event_source.hpp:33
Definition spsc_queue.hpp:12
std::size_t capacity
Definition spsc_queue.hpp:14
std::size_t size_approx
Definition spsc_queue.hpp:13
std::uint64_t overflow_count
Definition spsc_queue.hpp:15