MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ try_pop()

template<typename T , size_t Capacity>
std::optional< T > MayaFlux::Journal::RingBuffer< T, Capacity >::try_pop ( )
inlinenoexcept

Attempt to read an element.

Returns
Element if available, nullopt if buffer empty

Definition at line 50 of file RingBuffer.hpp.

51 {
52 const auto current_read = m_read_index.load(std::memory_order_relaxed);
53
54 if (current_read == m_write_index.load(std::memory_order_acquire)) {
55 return std::nullopt;
56 }
57
58 T item = m_buffer[current_read];
59
60 // (release semantics for writer)
61 m_read_index.store(increment(current_read), std::memory_order_release);
62
63 return item;
64 }
std::array< T, Capacity > m_buffer
static constexpr size_t increment(size_t index) noexcept
std::atomic< size_t > m_read_index
std::atomic< size_t > m_write_index

References MayaFlux::Journal::RingBuffer< T, Capacity >::increment(), MayaFlux::Journal::RingBuffer< T, Capacity >::m_buffer, MayaFlux::Journal::RingBuffer< T, Capacity >::m_read_index, and MayaFlux::Journal::RingBuffer< T, Capacity >::m_write_index.

+ Here is the call graph for this function: