cec: stick some interfaces before the pthread stuff, so we can add other implementati...
[deb_libcec.git] / src / lib / platform / threads.h
index a258081ccef8bbdf6a5bc8f33826fbaf26ae6c84..2c3c2c540de03a369a3332a4e7e0e8a30309fc6d 100644 (file)
  *     http://www.pulse-eight.net/
  */
 
-#include "os-dependent.h"
 #include <stdint.h>
 
 namespace CEC
 {
-  class CMutex;
+  class IMutex
+  {
+  public:
+    IMutex(bool bRecursive = true) { m_bRecursive = bRecursive ; };
+    virtual ~IMutex(void) {};
+
+    virtual bool TryLock(void) = 0;
+    virtual bool Lock(void) = 0;
+    virtual void Unlock(void) = 0;
+
+  protected:
+    bool m_bRecursive;
+  };
 
-  class CCondition
+  class ICondition
   {
   public:
-    CCondition(void);
-    virtual ~CCondition(void);
+    virtual void Broadcast(void) = 0;
+    virtual void Signal(void) = 0;
+    virtual bool Wait(IMutex *mutex, uint32_t iTimeout = 0) = 0;
 
-    void Broadcast(void);
-    void Signal(void);
-    bool Wait(CMutex *mutex, uint32_t iTimeout = 0);
     static void Sleep(uint32_t iTimeout);
-
-  private:
-    pthread_cond_t  m_cond;
   };
 
-  class CMutex
+  class IThread
   {
   public:
-    CMutex(bool bRecursive = true);
-    virtual ~CMutex(void);
+    IThread(void);
+    virtual ~IThread(void);
 
-    bool TryLock(void);
-    bool Lock(void);
-    void Unlock(void);
+    virtual bool IsRunning(void) const { return m_bRunning; };
+    virtual bool CreateThread(bool bWait = true) = 0;
+    virtual bool IsStopped(void) const { return m_bStop; };
 
-    pthread_mutex_t m_mutex;
+    virtual bool StopThread(bool bWaitForExit = true);
+    virtual bool Sleep(uint32_t iTimeout);
 
-  private:
-    static pthread_mutexattr_t *GetMutexAttribute();
+    virtual void *Process(void) = 0;
+
+  protected:
+    bool        m_bStop;
+    bool        m_bRunning;
+    ICondition *m_threadCondition;
+    IMutex     *m_threadMutex;
   };
 
   class CLockObject
   {
   public:
-    CLockObject(CMutex *mutex, bool bTryLock = false);
+    CLockObject(IMutex *mutex, bool bTryLock = false);
     ~CLockObject(void);
 
     bool IsLocked(void) const { return m_bLocked; }
@@ -80,32 +92,7 @@ namespace CEC
     void Lock(void);
 
   private:
-    CMutex *m_mutex;
+    IMutex *m_mutex;
     bool    m_bLocked;
   };
-
-  class CThread
-  {
-  public:
-    CThread(void);
-    virtual ~CThread(void);
-
-    virtual bool IsRunning(void) const { return m_bRunning; }
-    virtual bool CreateThread(bool bWait = true);
-    virtual bool StopThread(bool bWaitForExit = true);
-    virtual bool IsStopped(void) const { return m_bStop; };
-    virtual bool Sleep(uint32_t iTimeout);
-
-    static void *ThreadHandler(CThread *thread);
-    virtual void *Process(void) = 0;
-
-  protected:
-    CCondition m_threadCondition;
-
-  private:
-    pthread_t  m_thread;
-    CMutex     m_threadMutex;
-    bool       m_bStop;
-    bool       m_bRunning;
-  };
 };