kDB: Knowledge DataBase
Loading...
Searching...
No Matches
knowl
src
knowCore
Locked.h
1
#pragma once
2
3
#include <QMutex>
4
#include <clog_qt>
5
6
namespace
knowCore
7
{
8
template
<
typename
_T_>
9
class
Locked;
10
template
<
typename
_T_>
11
class
Unlocked
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
knowCore::Locked
Definition
Locked.h:52
knowCore::Unlocked
Definition
Locked.h:12
Generated by
1.12.0