aboutsummaryrefslogtreecommitdiff
path: root/src/util/thread.h
diff options
context:
space:
mode:
authorElias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com>2020-11-04 16:57:47 +0100
committerGitHub <noreply@github.com>2020-11-04 16:57:47 +0100
commit3e16c3a78fff61c20e63ba730d15e94e3bb877b4 (patch)
treec070350db219f2c4241d22bc31949685c7b42fe9 /src/util/thread.h
parent5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (diff)
parent6ccb5835ff55d85156be91473c598eca9d6cb9a6 (diff)
downloaddragonfireclient-3e16c3a78fff61c20e63ba730d15e94e3bb877b4.tar.xz
Merge branch 'master' into master
Diffstat (limited to 'src/util/thread.h')
-rw-r--r--src/util/thread.h75
1 files changed, 39 insertions, 36 deletions
diff --git a/src/util/thread.h b/src/util/thread.h
index 4633de310..73e9beb80 100644
--- a/src/util/thread.h
+++ b/src/util/thread.h
@@ -26,10 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "container.h"
-template <typename T> class MutexedVariable
+template<typename T>
+class MutexedVariable
{
public:
- MutexedVariable(const T &value) : m_value(value) {}
+ MutexedVariable(const T &value):
+ m_value(value)
+ {}
T get()
{
@@ -45,7 +48,6 @@ public:
// You pretty surely want to grab the lock when accessing this
T m_value;
-
private:
std::mutex m_mutex;
};
@@ -53,37 +55,38 @@ private:
/*
A single worker thread - multiple client threads queue framework.
*/
-template <typename Key, typename T, typename Caller, typename CallerData> class GetResult
-{
+template<typename Key, typename T, typename Caller, typename CallerData>
+class GetResult {
public:
Key key;
T item;
std::pair<Caller, CallerData> caller;
};
-template <typename Key, typename T, typename Caller, typename CallerData>
-class ResultQueue : public MutexedQueue<GetResult<Key, T, Caller, CallerData>>
-{
+template<typename Key, typename T, typename Caller, typename CallerData>
+class ResultQueue : public MutexedQueue<GetResult<Key, T, Caller, CallerData> > {
};
-template <typename Caller, typename Data, typename Key, typename T> class CallerInfo
-{
+template<typename Caller, typename Data, typename Key, typename T>
+class CallerInfo {
public:
Caller caller;
Data data;
ResultQueue<Key, T, Caller, Data> *dest;
};
-template <typename Key, typename T, typename Caller, typename CallerData> class GetRequest
-{
+template<typename Key, typename T, typename Caller, typename CallerData>
+class GetRequest {
public:
GetRequest() = default;
~GetRequest() = default;
- GetRequest(const Key &a_key) : key(a_key) {}
+ GetRequest(const Key &a_key): key(a_key)
+ {
+ }
Key key;
- std::list<CallerInfo<Caller, CallerData, Key, T>> callers;
+ std::list<CallerInfo<Caller, CallerData, Key, T> > callers;
};
/**
@@ -93,33 +96,32 @@ public:
* @param Caller unique id of calling thread
* @param CallerData data passed back to caller
*/
-template <typename Key, typename T, typename Caller, typename CallerData>
-class RequestQueue
-{
+template<typename Key, typename T, typename Caller, typename CallerData>
+class RequestQueue {
public:
- bool empty() { return m_queue.empty(); }
+ bool empty()
+ {
+ return m_queue.empty();
+ }
void add(const Key &key, Caller caller, CallerData callerdata,
- ResultQueue<Key, T, Caller, CallerData> *dest)
+ ResultQueue<Key, T, Caller, CallerData> *dest)
{
- typename std::deque<GetRequest<Key, T, Caller, CallerData>>::iterator i;
- typename std::list<CallerInfo<Caller, CallerData, Key, T>>::iterator j;
+ typename std::deque<GetRequest<Key, T, Caller, CallerData> >::iterator i;
+ typename std::list<CallerInfo<Caller, CallerData, Key, T> >::iterator j;
{
MutexAutoLock lock(m_queue.getMutex());
/*
- If the caller is already on the list, only update
- CallerData
+ If the caller is already on the list, only update CallerData
*/
- for (i = m_queue.getQueue().begin();
- i != m_queue.getQueue().end(); ++i) {
+ for (i = m_queue.getQueue().begin(); i != m_queue.getQueue().end(); ++i) {
GetRequest<Key, T, Caller, CallerData> &request = *i;
if (request.key != key)
continue;
- for (j = request.callers.begin();
- j != request.callers.end(); ++j) {
+ for (j = request.callers.begin(); j != request.callers.end(); ++j) {
CallerInfo<Caller, CallerData, Key, T> &ca = *j;
if (ca.caller == caller) {
ca.data = callerdata;
@@ -156,16 +158,19 @@ public:
return m_queue.pop_front(timeout_ms);
}
- GetRequest<Key, T, Caller, CallerData> pop() { return m_queue.pop_frontNoEx(); }
+ GetRequest<Key, T, Caller, CallerData> pop()
+ {
+ return m_queue.pop_frontNoEx();
+ }
void pushResult(GetRequest<Key, T, Caller, CallerData> req, T res)
{
- for (typename std::list<CallerInfo<Caller, CallerData, Key, T>>::iterator
- i = req.callers.begin();
+ for (typename std::list<CallerInfo<Caller, CallerData, Key, T> >::iterator
+ i = req.callers.begin();
i != req.callers.end(); ++i) {
CallerInfo<Caller, CallerData, Key, T> &ca = *i;
- GetResult<Key, T, Caller, CallerData> result;
+ GetResult<Key,T,Caller,CallerData> result;
result.key = req.key;
result.item = res;
@@ -177,7 +182,7 @@ public:
}
private:
- MutexedQueue<GetRequest<Key, T, Caller, CallerData>> m_queue;
+ MutexedQueue<GetRequest<Key, T, Caller, CallerData> > m_queue;
};
class UpdateThread : public Thread
@@ -203,11 +208,9 @@ public:
while (!stopRequested()) {
m_update_sem.wait();
// Set semaphore to 0
- while (m_update_sem.wait(0))
- ;
+ while (m_update_sem.wait(0));
- if (stopRequested())
- break;
+ if (stopRequested()) break;
doUpdate();
}