marvin 0.0.1
Pure C++ audio helper library
 
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 <concurrentqueue.h>
15#include <optional>
16#include <type_traits>
21 enum class Type {
30 };
31
54 template<Type QueueType, typename T>
55 requires std::is_copy_constructible_v<T> &&
56 std::is_move_constructible_v<T> &&
57 std::is_default_constructible_v<T>
58 class FIFO final {
59 public:
63 explicit FIFO(size_t maxSize) : m_queue(maxSize) {
64
65 }
66
71 [[nodiscard]] std::optional<T> tryPop() noexcept {
72 T temp{};
73 const auto res = m_queue.try_dequeue(temp);
74 if (!res) return {};
75 return temp;
76 }
77
83 void tryPush(T&& x) noexcept {
84 [[maybe_unused]] const auto res = m_queue.try_enqueue(std::move(x));
85 }
86
90 void emptyQueue() noexcept {
91 auto res{ false };
92 do {
93 [[maybe_unused]] T curr;
94 res = m_queue.try_dequeue(curr);
95 } while (res);
96 }
97
98 private:
99 using queue_t = std::conditional_t<QueueType == Type::SPSC, moodycamel::ReaderWriterQueue<T>, moodycamel::ConcurrentQueue<T>>;
100 queue_t m_queue;
101 };
102
103 template<typename T>
105
106 template<typename T>
108} // namespace marvin::containers::fifos
109#endif
A thread-safe, realtime-safe fifo.
Definition marvin_FIFO.h:58
void emptyQueue() noexcept
Definition marvin_FIFO.h:90
void tryPush(T &&x) noexcept
Definition marvin_FIFO.h:83
std::optional< T > tryPop() noexcept
Definition marvin_FIFO.h:71
FIFO(size_t maxSize)
Definition marvin_FIFO.h:63
First in, first out queues.
Definition marvin_FIFO.h:17
Type
Represents a FIFO's configuration.
Definition marvin_FIFO.h:21
FIFO< Type::MPMC, T > MPMC
Definition marvin_FIFO.h:107
FIFO< Type::SPSC, T > SPSC
Definition marvin_FIFO.h:104