Valor 6800
1.0
Loading...
Searching...
No Matches
LockedAccess.h
1
2
#pragma once
3
#include <mutex>
4
#include <memory>
5
#include <utility>
6
7
namespace
valor {
8
namespace
util {
9
template
<
typename
T>
10
class
LockedAccess
{
11
public
:
12
LockedAccess
(T&
object
, std::mutex& mutex) :
object
{
object
}, lock{mutex} {}
13
auto
operator->() {
14
if
constexpr
(
requires
(T t) { t.operator->(); })
15
return
object
.operator->();
16
else
17
return
&object;
18
}
19
LockedAccess
& operator=(T&& other) {
20
object
= std::move(other);
21
return
*
this
;
22
}
23
T& value() {
return
object; }
24
25
private
:
26
T& object;
27
std::unique_lock<std::mutex> lock;
28
};
29
30
template
<
typename
T>
31
class
Locked
{
32
public
:
33
template
<
typename
... Args>
34
explicit
Locked
(Args&&... args) :
object
{std::forward<Args>(args)...} {}
35
LockedAccess<T>
lock() {
return
{object, mutex}; }
36
LockedAccess<T>
operator->() {
return
lock(); }
37
38
private
:
39
T object;
40
std::mutex mutex;
41
};
42
}
// namespace util
43
}
// namespace valor
valor::util::LockedAccess
Definition
LockedAccess.h:10
valor::util::Locked
Definition
LockedAccess.h:31
src
main
include
valkyrie
util
LockedAccess.h
Generated by
1.10.0