41 size_t write =
mWrite.load(std::memory_order_relaxed);
64 size_t read =
mRead.load(std::memory_order_relaxed);
72 mRead.store(
read + 1, std::memory_order_release);
116 size_t read_cycle =
elem.readCycle.load(std::memory_order_acquire);
126 elem.data = std::forward<U>(data);
127 elem.writeCycle.store(
cycle + 1, std::memory_order_release);
158 size_t read_cycle =
elem.readCycle.load(std::memory_order_acquire);
169 elem.readCycle.store(
cycle + 1, std::memory_order_release);
#define CHECK_MSG(expr, format_str,...)
Definition Logging.hpp:31
bool Pop(T &out)
Try to pop data from the queue.
Definition Queue.hpp:151
MPMCQueue *const queue
Definition Queue.hpp:141
Reader(MPMCQueue *queue)
Definition Queue.hpp:143
Writer(MPMCQueue *queue)
Definition Queue.hpp:102
bool Push(U &&data)
Try to push data into the queue.
Definition Queue.hpp:110
MPMCQueue *const queue
Definition Queue.hpp:100
Atomic, bounded multi-producer multi-consumer FIFO ring buffer with a fixed maximum size.
Definition Queue.hpp:83
const size_t mModulo
Definition Queue.hpp:89
const size_t mShift
Definition Queue.hpp:89
Reader CreateReader()
Create a Reader for concurrent popping.
Definition Queue.hpp:180
Atomic< size_t > mRead
Definition Queue.hpp:91
size_t mWriteCached
Definition Queue.hpp:92
MPMCQueue(size_t size, Allocator *alloc)
Definition Queue.hpp:94
Writer CreateWriter()
Create a Writer for concurrent pushing.
Definition Queue.hpp:138
Vector< Data > mBuffer
Definition Queue.hpp:90
Atomic< size_t > mWrite
Definition Queue.hpp:91
Atomic, bounded single-producer single-consumer FIFO ring buffer with a fixed maximum size.
Definition Queue.hpp:14
const size_t mModulo
Definition Queue.hpp:15
SPSCQueue(size_t size, Allocator *alloc)
Construct the SPSC Queue.
Definition Queue.hpp:28
Atomic< size_t > mWrite
Definition Queue.hpp:17
size_t mReadCached
Definition Queue.hpp:19
Vector< T > mBuffer
Definition Queue.hpp:16
bool Pop(T &out)
Try to pop data from the queue.
Definition Queue.hpp:62
size_t mWriteCached
Definition Queue.hpp:21
bool Push(U &&data)
Try to push data into the queue.
Definition Queue.hpp:39
Atomic< size_t > mRead
Definition Queue.hpp:17
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Lock-free atomic primitives and implementations of data structures.
Definition Atomic.hpp:22
Allocators, Data Structures and introspection implementations.
Definition Allocator.hpp:5
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
Definition Filesystem.hpp:36
Atomic< size_t > writeCycle
Definition Queue.hpp:87
Atomic< size_t > readCycle
Definition Queue.hpp:87
T data
Definition Queue.hpp:86