knowL: Knowledge Libraries
Loading...
Searching...
No Matches
knowl
src
knowCore
Locked.h
1
#pragma once
2
3
#include <QMutex>
4
#include "Logging.h"
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
()
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
}
knowCore::Locked
Definition
Locked.h:55
knowCore::Unlocked
Definition
Locked.h:12
Generated by
1.12.0