diff options
Diffstat (limited to 'src/common/synchronized_wrapper.h')
| -rw-r--r-- | src/common/synchronized_wrapper.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/common/synchronized_wrapper.h b/src/common/synchronized_wrapper.h index 07105a198..8dc4ddeac 100644 --- a/src/common/synchronized_wrapper.h +++ b/src/common/synchronized_wrapper.h | |||
| @@ -12,14 +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 | */ |
| 17 | template <typename T> | 18 | template <typename T> |
| 18 | class SynchronizedWrapper { | 19 | class SynchronizedWrapper { |
| 19 | public: | 20 | public: |
| 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 | } | 23 | } |
| 24 | 24 | ||
| 25 | private: | 25 | private: |
| @@ -58,11 +58,19 @@ public: | |||
| 58 | return *this; | 58 | return *this; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | T& operator*() { return wrapper->data; } | 61 | T& operator*() { |
| 62 | const T& operator*() const { return wrapper->data; } | 62 | return wrapper->data; |
| 63 | } | ||
| 64 | const T& operator*() const { | ||
| 65 | return wrapper->data; | ||
| 66 | } | ||
| 63 | 67 | ||
| 64 | T* operator->() { return &wrapper->data; } | 68 | T* operator->() { |
| 65 | const T* operator->() const { return &wrapper->data; } | 69 | return &wrapper->data; |
| 70 | } | ||
| 71 | const T* operator->() const { | ||
| 72 | return &wrapper->data; | ||
| 73 | } | ||
| 66 | 74 | ||
| 67 | private: | 75 | private: |
| 68 | SynchronizedWrapper<T>* wrapper; | 76 | SynchronizedWrapper<T>* wrapper; |