23 #include <QWaitCondition>
24 #include <QMutexLocker>
89 std::deque<T> m_queue;
92 mutable QMutex m_mutex;
93 QWaitCondition m_notEmptyCondition;
94 QWaitCondition m_notFullCondition;
102 , m_mutex(QMutex::NonRecursive)
103 , m_notEmptyCondition()
104 , m_notFullCondition()
117 if (m_queue.size() == m_maxSize) {
119 case OverflowModeDiscardOldest:
121 m_queue.push_back(item);
123 case OverflowModeDiscardNewest:
126 case OverflowModeWait:
127 m_notFullCondition.wait(&m_mutex);
128 m_queue.push_back(item);
132 m_queue.push_back(item);
133 if (m_queue.size() == 1) {
134 m_notEmptyCondition.wakeOne();
145 if (m_queue.size() == 0) {
146 m_notEmptyCondition.wait(&m_mutex);
148 retVal = m_queue.front();
150 if (m_mode == OverflowModeWait && m_queue.size() == m_maxSize - 1) {
151 m_notFullCondition.wakeOne();
160 QMutexLocker locker(&m_mutex);
161 return m_queue.size();
164 #endif // DATAQUEUE_H