|
Logger System 1.0.0
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Lock-free single-producer single-consumer queue. More...
#include <lockfree_queue.h>

Classes | |
| struct | cell |
| Cell structure with sequence number for ABA prevention. More... | |
Public Member Functions | |
| lockfree_spsc_queue () | |
| Constructor. | |
| ~lockfree_spsc_queue () | |
| Destructor. | |
| bool | enqueue (const T &item) |
| Enqueue an item (producer side) | |
| bool | enqueue (T &&item) |
| Enqueue an item using move semantics (producer side) | |
| bool | dequeue (T &item) |
| Dequeue an item (consumer side) | |
| bool | empty () const |
| Check if queue is empty. | |
| bool | full () const |
| Check if queue is full. | |
| size_t | size () const |
| Get approximate queue size. | |
| constexpr size_t | capacity () const |
| Get queue capacity. | |
Private Member Functions | |
| template<typename U > | |
| bool | enqueue_impl (U &&item) |
| Implementation for enqueue operations. | |
Private Attributes | |
| std::atomic< size_t > | head_ |
| std::atomic< size_t > | tail_ |
| std::array< cell, Size > | cells_ |
Static Private Attributes | |
| static constexpr size_t | mask_ = Size - 1 |
| static constexpr size_t | cache_line_size = 64 |
| Cache line size for padding. | |
Lock-free single-producer single-consumer queue.
| T | Type of elements to store |
| Size | Queue capacity (must be power of 2) |
Definition at line 41 of file lockfree_queue.h.
|
inline |
Constructor.
Definition at line 49 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::cells_.
|
inline |
Destructor.
Definition at line 61 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::dequeue().

|
inlineconstexpr |
Get queue capacity.
Definition at line 143 of file lockfree_queue.h.
|
inline |
Dequeue an item (consumer side)
| item | Reference to store the dequeued item |
Definition at line 91 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::cells_, kcenon::logger::async::lockfree_spsc_queue< T, Size >::cell::data, kcenon::logger::async::lockfree_spsc_queue< T, Size >::mask_, kcenon::logger::async::lockfree_spsc_queue< T, Size >::cell::sequence, and kcenon::logger::async::lockfree_spsc_queue< T, Size >::tail_.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::~lockfree_spsc_queue().

|
inline |
Check if queue is empty.
Definition at line 113 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::head_, and kcenon::logger::async::lockfree_spsc_queue< T, Size >::tail_.
|
inline |
Enqueue an item (producer side)
| item | Item to enqueue |
Definition at line 73 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::enqueue_impl().

|
inline |
Enqueue an item using move semantics (producer side)
| item | Item to enqueue |
Definition at line 82 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::enqueue_impl().

|
inlineprivate |
Implementation for enqueue operations.
| U | Universal reference type |
| item | Item to enqueue |
Definition at line 172 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::cell::data, and kcenon::logger::async::lockfree_spsc_queue< T, Size >::cell::sequence.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::enqueue(), and kcenon::logger::async::lockfree_spsc_queue< T, Size >::enqueue().

|
inline |
Check if queue is full.
Definition at line 123 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::head_, kcenon::logger::async::lockfree_spsc_queue< T, Size >::mask_, and kcenon::logger::async::lockfree_spsc_queue< T, Size >::tail_.
|
inline |
Get approximate queue size.
Definition at line 133 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::head_, and kcenon::logger::async::lockfree_spsc_queue< T, Size >::tail_.
|
staticconstexprprivate |
Cache line size for padding.
Definition at line 153 of file lockfree_queue.h.
|
private |
Definition at line 193 of file lockfree_queue.h.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::dequeue(), and kcenon::logger::async::lockfree_spsc_queue< T, Size >::lockfree_spsc_queue().
|
private |
Definition at line 191 of file lockfree_queue.h.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::empty(), kcenon::logger::async::lockfree_spsc_queue< T, Size >::full(), and kcenon::logger::async::lockfree_spsc_queue< T, Size >::size().
|
staticconstexprprivate |
Definition at line 148 of file lockfree_queue.h.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::dequeue(), and kcenon::logger::async::lockfree_spsc_queue< T, Size >::full().
|
private |
Definition at line 192 of file lockfree_queue.h.
Referenced by kcenon::logger::async::lockfree_spsc_queue< T, Size >::dequeue(), kcenon::logger::async::lockfree_spsc_queue< T, Size >::empty(), kcenon::logger::async::lockfree_spsc_queue< T, Size >::full(), and kcenon::logger::async::lockfree_spsc_queue< T, Size >::size().