|
Logger System 0.1.3
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 35 of file lockfree_queue.h.
|
inline |
Constructor.
Definition at line 43 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::cells_.
|
inline |
Destructor.
Definition at line 55 of file lockfree_queue.h.
References kcenon::logger::async::lockfree_spsc_queue< T, Size >::dequeue().

|
inlineconstexpr |
Get queue capacity.
Definition at line 137 of file lockfree_queue.h.
|
inline |
Dequeue an item (consumer side)
| item | Reference to store the dequeued item |
Definition at line 85 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 107 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 67 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 76 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 166 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 117 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 127 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 147 of file lockfree_queue.h.
|
private |
Definition at line 187 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 185 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 142 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 186 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().