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