vdr-plugin-softhddevice-drm-gles 1.5.9-20e15de
queue.h
Go to the documentation of this file.
1
18#ifndef __SOFTHDQUEUE_H
19#define __SOFTHDQUEUE_H
20
21#include <cstdint>
22#include <deque>
23#include <mutex>
24
34template <typename T>
35class cQueue
36{
37public:
38 cQueue(size_t maxSize) : m_maxSize(maxSize) {};
39 ~cQueue(void) {};
40
47 bool Push(T *element) {
48 std::lock_guard<std::mutex> lock(m_mutex);
49
50 if (m_deque.size() >= m_maxSize) {
51 return false;
52 }
53
54 m_deque.push_front(element);
55
56 return true;
57 }
58
64 T *Pop(void) {
65 std::lock_guard<std::mutex> lock(m_mutex);
66
67 if (m_deque.empty()) {
68 return nullptr;
69 }
70
71 T *element = m_deque.back();
72 m_deque.pop_back();
73
74 return element;
75 }
76
82 T *Peek(void) {
83 std::lock_guard<std::mutex> lock(m_mutex);
84
85 if (m_deque.empty()) {
86 return nullptr;
87 }
88
89 return m_deque.back();
90 }
91
95 void Clear(void) {
96 std::lock_guard<std::mutex> lock(m_mutex);
97
98 m_deque.clear();
99 }
100
106 bool IsEmpty(void) {
107 std::lock_guard<std::mutex> lock(m_mutex);
108
109 return m_deque.empty();
110 }
111
117 bool IsFull(void) {
118 std::lock_guard<std::mutex> lock(m_mutex);
119
120 return m_deque.size() >= m_maxSize;
121 }
122
128 size_t Size(void) {
129 std::lock_guard<std::mutex> lock(m_mutex);
130
131 return m_deque.size();
132 }
133
134private:
135 std::deque<T*> m_deque;
136 std::mutex m_mutex;
137 size_t m_maxSize;
138};
139
140#endif
Thread-safe queue class.
Definition queue.h:36
void Clear(void)
Remove all elements from the queue.
Definition queue.h:95
T * Pop(void)
Pop an element from the back of the queue.
Definition queue.h:64
bool IsEmpty(void)
Check if the queue is empty.
Definition queue.h:106
cQueue(size_t maxSize)
Definition queue.h:38
bool IsFull(void)
Check if the queue is full.
Definition queue.h:117
~cQueue(void)
Definition queue.h:39
std::deque< T * > m_deque
Underlying deque container.
Definition queue.h:135
bool Push(T *element)
Push an element to the front of the queue.
Definition queue.h:47
size_t m_maxSize
Maximum queue capacity.
Definition queue.h:137
size_t Size(void)
Get the current size of the queue.
Definition queue.h:128
T * Peek(void)
Get a reference to the back element.
Definition queue.h:82
std::mutex m_mutex
Mutex for thread-safe access.
Definition queue.h:136