-/*
+/* $Id$
+
This file is part of libmspcore
Copyright © 2006 Mikko Rasa, Mikkosoft Productions
Distributed under the LGPL
*/
-#ifndef MSP_FRAMEWORK_MUTEX_H_
-#define MSP_FRAMEWORK_MUTEX_H_
+#ifndef MSP_CORE_MUTEX_H_
+#define MSP_CORE_MUTEX_H_
-#include <msp/refcount.h>
+#include "refptr.h"
#include "types.h"
namespace Msp {
friend class Semaphore;
};
+/**
+Locks the mutex for te lifetime of the object.
+*/
class MutexLock
{
public:
- MutexLock(Mutex &m): mutex(m) { mutex.lock(); }
- ~MutexLock() { mutex.unlock(); }
+ MutexLock(Mutex &m, bool l=true): mutex(m) { if(l) mutex.lock(); }
+ ~MutexLock() { mutex.unlock(); }
+
+ int lock() { return mutex.lock(); }
private:
Mutex &mutex;
MutexLock &operator=(const MutexLock &);
};
-
+/**
+Protects a pointer with a mutex. As long as the MutexPtr (or a copy of it)
+exists, the mutex will stay locked.
+*/
template<typename T>
+class MutexPtr
+{
+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;
+};
+
+/*template<typename T>
class MutexPtr: public RefCount
{
public:
}
return true;
}
-};
+};*/
}