BasicDataBuffer.cpp
Go to the documentation of this file.
00001 
00005 #include "BasicDataBuffer.hpp"
00006 #include "errorhandler.hpp"
00007 #include "toolbox.hpp"
00008 
00009 
00010 // ****************************************************************************
00011 //     Buffer fuer BasicData
00012 // ****************************************************************************
00013 BasicDataBuffer::BasicDataBuffer()
00014         : m_beVerbose(false)
00015         , m_bytesMax(0)
00016         , m_bytesUsed(0)
00017 {
00018         infoMessage("BasicDataBuffer: Starting constructor.", m_beVerbose);
00019         
00020         infoMessage("BasicDataBuffer(): Constructor is done.", m_beVerbose);
00021 }
00022 
00023 BasicDataBuffer::~BasicDataBuffer()
00024 {
00025         infoMessage("~BasicDataBuffer(): Destructor called.", m_beVerbose);
00026         
00027         
00028         infoMessage("~BasicDataBuffer(): Destructor is done - object is dead.", m_beVerbose);
00029 }
00030 
00037 void BasicDataBuffer::setLimit(UINT32 maxBytesToBeUsed)
00038 {
00039         m_bytesMax = maxBytesToBeUsed;
00040 }
00041 
00042 
00047 UINT32 BasicDataBuffer::getUsedBytes()
00048 {
00049         return m_bytesUsed;
00050 }
00051 
00056 UINT32 BasicDataBuffer::getBufferSize()
00057 {
00058         return m_buffer.size();
00059 }
00060 
00061 //
00062 // Speichert den Zeiger (!) auf das Datum im Puffer, sofern der Platz im Puffer (mitgerechnet
00063 // wird der Speicherplatz des Daten-Objekts) noch reicht.
00064 // 
00065 // true: Datum wurde gespeichert.
00066 //
00067 bool BasicDataBuffer::pushData(BasicData* data)
00068 {
00069         ScopedLock lock(&m_mutex);      // .lock();
00070         
00071         // Gibt es ein Limit?
00072         UINT32 sizeOfNewData = data->getUsedMemory();
00073         if (m_bytesMax > 0)
00074         {
00075                 // Es gibt ein Limit, also pruefen
00076                 UINT32 newSize = m_bytesUsed + sizeOfNewData;   // sizeof(*data);
00077                 if (newSize > m_bytesMax)
00078                 {
00079                         // Das Limit wird ueberschritten, also dieses Datum ablehnen.
00080                         m_mutex.unlock();
00081                         return false;
00082                 }
00083         }
00084         
00085         // Datum speichern
00086         m_buffer.push_back(data);
00087         m_bytesUsed += sizeOfNewData;
00088         
00089 //      m_mutex.unlock();
00090         return true;
00091 }
00092 
00093 //
00094 // Liefert den Zeiger auf das aelteste Datum im Puffer. War kein Datum vorhanden, ist der Zeiger NULL.
00095 //
00096 // Die Bytes-Used-Verwaltung funktioniert nicht, falls die Daten im Puffer von der Applikation veraendert werden.
00097 // Dann werden naemlich eine andere Anzahl Bytes entfernt, als hinzugefuegt wurden...
00098 //
00099 BasicData* BasicDataBuffer::popData()
00100 {
00101         ScopedLock lock(&m_mutex);
00102         
00103         BasicData* data = NULL;
00104         
00105         // Sind noch Daten im Puffer?
00106         if (m_buffer.size() > 0)
00107         {
00108                 data = m_buffer.front();
00109                 m_buffer.pop_front();
00110                 m_bytesUsed -= data->getUsedMemory();
00111         }
00112         
00113 //      m_mutex.unlock();
00114         return data;
00115 }


libsick_ldmrs
Author(s): SICK AG , Martin Günther , Jochen Sprickerhof
autogenerated on Wed Jun 14 2017 04:04:50