summaryrefslogtreecommitdiff
path: root/src/common/synchronized_wrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/synchronized_wrapper.h')
-rw-r--r--src/common/synchronized_wrapper.h23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/common/synchronized_wrapper.h b/src/common/synchronized_wrapper.h
index 07105a198..04b4f2e51 100644
--- a/src/common/synchronized_wrapper.h
+++ b/src/common/synchronized_wrapper.h
@@ -12,15 +12,14 @@ namespace Common {
12/** 12/**
13 * Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no 13 * Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no
14 * one forgets to lock a mutex before acessing an object. To access the wrapped object construct a 14 * one forgets to lock a mutex before acessing an object. To access the wrapped object construct a
15 * SyncronizedRef on this wrapper. Inspired by Rust's Mutex type (http://doc.rust-lang.org/std/sync/struct.Mutex.html). 15 * SyncronizedRef on this wrapper. Inspired by Rust's Mutex type
16 * (http://doc.rust-lang.org/std/sync/struct.Mutex.html).
16 */ 17 */
17template <typename T> 18template <typename T>
18class SynchronizedWrapper { 19class SynchronizedWrapper {
19public: 20public:
20 template <typename... Args> 21 template <typename... Args>
21 SynchronizedWrapper(Args&&... args) : 22 SynchronizedWrapper(Args&&... args) : data(std::forward<Args>(args)...) {}
22 data(std::forward<Args>(args)...) {
23 }
24 23
25private: 24private:
26 template <typename U> 25 template <typename U>
@@ -58,11 +57,19 @@ public:
58 return *this; 57 return *this;
59 } 58 }
60 59
61 T& operator*() { return wrapper->data; } 60 T& operator*() {
62 const T& operator*() const { return wrapper->data; } 61 return wrapper->data;
62 }
63 const T& operator*() const {
64 return wrapper->data;
65 }
63 66
64 T* operator->() { return &wrapper->data; } 67 T* operator->() {
65 const T* operator->() const { return &wrapper->data; } 68 return &wrapper->data;
69 }
70 const T* operator->() const {
71 return &wrapper->data;
72 }
66 73
67private: 74private:
68 SynchronizedWrapper<T>* wrapper; 75 SynchronizedWrapper<T>* wrapper;