Plasma Engine
2.0
Loading...
Searching...
No Matches
LockedObject.h
1
#pragma once
2
5
template
<
typename
T,
typename
O>
6
class
plLockedObject
7
{
8
public
:
9
PL_ALWAYS_INLINE
explicit
plLockedObject
(T& ref_lock, O* pObject)
10
: m_pLock(&ref_lock)
11
, m_pObject(pObject)
12
{
13
m_pLock->Lock();
14
}
15
16
plLockedObject
() =
default
;
17
18
PL_ALWAYS_INLINE
plLockedObject
(
plLockedObject<T, O>
&& rhs) { *
this
= std::move(rhs); }
19
20
plLockedObject
(
const
plLockedObject<T, O>
& rhs) =
delete
;
21
22
void
operator=(
const
plLockedObject<T, O>
&& rhs)
23
{
24
if
(m_pLock)
25
{
26
m_pLock->Unlock();
27
}
28
29
m_pLock = rhs.m_pLock;
30
rhs.m_pLock =
nullptr
;
31
m_pObject = rhs.m_pObject;
32
rhs.m_pObject =
nullptr
;
33
}
34
35
void
operator=(
const
plLockedObject<T, O>
& rhs) =
delete
;
36
37
PL_ALWAYS_INLINE
~plLockedObject
()
38
{
39
if
(m_pLock)
40
{
41
m_pLock->Unlock();
42
}
43
}
44
46
PL_ALWAYS_INLINE
bool
isValid
()
const
{
return
m_pObject !=
nullptr
; }
47
48
O* Borrow() {
return
m_pObject; }
49
50
const
O* Borrow()
const
{
return
m_pObject; }
51
52
O* operator->() {
return
m_pObject; }
53
54
const
O* operator->()
const
{
return
m_pObject; }
55
56
O& operator*() {
return
*m_pObject; }
57
58
const
O& operator*()
const
{
return
*m_pObject; }
59
60
bool
operator==(
const
O* rhs)
const
{
return
m_pObject == rhs; }
61
62
bool
operator!=(
const
O* rhs)
const
{
return
m_pObject != rhs; }
63
64
bool
operator!()
const
{
return
m_pObject ==
nullptr
; }
65
66
operator
bool()
const
{
return
m_pObject !=
nullptr
; }
67
68
private
:
69
mutable
T* m_pLock =
nullptr
;
70
mutable
O* m_pObject =
nullptr
;
71
};
plLockedObject
Provides access to an object while managing a lock (e.g. a mutex) that ensures that during its lifeti...
Definition
LockedObject.h:7
plLockedObject::isValid
PL_ALWAYS_INLINE bool isValid() const
Whether the encapsulated object exists at all or is nullptr.
Definition
LockedObject.h:46
Code
Engine
Foundation
Threading
LockedObject.h
Generated by
1.11.0