Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JDAQFrame.hh
Go to the documentation of this file.
1#ifndef __JDAQFRAME__
2#define __JDAQFRAME__
3
4#include <stdlib.h>
5#include <string.h>
6#include <string>
7#include <iterator>
8#include <algorithm>
9
13
14
15/**
16 * \author mdejong
17 */
18namespace KM3NETDAQ {
19
20 /**
21 * Subset of data frame.
22 **/
24 {
25 public:
26
27 typedef const JDAQHit* const_iterator;
28 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
29
30
31 /**
32 * Constructor.
33 *
34 * \param number_of_hits number of hits
35 * \param data pointer to data
36 */
37 JDAQFrameSubset(const int number_of_hits, const JDAQHit* data) :
38 numberOfHits(number_of_hits),
40 {}
41
42
43 const_iterator begin() const { return buffer; }
44 const_iterator end() const { return buffer + numberOfHits; }
45
48
49 bool empty() const { return numberOfHits == 0; }
50
51 int size() const { return numberOfHits; }
52
53 const JDAQHit* data() const { return buffer; }
54
55
56 private:
57 const int numberOfHits;
59 };
60
61
62 /**
63 * Data frame.
64 */
66 {
67 public:
68
69 typedef const JDAQHit* const_iterator;
70 typedef JDAQHit* iterator;
71 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
72 typedef std::reverse_iterator<iterator> reverse_iterator;
73
74 friend size_t getSizeof(const JDAQFrame&);
76 friend JWriter& operator<<(JWriter&, const JDAQFrame&);
77
78 /**
79 * Default constructor.
80 */
82 numberOfHits(0),
83 buffer(NULL)
84 {}
85
86
87 /**
88 * Copy constructor.
89 *
90 * \param frame frame
91 */
92 JDAQFrame(const JDAQFrame& frame) :
93 numberOfHits(0),
94 buffer(NULL)
95 {
96 add(frame);
97 }
98
99
100 /**
101 * Move constructor.
102 *
103 * \param frame frame
104 */
107 buffer (frame.buffer)
108 {
109 frame.numberOfHits = 0;
110 frame.buffer = NULL;
111 }
112
113
114 /**
115 * Constructor.
116 *
117 * \param number_of_hits number of hits
118 * \param data pointer to data
119 */
120 JDAQFrame(const int number_of_hits, const JDAQHit* data) :
121 numberOfHits(0),
122 buffer(NULL)
123 {
124 add(number_of_hits, data);
125 }
126
127
128 /**
129 * Destructor.
130 */
131 virtual ~JDAQFrame()
132 {
133 clear();
134 }
135
136
137 /**
138 * Assignment operator.
139 *
140 * \param frame frame
141 * \return this frame
142 */
144 {
145 add(frame);
146
147 return *this;
148 }
149
150
151 /**
152 * Clear data.
153 */
154 void clear()
155 {
156 if (buffer != NULL) {
157 free(buffer);
158 }
159
160 numberOfHits = 0;
161 buffer = NULL;
162 }
163
164
165 const_iterator begin() const { return buffer; }
166 const_iterator end() const { return buffer + numberOfHits; }
167
168
169 iterator begin() { return buffer; }
171
172
175
176
179
180
181 bool empty() const { return numberOfHits == 0; }
182
183 int size() const { return numberOfHits; }
184
185 const JDAQHit* data() const { return buffer; }
186 JDAQHit* data() { return buffer; }
187
188
189 /**
190 * Get hit at given index.
191 *
192 * \param index index
193 * \return hit
194 */
195 const JDAQHit& operator[](int index) const
196 {
197 return buffer[index];
198 }
199
200 /**
201 * Get subset of data.
202 *
203 * \param i1 first index of hit (included)
204 * \param i2 last index of hit (excluded)
205 * \return frame
206 */
207 JDAQFrameSubset subset(const int i1, const int i2) const
208 {
209 return JDAQFrameSubset(i2 - i1, buffer + i1);
210 }
211
212
213 /**
214 * Add data.
215 *
216 * \param frame frame
217 * \return this frame
218 */
219 JDAQFrame& add(const JDAQFrame& frame)
220 {
221 return add(frame.numberOfHits, frame.buffer);
222 }
223
224
225 /**
226 * Add data.
227 *
228 * \param number_of_hits number of hits
229 * \param data pointer to data
230 * \return this data frame
231 */
232 JDAQFrame& add(const int number_of_hits, const JDAQHit* data)
233 {
234 if (number_of_hits > 0) {
235
236 resize(numberOfHits + number_of_hits);
237
238 memcpy(buffer + numberOfHits - number_of_hits, data, number_of_hits * sizeof(JDAQHit));
239 }
240
241 return *this;
242 }
243
244
245 /**
246 * Swap data.
247 *
248 * \param frame frame
249 */
250 void swap(JDAQFrame& frame)
251 {
252 std::swap(numberOfHits, frame.numberOfHits);
253 std::swap(buffer, frame.buffer);
254 }
255
256
257 int numberOfHits; // following comment line is used by rootcint
258 JDAQHit* buffer; // [numberOfHits]
259
260
262
263
264 protected:
265 /**
266 * Resize internal buffer.
267 *
268 * This method increases the size of the buffer if necessary.
269 * Otherwise, the current size is maintained.
270 *
271 * \param number_of_hits total number of hits to allocate
272 */
273 void resize(const int number_of_hits)
274 {
275 if (number_of_hits > numberOfHits) {
276
277 const int number_of_bytes = number_of_hits * sizeof(JDAQHit);
278
279 if (buffer == NULL)
280 buffer = (JDAQHit*) malloc(number_of_bytes);
281 else
282 buffer = (JDAQHit*) realloc(buffer, number_of_bytes);
283
284 if (buffer == NULL) {
285 throw JDAQException("JDAQFrame::resize(): Memory exception - number of hits = " + std::to_string(number_of_hits));
286 }
287
288 numberOfHits = number_of_hits;
289 }
290 }
291 };
292
293
294 /**
295 * Equal operator for DAQ frames.
296 *
297 * \param first frame
298 * \param second frame
299 * \result true if first frame equal to second; else false
300 */
301 inline bool operator==(const JDAQFrame& first,
302 const JDAQFrame& second)
303 {
304 if (first.size() == second.size()) {
305
306 for (JDAQFrame::const_iterator p = first.begin(), q = second.begin(); p != first.end(); ++p, ++q) {
307 if (*p != *q) {
308 return false;
309 }
310 }
311
312 return true;
313
314 } else {
315
316 return false;
317 }
318 }
319
320
321 /**
322 * Not-equal operator for DAQ frames.
323 *
324 * \param first frame
325 * \param second frame
326 * \result true if first frame not equal to second; else false
327 */
328 inline bool operator!=(const JDAQFrame& first,
329 const JDAQFrame& second)
330 {
331 return !(first == second);
332 }
333}
334
335#endif
Interface for binary input.
Interface for binary output.
General exception.
Subset of data frame.
Definition JDAQFrame.hh:24
const JDAQHit * buffer
Definition JDAQFrame.hh:58
const JDAQHit * const_iterator
Definition JDAQFrame.hh:27
const_reverse_iterator rend() const
Definition JDAQFrame.hh:47
const_reverse_iterator rbegin() const
Definition JDAQFrame.hh:46
JDAQFrameSubset(const int number_of_hits, const JDAQHit *data)
Constructor.
Definition JDAQFrame.hh:37
const JDAQHit * data() const
Definition JDAQFrame.hh:53
const_iterator end() const
Definition JDAQFrame.hh:44
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition JDAQFrame.hh:28
const_iterator begin() const
Definition JDAQFrame.hh:43
JDAQFrame(const int number_of_hits, const JDAQHit *data)
Constructor.
Definition JDAQFrame.hh:120
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition JDAQFrame.hh:71
const_iterator end() const
Definition JDAQFrame.hh:166
JDAQFrame()
Default constructor.
Definition JDAQFrame.hh:81
friend size_t getSizeof(const JDAQFrame &)
Get size of object.
const JDAQHit & operator[](int index) const
Get hit at given index.
Definition JDAQFrame.hh:195
reverse_iterator rend()
Definition JDAQFrame.hh:178
JDAQFrame(JDAQFrame &&frame)
Move constructor.
Definition JDAQFrame.hh:105
friend JWriter & operator<<(JWriter &, const JDAQFrame &)
Write DAQ frame to output.
void swap(JDAQFrame &frame)
Swap data.
Definition JDAQFrame.hh:250
const JDAQHit * const_iterator
Definition JDAQFrame.hh:69
reverse_iterator rbegin()
Definition JDAQFrame.hh:177
friend JReader & operator>>(JReader &, JDAQFrame &)
Read DAQ frame from input.
JDAQFrameSubset subset(const int i1, const int i2) const
Get subset of data.
Definition JDAQFrame.hh:207
const_reverse_iterator rend() const
Definition JDAQFrame.hh:174
const_reverse_iterator rbegin() const
Definition JDAQFrame.hh:173
JDAQFrame & add(const JDAQFrame &frame)
Add data.
Definition JDAQFrame.hh:219
JDAQFrame & operator=(const JDAQFrame &frame)
Assignment operator.
Definition JDAQFrame.hh:143
JDAQFrame & add(const int number_of_hits, const JDAQHit *data)
Add data.
Definition JDAQFrame.hh:232
bool empty() const
Definition JDAQFrame.hh:181
JDAQFrame(const JDAQFrame &frame)
Copy constructor.
Definition JDAQFrame.hh:92
void resize(const int number_of_hits)
Resize internal buffer.
Definition JDAQFrame.hh:273
const JDAQHit * data() const
Definition JDAQFrame.hh:185
void clear()
Clear data.
Definition JDAQFrame.hh:154
virtual ~JDAQFrame()
Destructor.
Definition JDAQFrame.hh:131
ClassDef(JDAQFrame, 1)
std::reverse_iterator< iterator > reverse_iterator
Definition JDAQFrame.hh:72
const_iterator begin() const
Definition JDAQFrame.hh:165
Hit data structure.
Definition JDAQHit.hh:35
bool operator==(const Head &first, const Head &second)
Equal operator.
Definition JHead.hh:1801
bool operator!=(const JTag &first, const JTag &second)
Not equal operator for JTag.
Definition JTag.hh:291
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39