Jpp 21.0.0-rc.1-88-g0130508c4
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 number_of_hits number of hits
217 * \param data pointer to data
218 * \return this data frame
219 */
220 JDAQFrame& add(const int number_of_hits, const JDAQHit* data)
221 {
222 if (number_of_hits > 0) {
223
224 resize(numberOfHits + number_of_hits);
225
226 memcpy(buffer + numberOfHits - number_of_hits, data, number_of_hits * sizeof(JDAQHit));
227 }
228
229 return *this;
230 }
231
232
233 /**
234 * Add data.
235 *
236 * \param frame frame
237 * \return this frame
238 */
239 JDAQFrame& add(const JDAQFrame& frame)
240 {
241 return add(frame.numberOfHits, frame.buffer);
242 }
243
244
245 /**
246 * Add hit.
247 *
248 * \param hit JDAQ hit
249 * \return this JDAQ frame
250 */
251 JDAQFrame& add(const JDAQHit& hit)
252 {
253 return add(1, &hit);
254 }
255
256
257 /**
258 * Swap data.
259 *
260 * \param frame frame
261 */
262 void swap(JDAQFrame& frame)
263 {
264 std::swap(numberOfHits, frame.numberOfHits);
265 std::swap(buffer, frame.buffer);
266 }
267
268
269 int numberOfHits; // following comment line is used by rootcint
270 JDAQHit* buffer; // [numberOfHits]
271
272
274
275
276 protected:
277 /**
278 * Resize internal buffer.
279 *
280 * This method increases the size of the buffer if necessary.
281 * Otherwise, the current size is maintained.
282 *
283 * \param number_of_hits total number of hits to allocate
284 */
285 void resize(const int number_of_hits)
286 {
287 if (number_of_hits > numberOfHits) {
288
289 const int number_of_bytes = number_of_hits * sizeof(JDAQHit);
290
291 if (buffer == NULL)
292 buffer = (JDAQHit*) malloc(number_of_bytes);
293 else
294 buffer = (JDAQHit*) realloc(buffer, number_of_bytes);
295
296 if (buffer == NULL) {
297 throw JDAQException("JDAQFrame::resize(): Memory exception - number of hits = " + std::to_string(number_of_hits));
298 }
299
300 numberOfHits = number_of_hits;
301 }
302 }
303 };
304
305
306 /**
307 * Equal operator for DAQ frames.
308 *
309 * \param first frame
310 * \param second frame
311 * \result true if first frame equal to second; else false
312 */
313 inline bool operator==(const JDAQFrame& first,
314 const JDAQFrame& second)
315 {
316 if (first.size() == second.size()) {
317
318 for (JDAQFrame::const_iterator p = first.begin(), q = second.begin(); p != first.end(); ++p, ++q) {
319 if (*p != *q) {
320 return false;
321 }
322 }
323
324 return true;
325
326 } else {
327
328 return false;
329 }
330 }
331
332
333 /**
334 * Not-equal operator for DAQ frames.
335 *
336 * \param first frame
337 * \param second frame
338 * \result true if first frame not equal to second; else false
339 */
340 inline bool operator!=(const JDAQFrame& first,
341 const JDAQFrame& second)
342 {
343 return !(first == second);
344 }
345}
346
347#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:262
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
JDAQFrame & add(const JDAQHit &hit)
Add hit.
Definition JDAQFrame.hh:251
const_reverse_iterator rbegin() const
Definition JDAQFrame.hh:173
JDAQFrame & add(const JDAQFrame &frame)
Add data.
Definition JDAQFrame.hh:239
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:220
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:285
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:1819
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