]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/semaphore.h
Refactor Mutex with pimpl
[libs/core.git] / source / core / semaphore.h
index 75c51e6a424716deee151e3bedfd7eb80342e006..3f2cc974a455855c35246f7abc10d12d1993e709 100644 (file)
@@ -1,12 +1,13 @@
-/*
-This file is part of libmspframework
+/* $Id$
+
+This file is part of libmspcore
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
-#ifndef MSP_FRAMEWORK_SEMAPHORE_H_
-#define MSP_FRAMEWORK_SEMAPHORE_H_
 
-#include <pthread.h>
+#ifndef MSP_CORE_SEMAPHORE_H_
+#define MSP_CORE_SEMAPHORE_H_
+
 #include "mutex.h"
 #include "../time/timedelta.h"
 
@@ -14,19 +15,18 @@ namespace Msp {
 
 class Semaphore
 {
-public:
-#ifndef WIN32
-       Semaphore()        { pthread_cond_init(&cond, 0); }
-       //Mutex &get_mutex() { return mutex; }
-       int   signal()     { MutexLock l(mutex); return pthread_cond_signal(&cond); }
-       int   broadcast()  { MutexLock l(mutex); return pthread_cond_broadcast(&cond); }
-       int   wait()       { mutex.lock(); return pthread_cond_wait(&cond, &mutex.mutex); }
-       int   wait(const Time::TimeDelta &);
-       ~Semaphore()       { pthread_cond_destroy(&cond); }
-#endif
 private:
-       Mutex mutex;
-       pthread_cond_t cond;
+       struct Private;
+
+       Private *priv;
+
+public:
+       Semaphore(unsigned);
+       ~Semaphore();
+
+       void signal();
+       void wait();
+       bool wait(const Time::TimeDelta &);
 };
 
 }