]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/mutex.h
Make sure all classes have sensible copy semantics
[libs/core.git] / source / core / mutex.h
index 18f9039227e1feb19e7860811e7487a2338dfd9a..3d3dc84dd3bca28e65c0ea770b00cc6851b6f552 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef MSP_CORE_MUTEX_H_
 #define MSP_CORE_MUTEX_H_
 
+#include "noncopyable.h"
 #include "refptr.h"
 
 namespace Msp {
@@ -9,7 +10,7 @@ namespace Msp {
 A class for controlling mutually exclusive access to a resource.  Only one
 thread can hold a lock on the mutex at a time.
 */
-class Mutex
+class Mutex: private NonCopyable
 {
        friend class Semaphore;
 
@@ -35,21 +36,19 @@ public:
 };
 
 /**
-Locks the mutex for te lifetime of the object.
+Locks the mutex for the lifetime of the object.
 */
 class MutexLock
 {
 private:
        Mutex &mutex;
 
+       MutexLock(const MutexLock &);
 public:
        MutexLock(Mutex &m, bool l = true): mutex(m) { if(l) mutex.lock(); }
        ~MutexLock() { mutex.unlock(); }
 
        void lock() { mutex.lock(); }
-private:
-       MutexLock(const MutexLock &);
-       MutexLock &operator=(const MutexLock &);
 };
 
 /**
@@ -59,15 +58,16 @@ exists, the mutex will stay locked.
 template<typename T>
 class MutexPtr
 {
+private:
+       RefPtr<MutexLock> mutex;
+       T *data;
+
 public:
        MutexPtr(T *d, Mutex &m): mutex(new MutexLock(m)), data(d) { }
 
        T &operator*() const { return *data; }
        T *operator->() const { return data; }
-       void clear() { mutex=0; data = 0; }
-private:
-       RefPtr<MutexLock> mutex;
-       T *data;
+       void clear() { mutex = 0; data = 0; }
 };
 
 }