vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
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
28template <typename T>
29class cQueue {
30public:
32 ~cQueue(void) {};
33
40 bool Push(T *element) {
41 std::lock_guard<std::mutex> lock(m_mutex);
42
43 if (m_deque.size() >= m_maxSize) {
44 return false;
45 }
46
47 m_deque.push_front(element);
48
49 return true;
50 }
51
57 T *Pop(void) {
58 std::lock_guard<std::mutex> lock(m_mutex);
59
60 if (m_deque.empty()) {
61 return nullptr;
62 }
63
64 T *element = m_deque.back();
65 m_deque.pop_back();
66
67 return element;
68 }
69
75 T *Peek(void) {
76 std::lock_guard<std::mutex> lock(m_mutex);
77
78 if (m_deque.empty()) {
79 return nullptr;
80 }
81
82 return m_deque.back();
83 }
84
88 void Clear(void) {
89 std::lock_guard<std::mutex> lock(m_mutex);
90
91 m_deque.clear();
92 }
93
99 bool IsEmpty(void) {
100 std::lock_guard<std::mutex> lock(m_mutex);
101
102 return m_deque.empty();
103 }
104
110 bool IsFull(void) {
111 std::lock_guard<std::mutex> lock(m_mutex);
112
113 return m_deque.size() >= m_maxSize;
114 }
115
121 size_t Size(void) {
122 std::lock_guard<std::mutex> lock(m_mutex);
123
124 return m_deque.size();
125 }
126
127private:
128 std::deque<T*> m_deque;
129 std::mutex m_mutex;
130 size_t m_maxSize;
131};
132
133#endif
Thread-safe Queue.
Definition queue.h:29
void Clear(void)
Remove all elements from the queue.
Definition queue.h:88
T * Pop(void)
Pop an element from the back of the queue.
Definition queue.h:57
bool IsEmpty(void)
Check if the queue is empty.
Definition queue.h:99
cQueue(size_t maxSize)
Definition queue.h:31
bool IsFull(void)
Check if the queue is full.
Definition queue.h:110
~cQueue(void)
Definition queue.h:32
std::deque< T * > m_deque
Underlying deque container.
Definition queue.h:128
bool Push(T *element)
Push an element to the front of the queue.
Definition queue.h:40
size_t m_maxSize
Maximum queue capacity.
Definition queue.h:130
size_t Size(void)
Get the current size of the queue.
Definition queue.h:121
T * Peek(void)
Get a reference to the back element.
Definition queue.h:75
std::mutex m_mutex
Mutex for thread-safe access.
Definition queue.h:129