bool empty()
{
JMutexAutoLock lock(m_mutex);
- return (m_size.GetValue() == 0);
+ return (m_queue.size() == 0);
}
void push_back(T t)
{
JMutexAutoLock lock(m_mutex);
- m_list.push_back(t);
+ m_queue.push_back(t);
m_size.Post();
}
*/
T pop_frontNoEx(u32 wait_time_max_ms)
{
- if (m_size.Wait(wait_time_max_ms))
- {
+ if (m_size.Wait(wait_time_max_ms)) {
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator begin = m_list.begin();
- T t = *begin;
- m_list.erase(begin);
+ T t = m_queue.front();
+ m_queue.pop_front();
return t;
}
- else
- {
+ else {
return T();
}
}
T pop_front(u32 wait_time_max_ms)
{
- if (m_size.Wait(wait_time_max_ms))
- {
+ if (m_size.Wait(wait_time_max_ms)) {
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator begin = m_list.begin();
- T t = *begin;
- m_list.erase(begin);
+ T t = m_queue.front();
+ m_queue.pop_front();
return t;
}
- else
- {
+ else {
throw ItemNotFoundException("MutexedQueue: queue is empty");
}
}
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator begin = m_list.begin();
- T t = *begin;
- m_list.erase(begin);
+ T t = m_queue.front();
+ m_queue.pop_front();
return t;
}
T pop_back(u32 wait_time_max_ms=0)
{
- if (m_size.Wait(wait_time_max_ms))
- {
+ if (m_size.Wait(wait_time_max_ms)) {
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator last = m_list.end();
- last--;
- T t = *last;
- m_list.erase(last);
+ T t = m_queue.back();
+ m_queue.pop_back();
return t;
}
- else
- {
+ else {
throw ItemNotFoundException("MutexedQueue: queue is empty");
}
}
*/
T pop_backNoEx(u32 wait_time_max_ms=0)
{
- if (m_size.Wait(wait_time_max_ms))
- {
+ if (m_size.Wait(wait_time_max_ms)) {
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator last = m_list.end();
- last--;
- T t = *last;
- m_list.erase(last);
+ T t = m_queue.back();
+ m_queue.pop_back();
return t;
}
- else
- {
+ else {
return T();
}
}
JMutexAutoLock lock(m_mutex);
- typename std::list<T>::iterator last = m_list.end();
- last--;
- T t = *last;
- m_list.erase(last);
+ T t = m_queue.back();
+ m_queue.pop_back();
return t;
}
return m_mutex;
}
- // NEVER EVER modify the >>list<< you got by using this function!
- // You may only modify it's content
- std::list<T> & getList()
+ std::deque<T> & getQueue()
{
- return m_list;
+ return m_queue;
}
+ std::deque<T> m_queue;
JMutex m_mutex;
- std::list<T> m_list;
JSemaphore m_size;
};
/*
If the caller is already on the list, only update CallerData
*/
- for(typename std::list< GetRequest<Key, T, Caller, CallerData> >::iterator
- i = m_queue.getList().begin();
- i != m_queue.getList().end(); ++i)
+ for(typename std::deque< GetRequest<Key, T, Caller, CallerData> >::iterator
+ i = m_queue.getQueue().begin();
+ i != m_queue.getQueue().end(); ++i)
{
GetRequest<Key, T, Caller, CallerData> &request = *i;