vdr-plugin-softhddevice-drm-gles 1.6.2
queue.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
10#ifndef __SOFTHDQUEUE_H
11#define __SOFTHDQUEUE_H
12
13#include <cstdint>
14#include <deque>
15#include <mutex>
16
31template <typename T>
32class cQueue {
33public:
35 ~cQueue(void) {};
36
43 bool Push(T *element) {
44 std::lock_guard<std::mutex> lock(m_mutex);
45
46 if (m_deque.size() >= m_maxSize) {
47 return false;
48 }
49
50 m_deque.push_front(element);
51
52 return true;
53 }
54
60 T *Pop(void) {
61 std::lock_guard<std::mutex> lock(m_mutex);
62
63 if (m_deque.empty()) {
64 return nullptr;
65 }
66
67 T *element = m_deque.back();
68 m_deque.pop_back();
69
70 return element;
71 }
72
78 T *Peek(void) {
79 std::lock_guard<std::mutex> lock(m_mutex);
80
81 if (m_deque.empty()) {
82 return nullptr;
83 }
84
85 return m_deque.back();
86 }
87
91 void Clear(void) {
92 std::lock_guard<std::mutex> lock(m_mutex);
93
94 m_deque.clear();
95 }
96
102 bool IsEmpty(void) {
103 std::lock_guard<std::mutex> lock(m_mutex);
104
105 return m_deque.empty();
106 }
107
113 bool IsFull(void) {
114 std::lock_guard<std::mutex> lock(m_mutex);
115
116 return m_deque.size() >= m_maxSize;
117 }
118
124 size_t Size(void) {
125 std::lock_guard<std::mutex> lock(m_mutex);
126
127 return m_deque.size();
128 }
129
130private:
131 std::deque<T*> m_deque;
132 std::mutex m_mutex;
133 size_t m_maxSize;
134};
135
138#endif
Thread-safe Queue.
Definition queue.h:32
void Clear(void)
Remove all elements from the queue.
Definition queue.h:91
T * Pop(void)
Pop an element from the back of the queue.
Definition queue.h:60
bool IsEmpty(void)
Check if the queue is empty.
Definition queue.h:102
cQueue(size_t maxSize)
Definition queue.h:34
bool IsFull(void)
Check if the queue is full.
Definition queue.h:113
~cQueue(void)
Definition queue.h:35
std::deque< T * > m_deque
Underlying deque container.
Definition queue.h:131
bool Push(T *element)
Push an element to the front of the queue.
Definition queue.h:43
size_t m_maxSize
Maximum queue capacity.
Definition queue.h:133
size_t Size(void)
Get the current size of the queue.
Definition queue.h:124
T * Peek(void)
Get a reference to the back element.
Definition queue.h:78
std::mutex m_mutex
Mutex for thread-safe access.
Definition queue.h:132