Skip to content
Snippets Groups Projects
Commit 2f0107f4 authored by Loïc Blot's avatar Loïc Blot
Browse files

MutexedQueue inherits must use std::deque instead of std::list

parent 94b39509
No related branches found
No related tags found
No related merge requests found
......@@ -200,12 +200,12 @@ class MutexedQueue
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();
}
......@@ -214,34 +214,28 @@ class MutexedQueue
*/
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");
}
}
......@@ -252,26 +246,21 @@ class MutexedQueue
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");
}
}
......@@ -281,18 +270,14 @@ class MutexedQueue
*/
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();
}
}
......@@ -303,10 +288,8 @@ class MutexedQueue
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;
}
......@@ -316,15 +299,13 @@ class MutexedQueue
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;
};
......
......@@ -130,9 +130,9 @@ class RequestQueue
/*
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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment