aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-03-05 20:54:36 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-03-17 17:12:20 +0100
commit2f0107f4a7e82019a68ae3c0572886622d9d49bf (patch)
tree58e9aa428df19e23dc2db3d8577107e193dba3c6 /src
parent94b3950958c643c39c60b382c85f833593a718d0 (diff)
downloadminetest-2f0107f4a7e82019a68ae3c0572886622d9d49bf.tar.gz
minetest-2f0107f4a7e82019a68ae3c0572886622d9d49bf.tar.bz2
minetest-2f0107f4a7e82019a68ae3c0572886622d9d49bf.zip
MutexedQueue inherits must use std::deque instead of std::list
Diffstat (limited to 'src')
-rw-r--r--src/util/container.h69
-rw-r--r--src/util/thread.h6
2 files changed, 28 insertions, 47 deletions
diff --git a/src/util/container.h b/src/util/container.h
index 7945df54b..936c46d61 100644
--- a/src/util/container.h
+++ b/src/util/container.h
@@ -200,12 +200,12 @@ public:
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 @@ public:
*/
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 @@ public:
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 @@ public:
*/
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 @@ public:
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 @@ protected:
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;
};
diff --git a/src/util/thread.h b/src/util/thread.h
index 8b3c33621..eda9c0ca2 100644
--- a/src/util/thread.h
+++ b/src/util/thread.h
@@ -130,9 +130,9 @@ public:
/*
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;