Valor 6800 1.0
Loading...
Searching...
No Matches
LockedAccess.h
1
2#pragma once
3#include <mutex>
4#include <memory>
5#include <utility>
6
7namespace valor {
8namespace util {
9template <typename T>
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
30template <typename T>
31class 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
Definition LockedAccess.h:10
Definition LockedAccess.h:31