kDB: Knowledge DataBase
Loading...
Searching...
No Matches
Locked.h
1#pragma once
2
3#include <QMutex>
4#include <clog_qt>
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() { m->unlock(); }
21 _T_* operator->()
22 {
23 clog_assert(locked);
24 return d;
25 }
26 _T_& operator*()
27 {
28 clog_assert(locked);
29 return *d;
30 }
31 void unlock()
32 {
33 m->unlock();
34 locked = false;
35 }
36 void relock()
37 {
38 m->lock();
39 locked = true;
40 }
41 public:
42 _T_* d;
43 QMutex* m;
44 bool locked = false;
45 };
50 template<typename _T_>
51 class Locked
52 {
53 public:
54 Locked(const _T_& _d = _T_()) : d(_d) {}
55 Unlocked<_T_> unlocked() { return Unlocked<_T_>(&d, &m); }
56 private:
57 _T_ d;
58 QMutex m;
59 };
60} // namespace knowCore
Definition Locked.h:52
Definition Locked.h:12