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 &copy)
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 &copy)
59 {
60     if (this != &copy)
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 &copy)
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 &copy)
444 {
445     if (this != &copy)
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