MostlyHarmless 0.0.1
 
Loading...
Searching...
No Matches
marvin_FIFO.h
Go to the documentation of this file.
1// ========================================================================================================
2// _______ _______ ______ ___ ___ _______ _______
3// | | | _ | __ \ | |_ _| | |
4// | | | < | |_| |_| |
5// |__|_|__|___|___|___|__|\_____/|_______|__|____|
6//
7// This file is part of the Marvin open source library and is licensed under the terms of the MIT License.
8//
9// ========================================================================================================
10
11#ifndef MARVIN_FIFO_H
12#define MARVIN_FIFO_H
13#include <readerwriterqueue.h>
14#include <optional>
15#include <type_traits>
38 template <typename T>
39 requires std::is_copy_constructible_v<T> &&
40 std::is_move_constructible_v<T> &&
41 std::is_default_constructible_v<T>
42 class SPSC final {
43 public:
47 explicit SPSC(size_t maxSize) : m_queue(maxSize) {
48 }
49
54 [[nodiscard]] std::optional<T> tryPop() noexcept {
55 T temp{};
56 const auto res = m_queue.try_dequeue(temp);
57 if (!res) return {};
58 return temp;
59 }
60
66 void tryPush(T&& x) noexcept {
67 [[maybe_unused]] const auto res = m_queue.try_enqueue(std::move(x));
68 }
69
73 void emptyQueue() noexcept {
74 auto res{ false };
75 do {
76 [[maybe_unused]] T curr;
77 res = m_queue.try_dequeue(curr);
78 } while (res);
79 }
80
81 private:
82 moodycamel::ReaderWriterQueue<T> m_queue;
83 };
84} // namespace marvin::containers::fifos
85#endif
void tryPush(T &&x) noexcept
Definition marvin_FIFO.h:66
SPSC(size_t maxSize)
Definition marvin_FIFO.h:47
void emptyQueue() noexcept
Definition marvin_FIFO.h:73
std::optional< T > tryPop() noexcept
Definition marvin_FIFO.h:54
First in, first out queues.
Definition marvin_FIFO.h:16