BasicDataBuffer.cpp
Go to the documentation of this file.
1 
5 #include "BasicDataBuffer.hpp"
6 #include "errorhandler.hpp"
7 #include "toolbox.hpp"
8 
9 
10 // ****************************************************************************
11 // Buffer fuer BasicData
12 // ****************************************************************************
14  : m_beVerbose(false)
15  , m_bytesMax(0)
16  , m_bytesUsed(0)
17 {
18  infoMessage("BasicDataBuffer: Starting constructor.", m_beVerbose);
19 
20  infoMessage("BasicDataBuffer(): Constructor is done.", m_beVerbose);
21 }
22 
24 {
25  infoMessage("~BasicDataBuffer(): Destructor called.", m_beVerbose);
26 
27 
28  infoMessage("~BasicDataBuffer(): Destructor is done - object is dead.", m_beVerbose);
29 }
30 
37 void BasicDataBuffer::setLimit(UINT32 maxBytesToBeUsed)
38 {
39  m_bytesMax = maxBytesToBeUsed;
40 }
41 
42 
48 {
49  return m_bytesUsed;
50 }
51 
57 {
58  return m_buffer.size();
59 }
60 
61 //
62 // Speichert den Zeiger (!) auf das Datum im Puffer, sofern der Platz im Puffer (mitgerechnet
63 // wird der Speicherplatz des Daten-Objekts) noch reicht.
64 //
65 // true: Datum wurde gespeichert.
66 //
68 {
69  ScopedLock lock(&m_mutex); // .lock();
70 
71  // Gibt es ein Limit?
72  UINT32 sizeOfNewData = data->getUsedMemory();
73  if (m_bytesMax > 0)
74  {
75  // Es gibt ein Limit, also pruefen
76  UINT32 newSize = m_bytesUsed + sizeOfNewData; // sizeof(*data);
77  if (newSize > m_bytesMax)
78  {
79  // Das Limit wird ueberschritten, also dieses Datum ablehnen.
80  m_mutex.unlock();
81  return false;
82  }
83  }
84 
85  // Datum speichern
86  m_buffer.push_back(data);
87  m_bytesUsed += sizeOfNewData;
88 
89 // m_mutex.unlock();
90  return true;
91 }
92 
93 //
94 // Liefert den Zeiger auf das aelteste Datum im Puffer. War kein Datum vorhanden, ist der Zeiger NULL.
95 //
96 // Die Bytes-Used-Verwaltung funktioniert nicht, falls die Daten im Puffer von der Applikation veraendert werden.
97 // Dann werden naemlich eine andere Anzahl Bytes entfernt, als hinzugefuegt wurden...
98 //
100 {
101  ScopedLock lock(&m_mutex);
102 
103  BasicData* data = NULL;
104 
105  // Sind noch Daten im Puffer?
106  if (m_buffer.size() > 0)
107  {
108  data = m_buffer.front();
109  m_buffer.pop_front();
110  m_bytesUsed -= data->getUsedMemory();
111  }
112 
113 // m_mutex.unlock();
114  return data;
115 }
virtual const UINT32 getUsedMemory() const =0
uint32_t UINT32
~BasicDataBuffer()
Destructor.
bool pushData(BasicData *data)
std::list< BasicData * > m_buffer
void infoMessage(std::string message, bool print)
void setLimit(UINT32 maxBytesToBeUsed)
BasicData * popData()
void unlock()
Definition: Mutex.cpp:52
BasicDataBuffer()
Default constructor.


libsick_ldmrs
Author(s): SICK AG , Martin Günther , Jochen Sprickerhof
autogenerated on Sat Jun 8 2019 17:57:33