src
tools
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
// ****************************************************************************
13
BasicDataBuffer::BasicDataBuffer
()
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
23
BasicDataBuffer::~BasicDataBuffer
()
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
47
UINT32
BasicDataBuffer::getUsedBytes
()
48
{
49
return
m_bytesUsed
;
50
}
51
56
UINT32
BasicDataBuffer::getBufferSize
()
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
//
67
bool
BasicDataBuffer::pushData
(
BasicData
* data)
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
//
99
BasicData
*
BasicDataBuffer::popData
()
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
}
BasicDataBuffer::m_bytesMax
UINT32 m_bytesMax
Definition:
BasicDataBuffer.hpp:36
errorhandler.hpp
BasicDataBuffer::BasicDataBuffer
BasicDataBuffer()
Default constructor.
Definition:
BasicDataBuffer.cpp:13
ScopedLock
Definition:
Mutex.hpp:35
infoMessage
void infoMessage(std::string message, bool print)
Definition:
errorhandler.cpp:46
BasicDataBuffer::m_buffer
std::list< BasicData * > m_buffer
Definition:
BasicDataBuffer.hpp:37
BasicDataBuffer::setLimit
void setLimit(UINT32 maxBytesToBeUsed)
Definition:
BasicDataBuffer.cpp:37
BasicDataBuffer::getBufferSize
UINT32 getBufferSize()
Definition:
BasicDataBuffer.cpp:56
BasicDataBuffer.hpp
datatypes::BasicData
Definition:
BasicDatatypes.hpp:95
datatypes::BasicData::getUsedMemory
virtual const UINT32 getUsedMemory() const =0
BasicDataBuffer::popData
BasicData * popData()
Definition:
BasicDataBuffer.cpp:99
BasicDataBuffer::pushData
bool pushData(BasicData *data)
Definition:
BasicDataBuffer.cpp:67
toolbox.hpp
BasicDataBuffer::m_bytesUsed
UINT32 m_bytesUsed
Definition:
BasicDataBuffer.hpp:38
BasicDataBuffer::m_beVerbose
bool m_beVerbose
Definition:
BasicDataBuffer.hpp:35
UINT32
uint32_t UINT32
Definition:
BasicDatatypes.hpp:26
BasicDataBuffer::getUsedBytes
UINT32 getUsedBytes()
Definition:
BasicDataBuffer.cpp:47
BasicDataBuffer::m_mutex
Mutex m_mutex
Definition:
BasicDataBuffer.hpp:39
BasicDataBuffer::~BasicDataBuffer
~BasicDataBuffer()
Destructor.
Definition:
BasicDataBuffer.cpp:23
Mutex::unlock
void unlock()
Definition:
Mutex.cpp:52
libsick_ldmrs
Author(s): SICK AG
, Martin Günther
, Jochen Sprickerhof
autogenerated on Wed Oct 26 2022 02:11:57