cec: refactor USB adapter communication. less locks, shorter locks, added documentati...
[deb_libcec.git] / src / lib / platform / util / buffer.h
index ce6029c622cda793261f8de667e1cdc2af5c2ebc..8777661df1c4e6942f937905126b868c2d2cce1f 100644 (file)
@@ -40,24 +40,32 @@ namespace PLATFORM
     struct SyncedBuffer
     {
     public:
-      SyncedBuffer(size_t iMaxSize = 100)
-      {
-        m_maxSize = iMaxSize;
-      }
+      SyncedBuffer(size_t iMaxSize = 100) :
+          m_maxSize(iMaxSize) {}
 
       virtual ~SyncedBuffer(void)
       {
-        CLockObject lock(m_mutex, true);
         Clear();
       }
 
       void Clear(void)
       {
+        CLockObject lock(m_mutex);
         while (!m_buffer.empty())
           m_buffer.pop();
       }
 
-      size_t Size(void) const { return m_buffer.size(); }
+      size_t Size(void)
+      {
+        CLockObject lock(m_mutex);
+        return m_buffer.size();
+      }
+
+      bool IsEmpty(void)
+      {
+        CLockObject lock(m_mutex);
+        return m_buffer.empty();
+      }
 
       bool Push(_BType entry)
       {
@@ -82,6 +90,18 @@ namespace PLATFORM
         return bReturn;
       }
 
+      bool Peek(_BType &entry)
+      {
+        bool bReturn(false);
+        CLockObject lock(m_mutex);
+        if (!m_buffer.empty())
+        {
+          entry = m_buffer.front();
+          bReturn = true;
+        }
+        return bReturn;
+      }
+
     private:
       size_t             m_maxSize;
       std::queue<_BType> m_buffer;