knowL: Knowledge Libraries
Loading...
Searching...
No Matches
Locked.h
1#pragma once
2
3#include <QMutex>
4#include "Logging.h"
5
6namespace knowCore
7{
8 template<typename _T_>
9 class Locked;
10 template<typename _T_>
12 {
13 friend class Locked<_T_>;
14 Unlocked(_T_* _d, QMutex* _m) : d(_d), m(_m)
15 {
16 m->lock();
17 locked = true;
18 }
19 public:
20 ~Unlocked()
21 {
22 m->unlock();
23 }
24 _T_* operator->()
25 {
26 KNOWCORE_ASSERT(locked);
27 return d;
28 }
29 _T_& operator*()
30 {
31 KNOWCORE_ASSERT(locked);
32 return *d;
33 }
34 void unlock()
35 {
36 m->unlock();
37 locked = false;
38 }
39 void relock()
40 {
41 m->lock();
42 locked = true;
43 }
44 public:
45 _T_* d;
46 QMutex* m;
47 bool locked = false;
48 };
53 template<typename _T_>
54 class Locked
55 {
56 public:
57 Locked(const _T_& _d = _T_()) : d(_d) {}
58 Unlocked<_T_> unlocked()
59 {
60 return Unlocked<_T_>(&d, &m);
61 }
62 private:
63 _T_ d;
64 QMutex m;
65 };
66}
Definition Locked.h:55
Definition Locked.h:12