1#ifndef IV_SRC_CONTAINERS_CIRCULARQUEUE_HPP_
2#define IV_SRC_CONTAINERS_CIRCULARQUEUE_HPP_
5#include <condition_variable>
13template<
typename T, u
int64_t Size>
29 std::unique_lock<std::mutex> lock(
m_mutex);
42 std::unique_lock<std::mutex> lock(
m_mutex);
52 bool popWithFilter(T &item,
const std::function<
bool(
const T &)> &filter)
54 std::unique_lock<std::mutex> lock(
m_mutex);
78 std::unique_lock<std::mutex> lock(
m_mutex);
88 virtual bool push(
const T &item)
90 std::unique_lock<std::mutex> lock(
m_mutex);
107 std::unique_lock<std::mutex> lock(
m_mutex);
111 if constexpr (std::is_pointer_v<T>)
123 std::unique_lock<std::mutex> lock(
m_mutex);
129 std::unique_lock<std::mutex> lock(
m_mutex);
140 std::unique_lock<std::mutex> lock(
m_mutex);
161 static_assert(std::is_default_constructible_v<T>,
"T must be default constructible");
162 static_assert(Size >= 50,
"Size is too small!");
163 static_assert(Size <= 5000,
"Size is too long!");
173template<
typename T, u
int64_t Size>
185 bool push(
const T &item)
override
Definition CircularQueue.hpp:15
uint64_t m_occupied
Definition CircularQueue.hpp:168
void get(T &item)
Definition CircularQueue.hpp:76
virtual bool push(const T &item)
Definition CircularQueue.hpp:88
void unblockingPop()
Definition CircularQueue.hpp:155
uint64_t occupied()
Definition CircularQueue.hpp:138
std::condition_variable_any m_cond
Definition CircularQueue.hpp:170
std::array< T, Size > m_data
Definition CircularQueue.hpp:165
uint64_t m_rear
Definition CircularQueue.hpp:167
std::mutex m_mutex
Definition CircularQueue.hpp:169
void clear()
Definition CircularQueue.hpp:105
virtual ~CircularQueue()
Definition CircularQueue.hpp:20
void pop()
Definition CircularQueue.hpp:40
bool empty()
Definition CircularQueue.hpp:121
uint64_t size()
Definition CircularQueue.hpp:133
bool popWithFilter(T &item, const std::function< bool(const T &)> &filter)
Definition CircularQueue.hpp:52
CircularQueue & operator=(const CircularQueue &other)=delete
bool unblockingFull() const
Definition CircularQueue.hpp:145
bool full()
Definition CircularQueue.hpp:127
bool unblockingEmpty() const
Definition CircularQueue.hpp:150
CircularQueue(const CircularQueue &)=delete
void pop(T &item)
Definition CircularQueue.hpp:27
uint64_t m_front
Definition CircularQueue.hpp:166
Definition CircularQueue.hpp:175
OverwritingCircularQueue()=default
OverwritingCircularQueue(const OverwritingCircularQueue &)=delete
bool push(const T &item) override
Pushes an item into the queue. If the queue is full, it will pop the front item and push the new one.
Definition CircularQueue.hpp:185
Definition CircularQueue.hpp:11