1 /*
2 *
3 * Copyright (C) 2008-2012, OFFIS e.V. and ICSMED AG, Oldenburg, Germany
4 * Copyright (C) 2013-2019, J. Riesmeier, Oldenburg, Germany
5 * All rights reserved. See COPYRIGHT file for details.
6 *
7 * Source file for class DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule
8 *
9 * Generated automatically from DICOM PS 3.3-2017e
10 * File created on 2017-12-05 09:30:54
11 * Last modified on 2019-10-31 by Riesmeier
12 *
13 */
14
15
16 #include "dcmtk/config/osconfig.h" // make sure OS specific configuration is included first
17
18 #include "dcmtk/dcmrt/seq/drtrbs4.h"
19
20
21 // --- item class ---
22
Item(const OFBool emptyDefaultItem)23 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::Item(const OFBool emptyDefaultItem)
24 : EmptyDefaultItem(emptyDefaultItem),
25 AlternateBeamDose(DCM_AlternateBeamDose),
26 AlternateBeamDoseType(DCM_AlternateBeamDoseType),
27 BeamDeliveryDurationLimit(DCM_BeamDeliveryDurationLimit),
28 BeamDose(DCM_BeamDose),
29 BeamDoseSpecificationPoint(DCM_RETIRED_BeamDoseSpecificationPoint),
30 BeamDoseType(DCM_BeamDoseType),
31 BeamMeterset(DCM_BeamMeterset),
32 ReferencedBeamNumber(DCM_ReferencedBeamNumber),
33 ReferencedDoseReferenceUID(DCM_ReferencedDoseReferenceUID)
34 {
35 }
36
37
Item(const Item & copy)38 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::Item(const Item ©)
39 : EmptyDefaultItem(copy.EmptyDefaultItem),
40 AlternateBeamDose(copy.AlternateBeamDose),
41 AlternateBeamDoseType(copy.AlternateBeamDoseType),
42 BeamDeliveryDurationLimit(copy.BeamDeliveryDurationLimit),
43 BeamDose(copy.BeamDose),
44 BeamDoseSpecificationPoint(copy.BeamDoseSpecificationPoint),
45 BeamDoseType(copy.BeamDoseType),
46 BeamMeterset(copy.BeamMeterset),
47 ReferencedBeamNumber(copy.ReferencedBeamNumber),
48 ReferencedDoseReferenceUID(copy.ReferencedDoseReferenceUID)
49 {
50 }
51
52
~Item()53 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::~Item()
54 {
55 }
56
57
operator =(const Item & copy)58 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::operator=(const Item ©)
59 {
60 if (this != ©)
61 {
62 EmptyDefaultItem = copy.EmptyDefaultItem;
63 AlternateBeamDose = copy.AlternateBeamDose;
64 AlternateBeamDoseType = copy.AlternateBeamDoseType;
65 BeamDeliveryDurationLimit = copy.BeamDeliveryDurationLimit;
66 BeamDose = copy.BeamDose;
67 BeamDoseSpecificationPoint = copy.BeamDoseSpecificationPoint;
68 BeamDoseType = copy.BeamDoseType;
69 BeamMeterset = copy.BeamMeterset;
70 ReferencedBeamNumber = copy.ReferencedBeamNumber;
71 ReferencedDoseReferenceUID = copy.ReferencedDoseReferenceUID;
72 }
73 return *this;
74 }
75
76
clear()77 void DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::clear()
78 {
79 if (!EmptyDefaultItem)
80 {
81 /* clear all DICOM attributes */
82 ReferencedBeamNumber.clear();
83 BeamDoseSpecificationPoint.clear();
84 ReferencedDoseReferenceUID.clear();
85 BeamDose.clear();
86 BeamDoseType.clear();
87 AlternateBeamDose.clear();
88 AlternateBeamDoseType.clear();
89 BeamMeterset.clear();
90 BeamDeliveryDurationLimit.clear();
91 }
92 }
93
94
isEmpty()95 OFBool DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::isEmpty()
96 {
97 return ReferencedBeamNumber.isEmpty() &&
98 BeamDoseSpecificationPoint.isEmpty() &&
99 ReferencedDoseReferenceUID.isEmpty() &&
100 BeamDose.isEmpty() &&
101 BeamDoseType.isEmpty() &&
102 AlternateBeamDose.isEmpty() &&
103 AlternateBeamDoseType.isEmpty() &&
104 BeamMeterset.isEmpty() &&
105 BeamDeliveryDurationLimit.isEmpty();
106 }
107
108
isValid() const109 OFBool DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::isValid() const
110 {
111 return !EmptyDefaultItem;
112 }
113
114
read(DcmItem & item)115 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::read(DcmItem &item)
116 {
117 OFCondition result = EC_IllegalCall;
118 if (!EmptyDefaultItem)
119 {
120 /* re-initialize object */
121 clear();
122 getAndCheckElementFromDataset(item, ReferencedBeamNumber, "1", "1", "ReferencedBeamSequence");
123 getAndCheckElementFromDataset(item, BeamDoseSpecificationPoint, "3", "3", "ReferencedBeamSequence");
124 getAndCheckElementFromDataset(item, ReferencedDoseReferenceUID, "1", "3", "ReferencedBeamSequence");
125 getAndCheckElementFromDataset(item, BeamDose, "1", "3", "ReferencedBeamSequence");
126 getAndCheckElementFromDataset(item, BeamDoseType, "1", "1C", "ReferencedBeamSequence");
127 getAndCheckElementFromDataset(item, AlternateBeamDose, "1", "3", "ReferencedBeamSequence");
128 getAndCheckElementFromDataset(item, AlternateBeamDoseType, "1", "1C", "ReferencedBeamSequence");
129 getAndCheckElementFromDataset(item, BeamMeterset, "1", "3", "ReferencedBeamSequence");
130 getAndCheckElementFromDataset(item, BeamDeliveryDurationLimit, "1", "3", "ReferencedBeamSequence");
131 result = EC_Normal;
132 }
133 return result;
134 }
135
136
write(DcmItem & item)137 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::write(DcmItem &item)
138 {
139 OFCondition result = EC_IllegalCall;
140 if (!EmptyDefaultItem)
141 {
142 result = EC_Normal;
143 addElementToDataset(result, item, new DcmIntegerString(ReferencedBeamNumber), "1", "1", "ReferencedBeamSequence");
144 addElementToDataset(result, item, new DcmDecimalString(BeamDoseSpecificationPoint), "3", "3", "ReferencedBeamSequence");
145 addElementToDataset(result, item, new DcmUniqueIdentifier(ReferencedDoseReferenceUID), "1", "3", "ReferencedBeamSequence");
146 addElementToDataset(result, item, new DcmDecimalString(BeamDose), "1", "3", "ReferencedBeamSequence");
147 addElementToDataset(result, item, new DcmCodeString(BeamDoseType), "1", "1C", "ReferencedBeamSequence");
148 addElementToDataset(result, item, new DcmDecimalString(AlternateBeamDose), "1", "3", "ReferencedBeamSequence");
149 addElementToDataset(result, item, new DcmCodeString(AlternateBeamDoseType), "1", "1C", "ReferencedBeamSequence");
150 addElementToDataset(result, item, new DcmDecimalString(BeamMeterset), "1", "3", "ReferencedBeamSequence");
151 addElementToDataset(result, item, new DcmFloatingPointDouble(BeamDeliveryDurationLimit), "1", "3", "ReferencedBeamSequence");
152 }
153 return result;
154 }
155
156
getAlternateBeamDose(OFString & value,const signed long pos) const157 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getAlternateBeamDose(OFString &value, const signed long pos) const
158 {
159 if (EmptyDefaultItem)
160 return EC_IllegalCall;
161 else
162 return getStringValueFromElement(AlternateBeamDose, value, pos);
163 }
164
165
getAlternateBeamDose(Float64 & value,const unsigned long pos) const166 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getAlternateBeamDose(Float64 &value, const unsigned long pos) const
167 {
168 if (EmptyDefaultItem)
169 return EC_IllegalCall;
170 else
171 return OFconst_cast(DcmDecimalString &, AlternateBeamDose).getFloat64(value, pos);
172 }
173
174
getAlternateBeamDoseType(OFString & value,const signed long pos) const175 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getAlternateBeamDoseType(OFString &value, const signed long pos) const
176 {
177 if (EmptyDefaultItem)
178 return EC_IllegalCall;
179 else
180 return getStringValueFromElement(AlternateBeamDoseType, value, pos);
181 }
182
183
getBeamDeliveryDurationLimit(Float64 & value,const unsigned long pos) const184 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDeliveryDurationLimit(Float64 &value, const unsigned long pos) const
185 {
186 if (EmptyDefaultItem)
187 return EC_IllegalCall;
188 else
189 return OFconst_cast(DcmFloatingPointDouble &, BeamDeliveryDurationLimit).getFloat64(value, pos);
190 }
191
192
getBeamDose(OFString & value,const signed long pos) const193 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDose(OFString &value, const signed long pos) const
194 {
195 if (EmptyDefaultItem)
196 return EC_IllegalCall;
197 else
198 return getStringValueFromElement(BeamDose, value, pos);
199 }
200
201
getBeamDose(Float64 & value,const unsigned long pos) const202 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDose(Float64 &value, const unsigned long pos) const
203 {
204 if (EmptyDefaultItem)
205 return EC_IllegalCall;
206 else
207 return OFconst_cast(DcmDecimalString &, BeamDose).getFloat64(value, pos);
208 }
209
210
getBeamDoseSpecificationPoint(OFString & value,const signed long pos) const211 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDoseSpecificationPoint(OFString &value, const signed long pos) const
212 {
213 if (EmptyDefaultItem)
214 return EC_IllegalCall;
215 else
216 return getStringValueFromElement(BeamDoseSpecificationPoint, value, pos);
217 }
218
219
getBeamDoseSpecificationPoint(Float64 & value,const unsigned long pos) const220 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDoseSpecificationPoint(Float64 &value, const unsigned long pos) const
221 {
222 if (EmptyDefaultItem)
223 return EC_IllegalCall;
224 else
225 return OFconst_cast(DcmDecimalString &, BeamDoseSpecificationPoint).getFloat64(value, pos);
226 }
227
228
getBeamDoseSpecificationPoint(OFVector<Float64> & value) const229 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDoseSpecificationPoint(OFVector<Float64> &value) const
230 {
231 if (EmptyDefaultItem)
232 return EC_IllegalCall;
233 else
234 return OFconst_cast(DcmDecimalString &, BeamDoseSpecificationPoint).getFloat64Vector(value);
235 }
236
237
getBeamDoseType(OFString & value,const signed long pos) const238 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamDoseType(OFString &value, const signed long pos) const
239 {
240 if (EmptyDefaultItem)
241 return EC_IllegalCall;
242 else
243 return getStringValueFromElement(BeamDoseType, value, pos);
244 }
245
246
getBeamMeterset(OFString & value,const signed long pos) const247 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamMeterset(OFString &value, const signed long pos) const
248 {
249 if (EmptyDefaultItem)
250 return EC_IllegalCall;
251 else
252 return getStringValueFromElement(BeamMeterset, value, pos);
253 }
254
255
getBeamMeterset(Float64 & value,const unsigned long pos) const256 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getBeamMeterset(Float64 &value, const unsigned long pos) const
257 {
258 if (EmptyDefaultItem)
259 return EC_IllegalCall;
260 else
261 return OFconst_cast(DcmDecimalString &, BeamMeterset).getFloat64(value, pos);
262 }
263
264
getReferencedBeamNumber(OFString & value,const signed long pos) const265 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getReferencedBeamNumber(OFString &value, const signed long pos) const
266 {
267 if (EmptyDefaultItem)
268 return EC_IllegalCall;
269 else
270 return getStringValueFromElement(ReferencedBeamNumber, value, pos);
271 }
272
273
getReferencedBeamNumber(Sint32 & value,const unsigned long pos) const274 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getReferencedBeamNumber(Sint32 &value, const unsigned long pos) const
275 {
276 if (EmptyDefaultItem)
277 return EC_IllegalCall;
278 else
279 return OFconst_cast(DcmIntegerString &, ReferencedBeamNumber).getSint32(value, pos);
280 }
281
282
getReferencedDoseReferenceUID(OFString & value,const signed long pos) const283 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::getReferencedDoseReferenceUID(OFString &value, const signed long pos) const
284 {
285 if (EmptyDefaultItem)
286 return EC_IllegalCall;
287 else
288 return getStringValueFromElement(ReferencedDoseReferenceUID, value, pos);
289 }
290
291
setAlternateBeamDose(const OFString & value,const OFBool check)292 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setAlternateBeamDose(const OFString &value, const OFBool check)
293 {
294 OFCondition result = EC_IllegalCall;
295 if (!EmptyDefaultItem)
296 {
297 result = (check) ? DcmDecimalString::checkStringValue(value, "1") : EC_Normal;
298 if (result.good())
299 result = AlternateBeamDose.putOFStringArray(value);
300 }
301 return result;
302 }
303
304
setAlternateBeamDoseType(const OFString & value,const OFBool check)305 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setAlternateBeamDoseType(const OFString &value, const OFBool check)
306 {
307 OFCondition result = EC_IllegalCall;
308 if (!EmptyDefaultItem)
309 {
310 result = (check) ? DcmCodeString::checkStringValue(value, "1") : EC_Normal;
311 if (result.good())
312 result = AlternateBeamDoseType.putOFStringArray(value);
313 }
314 return result;
315 }
316
317
setBeamDeliveryDurationLimit(const Float64 value,const unsigned long pos)318 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setBeamDeliveryDurationLimit(const Float64 value, const unsigned long pos)
319 {
320 if (EmptyDefaultItem)
321 return EC_IllegalCall;
322 else
323 return BeamDeliveryDurationLimit.putFloat64(value, pos);
324 }
325
326
setBeamDose(const OFString & value,const OFBool check)327 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setBeamDose(const OFString &value, const OFBool check)
328 {
329 OFCondition result = EC_IllegalCall;
330 if (!EmptyDefaultItem)
331 {
332 result = (check) ? DcmDecimalString::checkStringValue(value, "1") : EC_Normal;
333 if (result.good())
334 result = BeamDose.putOFStringArray(value);
335 }
336 return result;
337 }
338
339
setBeamDoseSpecificationPoint(const OFString & value,const OFBool check)340 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setBeamDoseSpecificationPoint(const OFString &value, const OFBool check)
341 {
342 OFCondition result = EC_IllegalCall;
343 if (!EmptyDefaultItem)
344 {
345 result = (check) ? DcmDecimalString::checkStringValue(value, "3") : EC_Normal;
346 if (result.good())
347 result = BeamDoseSpecificationPoint.putOFStringArray(value);
348 }
349 return result;
350 }
351
352
setBeamDoseType(const OFString & value,const OFBool check)353 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setBeamDoseType(const OFString &value, const OFBool check)
354 {
355 OFCondition result = EC_IllegalCall;
356 if (!EmptyDefaultItem)
357 {
358 result = (check) ? DcmCodeString::checkStringValue(value, "1") : EC_Normal;
359 if (result.good())
360 result = BeamDoseType.putOFStringArray(value);
361 }
362 return result;
363 }
364
365
setBeamMeterset(const OFString & value,const OFBool check)366 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setBeamMeterset(const OFString &value, const OFBool check)
367 {
368 OFCondition result = EC_IllegalCall;
369 if (!EmptyDefaultItem)
370 {
371 result = (check) ? DcmDecimalString::checkStringValue(value, "1") : EC_Normal;
372 if (result.good())
373 result = BeamMeterset.putOFStringArray(value);
374 }
375 return result;
376 }
377
378
setReferencedBeamNumber(const OFString & value,const OFBool check)379 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setReferencedBeamNumber(const OFString &value, const OFBool check)
380 {
381 OFCondition result = EC_IllegalCall;
382 if (!EmptyDefaultItem)
383 {
384 result = (check) ? DcmIntegerString::checkStringValue(value, "1") : EC_Normal;
385 if (result.good())
386 result = ReferencedBeamNumber.putOFStringArray(value);
387 }
388 return result;
389 }
390
391
setReferencedDoseReferenceUID(const OFString & value,const OFBool check)392 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item::setReferencedDoseReferenceUID(const OFString &value, const OFBool check)
393 {
394 OFCondition result = EC_IllegalCall;
395 if (!EmptyDefaultItem)
396 {
397 result = (check) ? DcmUniqueIdentifier::checkStringValue(value, "1") : EC_Normal;
398 if (result.good())
399 result = ReferencedDoseReferenceUID.putOFStringArray(value);
400 }
401 return result;
402 }
403
404
405 // --- sequence class ---
406
DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule(const OFBool emptyDefaultSequence)407 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule(const OFBool emptyDefaultSequence)
408 : EmptyDefaultSequence(emptyDefaultSequence),
409 SequenceOfItems(),
410 CurrentItem(),
411 EmptyItem(OFTrue /*emptyDefaultItem*/)
412 {
413 CurrentItem = SequenceOfItems.end();
414 }
415
416
DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule(const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule & copy)417 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule(const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule ©)
418 : EmptyDefaultSequence(copy.EmptyDefaultSequence),
419 SequenceOfItems(),
420 CurrentItem(),
421 EmptyItem(OFTrue /*emptyDefaultItem*/)
422 {
423 /* create a copy of the internal sequence of items */
424 Item *item = NULL;
425 OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
426 const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
427 while (current != last)
428 {
429 item = new Item(**current);
430 if (item != NULL)
431 {
432 SequenceOfItems.push_back(item);
433 } else {
434 /* memory exhausted, there is nothing we can do about it */
435 break;
436 }
437 ++current;
438 }
439 CurrentItem = SequenceOfItems.begin();
440 }
441
442
operator =(const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule & copy)443 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::operator=(const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule ©)
444 {
445 if (this != ©)
446 {
447 clear();
448 EmptyDefaultSequence = copy.EmptyDefaultSequence;
449 /* create a copy of the internal sequence of items */
450 Item *item = NULL;
451 OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
452 const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
453 while (current != last)
454 {
455 item = new Item(**current);
456 if (item != NULL)
457 {
458 SequenceOfItems.push_back(item);
459 } else {
460 /* memory exhausted, there is nothing we can do about it */
461 break;
462 }
463 ++current;
464 }
465 CurrentItem = SequenceOfItems.begin();
466 }
467 return *this;
468 }
469
470
~DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule()471 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::~DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule()
472 {
473 clear();
474 }
475
476
clear()477 void DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::clear()
478 {
479 if (!EmptyDefaultSequence)
480 {
481 CurrentItem = SequenceOfItems.begin();
482 const OFListConstIterator(Item *) last = SequenceOfItems.end();
483 /* delete all items and free memory */
484 while (CurrentItem != last)
485 {
486 delete (*CurrentItem);
487 CurrentItem = SequenceOfItems.erase(CurrentItem);
488 }
489 /* make sure that the list is empty */
490 SequenceOfItems.clear();
491 CurrentItem = SequenceOfItems.end();
492 }
493 }
494
495
isEmpty()496 OFBool DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::isEmpty()
497 {
498 return SequenceOfItems.empty();
499 }
500
501
isValid() const502 OFBool DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::isValid() const
503 {
504 return !EmptyDefaultSequence;
505 }
506
507
getNumberOfItems() const508 size_t DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getNumberOfItems() const
509 {
510 return SequenceOfItems.size();
511 }
512
513
gotoFirstItem()514 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::gotoFirstItem()
515 {
516 OFCondition result = EC_IllegalCall;
517 if (!SequenceOfItems.empty())
518 {
519 CurrentItem = SequenceOfItems.begin();
520 result = EC_Normal;
521 }
522 return result;
523 }
524
525
gotoNextItem()526 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::gotoNextItem()
527 {
528 OFCondition result = EC_IllegalCall;
529 if (CurrentItem != SequenceOfItems.end())
530 {
531 ++CurrentItem;
532 result = EC_Normal;
533 }
534 return result;
535 }
536
537
gotoItem(const size_t num,OFListIterator (Item *)& iterator)538 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::gotoItem(const size_t num, OFListIterator(Item *) &iterator)
539 {
540 OFCondition result = EC_IllegalCall;
541 if (!SequenceOfItems.empty())
542 {
543 size_t idx = num + 1;
544 iterator = SequenceOfItems.begin();
545 const OFListConstIterator(Item *) last = SequenceOfItems.end();
546 while ((--idx > 0) && (iterator != last))
547 ++iterator;
548 /* specified list item found? */
549 if ((idx == 0) && (iterator != last))
550 result = EC_Normal;
551 else
552 result = EC_IllegalParameter;
553 }
554 return result;
555 }
556
557
gotoItem(const size_t num,OFListConstIterator (Item *)& iterator) const558 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::gotoItem(const size_t num, OFListConstIterator(Item *) &iterator) const
559 {
560 OFCondition result = EC_IllegalCall;
561 if (!SequenceOfItems.empty())
562 {
563 size_t idx = num + 1;
564 iterator = SequenceOfItems.begin();
565 const OFListConstIterator(Item *) last = SequenceOfItems.end();
566 while ((--idx > 0) && (iterator != last))
567 ++iterator;
568 /* specified list item found? */
569 if ((idx == 0) && (iterator != last))
570 result = EC_Normal;
571 else
572 result = EC_IllegalParameter;
573 }
574 return result;
575 }
576
577
gotoItem(const size_t num)578 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::gotoItem(const size_t num)
579 {
580 return gotoItem(num, CurrentItem);
581 }
582
583
getCurrentItem(Item * & item) const584 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getCurrentItem(Item *&item) const
585 {
586 OFCondition result = EC_IllegalCall;
587 if (CurrentItem != SequenceOfItems.end())
588 {
589 item = *CurrentItem;
590 result = EC_Normal;
591 }
592 return result;
593 }
594
595
getCurrentItem()596 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getCurrentItem()
597 {
598 if (CurrentItem != SequenceOfItems.end())
599 return **CurrentItem;
600 else
601 return EmptyItem;
602 }
603
604
getCurrentItem() const605 const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getCurrentItem() const
606 {
607 if (CurrentItem != SequenceOfItems.end())
608 return **CurrentItem;
609 else
610 return EmptyItem;
611 }
612
613
getItem(const size_t num,Item * & item)614 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getItem(const size_t num, Item *&item)
615 {
616 OFListIterator(Item *) iterator;
617 OFCondition result = gotoItem(num, iterator);
618 if (result.good())
619 item = *iterator;
620 return result;
621 }
622
623
getItem(const size_t num)624 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getItem(const size_t num)
625 {
626 OFListIterator(Item *) iterator;
627 if (gotoItem(num, iterator).good())
628 return **iterator;
629 else
630 return EmptyItem;
631 }
632
633
getItem(const size_t num) const634 const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::getItem(const size_t num) const
635 {
636 OFListConstIterator(Item *) iterator;
637 if (gotoItem(num, iterator).good())
638 return **iterator;
639 else
640 return EmptyItem;
641 }
642
643
operator [](const size_t num)644 DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::operator[](const size_t num)
645 {
646 return getItem(num);
647 }
648
649
operator [](const size_t num) const650 const DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::Item &DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::operator[](const size_t num) const
651 {
652 return getItem(num);
653 }
654
655
addItem(Item * & item)656 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::addItem(Item *&item)
657 {
658 OFCondition result = EC_IllegalCall;
659 if (!EmptyDefaultSequence)
660 {
661 item = new Item();
662 if (item != NULL)
663 {
664 SequenceOfItems.push_back(item);
665 result = EC_Normal;
666 } else
667 result = EC_MemoryExhausted;
668 }
669 return result;
670 }
671
672
insertItem(const size_t pos,Item * & item)673 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::insertItem(const size_t pos, Item *&item)
674 {
675 OFCondition result = EC_IllegalCall;
676 if (!EmptyDefaultSequence)
677 {
678 OFListIterator(Item *) iterator;
679 result = gotoItem(pos, iterator);
680 if (result.good())
681 {
682 item = new Item();
683 if (item != NULL)
684 {
685 SequenceOfItems.insert(iterator, 1, item);
686 result = EC_Normal;
687 } else
688 result = EC_MemoryExhausted;
689 } else
690 result = addItem(item);
691 }
692 return result;
693 }
694
695
removeItem(const size_t pos)696 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::removeItem(const size_t pos)
697 {
698 OFCondition result = EC_IllegalCall;
699 if (!EmptyDefaultSequence)
700 {
701 OFListIterator(Item *) iterator;
702 if (gotoItem(pos, iterator).good())
703 {
704 delete *iterator;
705 iterator = SequenceOfItems.erase(iterator);
706 result = EC_Normal;
707 } else
708 result = EC_IllegalParameter;
709 }
710 return result;
711 }
712
713
read(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)714 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::read(DcmItem &dataset,
715 const OFString &card,
716 const OFString &type,
717 const char *moduleName)
718 {
719 OFCondition result = EC_IllegalCall;
720 if (!EmptyDefaultSequence)
721 {
722 /* re-initialize object */
723 clear();
724 /* retrieve sequence element from dataset */
725 DcmSequenceOfItems *sequence;
726 result = dataset.findAndGetSequence(DCM_ReferencedBeamSequence, sequence);
727 if (sequence != NULL)
728 {
729 if (checkElementValue(*sequence, card, type, result, moduleName))
730 {
731 DcmStack stack;
732 OFBool first = OFTrue;
733 /* iterate over all sequence items */
734 while (result.good() && sequence->nextObject(stack, first /*intoSub*/).good())
735 {
736 DcmItem *ditem = OFstatic_cast(DcmItem *, stack.top());
737 if (ditem != NULL)
738 {
739 Item *item = new Item();
740 if (item != NULL)
741 {
742 result = item->read(*ditem);
743 if (result.good())
744 {
745 /* append new item to the end of the list */
746 SequenceOfItems.push_back(item);
747 first = OFFalse;
748 }
749 } else
750 result = EC_MemoryExhausted;
751 } else
752 result = EC_CorruptedData;
753 }
754 }
755 } else {
756 DcmSequenceOfItems element(DCM_ReferencedBeamSequence);
757 checkElementValue(element, card, type, result, moduleName);
758 }
759 }
760 return result;
761 }
762
763
write(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)764 OFCondition DRTReferencedBeamSequenceInRTGeneralTreatmentRecordModule::write(DcmItem &dataset,
765 const OFString &card,
766 const OFString &type,
767 const char *moduleName)
768 {
769 OFCondition result = EC_IllegalCall;
770 if (!EmptyDefaultSequence)
771 {
772 result = EC_MemoryExhausted;
773 DcmSequenceOfItems *sequence = new DcmSequenceOfItems(DCM_ReferencedBeamSequence);
774 if (sequence != NULL)
775 {
776 result = EC_Normal;
777 /* an empty optional sequence is not written */
778 if ((type == "2") || !SequenceOfItems.empty())
779 {
780 OFListIterator(Item *) iterator = SequenceOfItems.begin();
781 const OFListConstIterator(Item *) last = SequenceOfItems.end();
782 /* iterate over all sequence items */
783 while (result.good() && (iterator != last))
784 {
785 DcmItem *item = new DcmItem();
786 if (item != NULL)
787 {
788 /* append new item to the end of the sequence */
789 result = sequence->append(item);
790 if (result.good())
791 {
792 result = (*iterator)->write(*item);
793 ++iterator;
794 } else
795 delete item;
796 } else
797 result = EC_MemoryExhausted;
798 }
799 if (result.good())
800 {
801 /* insert sequence element into the dataset */
802 result = dataset.insert(sequence, OFTrue /*replaceOld*/);
803 }
804 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
805 checkElementValue(*sequence, card, type, result, moduleName);
806 if (result.good())
807 {
808 /* forget reference to sequence object (avoid deletion below) */
809 sequence = NULL;
810 }
811 }
812 else if (type == "1")
813 {
814 /* empty type 1 sequence not allowed */
815 result = RT_EC_InvalidValue;
816 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
817 checkElementValue(*sequence, card, type, result, moduleName);
818 }
819 /* delete sequence (if not inserted into the dataset) */
820 delete sequence;
821 }
822 }
823 return result;
824 }
825
826
827 // end of source file
828