diff options
Diffstat (limited to 'src/util/thread.h')
-rw-r--r-- | src/util/thread.h | 75 |
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(); } |