2 #ifndef _YI_CONCURRENT_DEQUE_H_ 3 #define _YI_CONCURRENT_DEQUE_H_ 21 template<
typename YI_DATA>
34 m_deque = other.m_deque;
41 m_deque = rhs.m_deque;
52 m_deque.push_front(rData);
64 m_deque.push_back(rData);
75 while (!m_deque.empty())
77 m_EmptyCondition.
Wait(m_mutex);
87 return m_deque.empty();
96 bool bSuccessfulLock =
false;
102 rValue = m_deque.front();
105 bSuccessfulLock =
true;
116 return bSuccessfulLock;
124 bool bSuccessfulLock =
false;
130 rValue = m_deque.back();
133 bSuccessfulLock =
true;
144 return bSuccessfulLock;
158 while(m_deque.empty() && !m_bStopWaiting)
160 m_AvailableCondition.
Wait(m_mutex);
163 m_bStopWaiting =
false;
165 if (!m_deque.empty())
167 rValue = m_deque.front();
193 if (!m_bStopWaiting && m_deque.empty())
195 m_AvailableCondition.
Wait(m_mutex, uTimeoutMs);
198 m_bStopWaiting =
false;
200 if (!m_deque.empty())
202 rValue = m_deque.front();
225 while(m_deque.empty() && !m_bStopWaiting)
227 m_AvailableCondition.
Wait(m_mutex);
230 m_bStopWaiting =
false;
232 if (!m_deque.empty())
234 rValue = m_deque.back();
258 m_bStopWaiting =
true;
259 m_AvailableCondition.
WakeOne();
268 return (uint32_t)m_deque.size();
272 std::deque<YI_DATA> m_deque;
283 #endif // _YI_CONCURRENT_DEQUE_H_
void PushBack(const YI_DATA &rData)
Definition: YiConcurrentDeque.h:60
bool TryPopBack(YI_DATA &rValue)
Definition: YiConcurrentDeque.h:122
Definition: YiMutex.h:110
bool WaitAndPopFront(YI_DATA &rValue, uint64_t uTimeoutMs)
Definition: YiConcurrentDeque.h:187
CYIConcurrentDeque(const CYIConcurrentDeque< YI_DATA > &other)
Definition: YiConcurrentDeque.h:30
CYIConcurrentDeque()
Definition: YiConcurrentDeque.h:25
void StopWaiting()
Definition: YiConcurrentDeque.h:254
bool WaitAndPopFront(YI_DATA &rValue)
Definition: YiConcurrentDeque.h:152
void PushFront(const YI_DATA &rData)
Definition: YiConcurrentDeque.h:48
void WaitEmpty()
Definition: YiConcurrentDeque.h:72
bool Empty() const
Definition: YiConcurrentDeque.h:84
bool TryPopFront(YI_DATA &rValue)
Definition: YiConcurrentDeque.h:94
CYIConcurrentDeque & operator=(const CYIConcurrentDeque< YI_DATA > &rhs)
Definition: YiConcurrentDeque.h:37
A simple, thread safe deque.
Definition: YiConcurrentDeque.h:22
bool Wait(CYIMutex &rMutex)
uint32_t GetSize() const
Definition: YiConcurrentDeque.h:265
A class used to block a thread until a condition is met, as signaled by a different thread...
Definition: YiWaitCondition.h:64
bool WaitAndPopBack(YI_DATA &rValue)
Definition: YiConcurrentDeque.h:219
Definition: YiAutoMutex.h:23