Joedb 10.5.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Thread_Safe.h
Go to the documentation of this file.
1#ifndef joedb_Thread_Safe_declared
2#define joedb_Thread_Safe_declared
3
4#include <mutex>
5#include <utility>
6
7namespace joedb
8{
9 template<typename T> class Lock;
10
11 template<typename T> class Thread_Safe
12 {
13 friend class Lock<T>;
14
15 private:
16 std::mutex mutex;
17 T t;
18
19 public:
20 template<class... Arguments> Thread_Safe(Arguments &&... a):
21 t(std::forward<Arguments>(a)...)
22 {
23 }
24 };
25
26 template<typename T> class Lock
27 {
28 private:
29 std::unique_lock<std::mutex> lock;
30 T &t;
31
32 public:
33 Lock(Thread_Safe<T> &t): lock(t.mutex), t(t.t)
34 {
35 }
36
37 operator std::unique_lock<std::mutex> &() {return lock;}
38
39 auto *operator->() const {return &t;}
40 auto *operator->() {return &t;}
41 auto &operator*() const {return t;}
42 auto &operator*() {return t;}
43 };
44}
45
46#endif
Class for conveniently parsing command-line arguments.
Definition Arguments.h:16
auto & operator*() const
Definition Thread_Safe.h:41
Lock(Thread_Safe< T > &t)
Definition Thread_Safe.h:33
auto & operator*()
Definition Thread_Safe.h:42
auto * operator->() const
Definition Thread_Safe.h:39
auto * operator->()
Definition Thread_Safe.h:40
Thread_Safe(Arguments &&... a)
Definition Thread_Safe.h:20
Definition ids.h:50