MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / MPMCQueue

Class MPMCQueue

3rd/MPMCQueue/include/MPMCQueue.hpp:28–191  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

26 */
27template <typename T, size_t Capacity>
28class MPMCQueue {
29 static_assert((Capacity & (Capacity - 1)) == 0,
30 "Capacity must be a power of 2");
31 static_assert(Capacity > 0, "Capacity must be greater than 0");
32
33 public:
34 using value_type = T;
35 using size_type = size_t;
36 using reference = T&;
37 using const_reference = const T&;
38
39 /**
40 * @brief Construct a new MPMCQueue object
41 */
42 constexpr MPMCQueue() noexcept : head_(0), tail_(0) {
43 for (size_t i = 0; i < Capacity; ++i) {
44 buffer_[i].sequence.store(i, std::memory_order_relaxed);
45 }
46 }
47
48 /**
49 * @brief Destroy the MPMCQueue object
50 */
51 ~MPMCQueue() noexcept = default;
52
53 MPMCQueue(const MPMCQueue&) = delete;
54 auto operator=(const MPMCQueue&) -> MPMCQueue& = delete;
55 MPMCQueue(MPMCQueue&&) = delete;
56 auto operator=(MPMCQueue&&) -> MPMCQueue& = delete;
57
58 /**
59 * @brief Attempt to enqueue an item
60 *
61 * @param item The item to enqueue
62 * @return true if the item was successfully enqueued
63 * @return false if the queue is full
64 */
65 [[nodiscard]] auto push(const T& item) noexcept -> bool {
66 return enqueue_impl(item);
67 }
68
69 /**
70 * @brief Attempt to enqueue an item (move version)
71 *
72 * @param item The item to enqueue
73 * @return true if the item was successfully enqueued
74 * @return false if the queue is full
75 */
76 [[nodiscard]] auto push(T&& item) noexcept -> bool {
77 return enqueue_impl(std::move(item));
78 }
79
80 /**
81 * @brief Attempt to dequeue an item
82 *
83 * @param item Reference to store the dequeued item
84 * @return true if an item was successfully dequeued
85 * @return false if the queue is empty

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected