X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Futil%2Fbuffer.h;h=ded4001dac43586d92fac960938de629195f6b65;hb=802b7a0f90e3668f7c4eac90f8692bc9b39a4833;hp=299b019d4113c2920c3ab183f7d560545696502f;hpb=abbca718e0f6b5a20170561beeacafa0b5852500;p=deb_libcec.git diff --git a/src/lib/util/buffer.h b/src/lib/util/buffer.h index 299b019..ded4001 100644 --- a/src/lib/util/buffer.h +++ b/src/lib/util/buffer.h @@ -31,36 +31,59 @@ * http://www.pulse-eight.net/ */ -#include "threads.h" +#include "../platform/threads.h" #include -template - struct CecBuffer - { - public: - CecBuffer(void) {} - virtual ~CecBuffer(void) {} - - void Push(_BType entry) +namespace CEC +{ + template + struct CecBuffer { - CLockObject lock(&mutex); - buffer.push(entry); - } + public: + CecBuffer(unsigned int iMaxSize = 100) + { + m_maxSize = iMaxSize; + } - bool Pop(_BType &entry) - { - bool bReturn(false); - CLockObject lock(&mutex); - if (buffer.size() > 0) + virtual ~CecBuffer(void) + { + Clear(); + } + + void Clear(void) + { + while (!m_buffer.empty()) + m_buffer.pop(); + } + + int Size(void) const { return m_buffer.size(); } + + bool Push(_BType entry) + { + CLockObject lock(&m_mutex); + if (m_buffer.size() == m_maxSize) + return false; + + m_buffer.push(entry); + return true; + } + + bool Pop(_BType &entry) { - entry = buffer.front(); - buffer.pop(); - bReturn = true; + bool bReturn(false); + CLockObject lock(&m_mutex); + if (!m_buffer.empty()) + { + entry = m_buffer.front(); + m_buffer.pop(); + bReturn = true; + } + return bReturn; } - return bReturn; - } - private: - std::queue<_BType> buffer; - CMutex mutex; - }; + private: + unsigned int m_maxSize; + std::queue<_BType> m_buffer; + CMutex m_mutex; + }; +};