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 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule
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/drttms9.h"
18 
19 
20 // --- item class ---
21 
Item(const OFBool emptyDefaultItem)22 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::Item(const OFBool emptyDefaultItem)
23   : EmptyDefaultItem(emptyDefaultItem),
24     DeviceSerialNumber(DCM_DeviceSerialNumber),
25     InstitutionAddress(DCM_InstitutionAddress),
26     InstitutionName(DCM_InstitutionName),
27     InstitutionalDepartmentName(DCM_InstitutionalDepartmentName),
28     Manufacturer(DCM_Manufacturer),
29     ManufacturerModelName(DCM_ManufacturerModelName),
30     TreatmentMachineName(DCM_TreatmentMachineName)
31 {
32 }
33 
34 
Item(const Item & copy)35 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::Item(const Item &copy)
36   : EmptyDefaultItem(copy.EmptyDefaultItem),
37     DeviceSerialNumber(copy.DeviceSerialNumber),
38     InstitutionAddress(copy.InstitutionAddress),
39     InstitutionName(copy.InstitutionName),
40     InstitutionalDepartmentName(copy.InstitutionalDepartmentName),
41     Manufacturer(copy.Manufacturer),
42     ManufacturerModelName(copy.ManufacturerModelName),
43     TreatmentMachineName(copy.TreatmentMachineName)
44 {
45 }
46 
47 
~Item()48 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::~Item()
49 {
50 }
51 
52 
operator =(const Item & copy)53 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::operator=(const Item &copy)
54 {
55     if (this != &copy)
56     {
57         EmptyDefaultItem = copy.EmptyDefaultItem;
58         DeviceSerialNumber = copy.DeviceSerialNumber;
59         InstitutionAddress = copy.InstitutionAddress;
60         InstitutionName = copy.InstitutionName;
61         InstitutionalDepartmentName = copy.InstitutionalDepartmentName;
62         Manufacturer = copy.Manufacturer;
63         ManufacturerModelName = copy.ManufacturerModelName;
64         TreatmentMachineName = copy.TreatmentMachineName;
65     }
66     return *this;
67 }
68 
69 
clear()70 void DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::clear()
71 {
72     if (!EmptyDefaultItem)
73     {
74         /* clear all DICOM attributes */
75         TreatmentMachineName.clear();
76         Manufacturer.clear();
77         InstitutionName.clear();
78         InstitutionAddress.clear();
79         InstitutionalDepartmentName.clear();
80         ManufacturerModelName.clear();
81         DeviceSerialNumber.clear();
82     }
83 }
84 
85 
isEmpty()86 OFBool DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::isEmpty()
87 {
88     return TreatmentMachineName.isEmpty() &&
89            Manufacturer.isEmpty() &&
90            InstitutionName.isEmpty() &&
91            InstitutionAddress.isEmpty() &&
92            InstitutionalDepartmentName.isEmpty() &&
93            ManufacturerModelName.isEmpty() &&
94            DeviceSerialNumber.isEmpty();
95 }
96 
97 
isValid() const98 OFBool DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::isValid() const
99 {
100     return !EmptyDefaultItem;
101 }
102 
103 
read(DcmItem & item)104 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::read(DcmItem &item)
105 {
106     OFCondition result = EC_IllegalCall;
107     if (!EmptyDefaultItem)
108     {
109         /* re-initialize object */
110         clear();
111         getAndCheckElementFromDataset(item, TreatmentMachineName, "1", "2", "TreatmentMachineSequence");
112         getAndCheckElementFromDataset(item, Manufacturer, "1", "3", "TreatmentMachineSequence");
113         getAndCheckElementFromDataset(item, InstitutionName, "1", "3", "TreatmentMachineSequence");
114         getAndCheckElementFromDataset(item, InstitutionAddress, "1", "3", "TreatmentMachineSequence");
115         getAndCheckElementFromDataset(item, InstitutionalDepartmentName, "1", "3", "TreatmentMachineSequence");
116         getAndCheckElementFromDataset(item, ManufacturerModelName, "1", "3", "TreatmentMachineSequence");
117         getAndCheckElementFromDataset(item, DeviceSerialNumber, "1", "3", "TreatmentMachineSequence");
118         result = EC_Normal;
119     }
120     return result;
121 }
122 
123 
write(DcmItem & item)124 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::write(DcmItem &item)
125 {
126     OFCondition result = EC_IllegalCall;
127     if (!EmptyDefaultItem)
128     {
129         result = EC_Normal;
130         addElementToDataset(result, item, new DcmShortString(TreatmentMachineName), "1", "2", "TreatmentMachineSequence");
131         addElementToDataset(result, item, new DcmLongString(Manufacturer), "1", "3", "TreatmentMachineSequence");
132         addElementToDataset(result, item, new DcmLongString(InstitutionName), "1", "3", "TreatmentMachineSequence");
133         addElementToDataset(result, item, new DcmShortText(InstitutionAddress), "1", "3", "TreatmentMachineSequence");
134         addElementToDataset(result, item, new DcmLongString(InstitutionalDepartmentName), "1", "3", "TreatmentMachineSequence");
135         addElementToDataset(result, item, new DcmLongString(ManufacturerModelName), "1", "3", "TreatmentMachineSequence");
136         addElementToDataset(result, item, new DcmLongString(DeviceSerialNumber), "1", "3", "TreatmentMachineSequence");
137     }
138     return result;
139 }
140 
141 
getDeviceSerialNumber(OFString & value,const signed long pos) const142 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getDeviceSerialNumber(OFString &value, const signed long pos) const
143 {
144     if (EmptyDefaultItem)
145         return EC_IllegalCall;
146     else
147         return getStringValueFromElement(DeviceSerialNumber, value, pos);
148 }
149 
150 
getInstitutionAddress(OFString & value,const signed long pos) const151 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getInstitutionAddress(OFString &value, const signed long pos) const
152 {
153     if (EmptyDefaultItem)
154         return EC_IllegalCall;
155     else
156         return getStringValueFromElement(InstitutionAddress, value, pos);
157 }
158 
159 
getInstitutionName(OFString & value,const signed long pos) const160 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getInstitutionName(OFString &value, const signed long pos) const
161 {
162     if (EmptyDefaultItem)
163         return EC_IllegalCall;
164     else
165         return getStringValueFromElement(InstitutionName, value, pos);
166 }
167 
168 
getInstitutionalDepartmentName(OFString & value,const signed long pos) const169 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getInstitutionalDepartmentName(OFString &value, const signed long pos) const
170 {
171     if (EmptyDefaultItem)
172         return EC_IllegalCall;
173     else
174         return getStringValueFromElement(InstitutionalDepartmentName, value, pos);
175 }
176 
177 
getManufacturer(OFString & value,const signed long pos) const178 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getManufacturer(OFString &value, const signed long pos) const
179 {
180     if (EmptyDefaultItem)
181         return EC_IllegalCall;
182     else
183         return getStringValueFromElement(Manufacturer, value, pos);
184 }
185 
186 
getManufacturerModelName(OFString & value,const signed long pos) const187 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getManufacturerModelName(OFString &value, const signed long pos) const
188 {
189     if (EmptyDefaultItem)
190         return EC_IllegalCall;
191     else
192         return getStringValueFromElement(ManufacturerModelName, value, pos);
193 }
194 
195 
getTreatmentMachineName(OFString & value,const signed long pos) const196 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::getTreatmentMachineName(OFString &value, const signed long pos) const
197 {
198     if (EmptyDefaultItem)
199         return EC_IllegalCall;
200     else
201         return getStringValueFromElement(TreatmentMachineName, value, pos);
202 }
203 
204 
setDeviceSerialNumber(const OFString & value,const OFBool check)205 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setDeviceSerialNumber(const OFString &value, const OFBool check)
206 {
207     OFCondition result = EC_IllegalCall;
208     if (!EmptyDefaultItem)
209     {
210         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
211         if (result.good())
212             result = DeviceSerialNumber.putOFStringArray(value);
213     }
214     return result;
215 }
216 
217 
setInstitutionAddress(const OFString & value,const OFBool check)218 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setInstitutionAddress(const OFString &value, const OFBool check)
219 {
220     OFCondition result = EC_IllegalCall;
221     if (!EmptyDefaultItem)
222     {
223         result = (check) ? DcmShortText::checkStringValue(value) : EC_Normal;
224         if (result.good())
225             result = InstitutionAddress.putOFStringArray(value);
226     }
227     return result;
228 }
229 
230 
setInstitutionName(const OFString & value,const OFBool check)231 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setInstitutionName(const OFString &value, const OFBool check)
232 {
233     OFCondition result = EC_IllegalCall;
234     if (!EmptyDefaultItem)
235     {
236         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
237         if (result.good())
238             result = InstitutionName.putOFStringArray(value);
239     }
240     return result;
241 }
242 
243 
setInstitutionalDepartmentName(const OFString & value,const OFBool check)244 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setInstitutionalDepartmentName(const OFString &value, const OFBool check)
245 {
246     OFCondition result = EC_IllegalCall;
247     if (!EmptyDefaultItem)
248     {
249         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
250         if (result.good())
251             result = InstitutionalDepartmentName.putOFStringArray(value);
252     }
253     return result;
254 }
255 
256 
setManufacturer(const OFString & value,const OFBool check)257 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setManufacturer(const OFString &value, const OFBool check)
258 {
259     OFCondition result = EC_IllegalCall;
260     if (!EmptyDefaultItem)
261     {
262         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
263         if (result.good())
264             result = Manufacturer.putOFStringArray(value);
265     }
266     return result;
267 }
268 
269 
setManufacturerModelName(const OFString & value,const OFBool check)270 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setManufacturerModelName(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 = ManufacturerModelName.putOFStringArray(value);
278     }
279     return result;
280 }
281 
282 
setTreatmentMachineName(const OFString & value,const OFBool check)283 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item::setTreatmentMachineName(const OFString &value, const OFBool check)
284 {
285     OFCondition result = EC_IllegalCall;
286     if (!EmptyDefaultItem)
287     {
288         result = (check) ? DcmShortString::checkStringValue(value, "1") : EC_Normal;
289         if (result.good())
290             result = TreatmentMachineName.putOFStringArray(value);
291     }
292     return result;
293 }
294 
295 
296 // --- sequence class ---
297 
DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule(const OFBool emptyDefaultSequence)298 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule(const OFBool emptyDefaultSequence)
299   : EmptyDefaultSequence(emptyDefaultSequence),
300     SequenceOfItems(),
301     CurrentItem(),
302     EmptyItem(OFTrue /*emptyDefaultItem*/)
303 {
304     CurrentItem = SequenceOfItems.end();
305 }
306 
307 
DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule(const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule & copy)308 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule(const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule &copy)
309   : EmptyDefaultSequence(copy.EmptyDefaultSequence),
310     SequenceOfItems(),
311     CurrentItem(),
312     EmptyItem(OFTrue /*emptyDefaultItem*/)
313 {
314     /* create a copy of the internal sequence of items */
315     Item *item = NULL;
316     OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
317     const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
318     while (current != last)
319     {
320         item = new Item(**current);
321         if (item != NULL)
322         {
323             SequenceOfItems.push_back(item);
324         } else {
325             /* memory exhausted, there is nothing we can do about it */
326             break;
327         }
328         ++current;
329     }
330     CurrentItem = SequenceOfItems.begin();
331 }
332 
333 
operator =(const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule & copy)334 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::operator=(const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule &copy)
335 {
336     if (this != &copy)
337     {
338         clear();
339         EmptyDefaultSequence = copy.EmptyDefaultSequence;
340         /* create a copy of the internal sequence of items */
341         Item *item = NULL;
342         OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
343         const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
344         while (current != last)
345         {
346             item = new Item(**current);
347             if (item != NULL)
348             {
349                 SequenceOfItems.push_back(item);
350             } else {
351                 /* memory exhausted, there is nothing we can do about it */
352                 break;
353             }
354             ++current;
355         }
356         CurrentItem = SequenceOfItems.begin();
357     }
358     return *this;
359 }
360 
361 
~DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule()362 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::~DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule()
363 {
364     clear();
365 }
366 
367 
clear()368 void DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::clear()
369 {
370     if (!EmptyDefaultSequence)
371     {
372         CurrentItem = SequenceOfItems.begin();
373         const OFListConstIterator(Item *) last = SequenceOfItems.end();
374         /* delete all items and free memory */
375         while (CurrentItem != last)
376         {
377             delete (*CurrentItem);
378             CurrentItem = SequenceOfItems.erase(CurrentItem);
379         }
380         /* make sure that the list is empty */
381         SequenceOfItems.clear();
382         CurrentItem = SequenceOfItems.end();
383     }
384 }
385 
386 
isEmpty()387 OFBool DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::isEmpty()
388 {
389     return SequenceOfItems.empty();
390 }
391 
392 
isValid() const393 OFBool DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::isValid() const
394 {
395     return !EmptyDefaultSequence;
396 }
397 
398 
getNumberOfItems() const399 size_t DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getNumberOfItems() const
400 {
401     return SequenceOfItems.size();
402 }
403 
404 
gotoFirstItem()405 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::gotoFirstItem()
406 {
407     OFCondition result = EC_IllegalCall;
408     if (!SequenceOfItems.empty())
409     {
410         CurrentItem = SequenceOfItems.begin();
411         result = EC_Normal;
412     }
413     return result;
414 }
415 
416 
gotoNextItem()417 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::gotoNextItem()
418 {
419     OFCondition result = EC_IllegalCall;
420     if (CurrentItem != SequenceOfItems.end())
421     {
422         ++CurrentItem;
423         result = EC_Normal;
424     }
425     return result;
426 }
427 
428 
gotoItem(const size_t num,OFListIterator (Item *)& iterator)429 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::gotoItem(const size_t num, OFListIterator(Item *) &iterator)
430 {
431     OFCondition result = EC_IllegalCall;
432     if (!SequenceOfItems.empty())
433     {
434         size_t idx = num + 1;
435         iterator = SequenceOfItems.begin();
436         const OFListConstIterator(Item *) last = SequenceOfItems.end();
437         while ((--idx > 0) && (iterator != last))
438             ++iterator;
439         /* specified list item found? */
440         if ((idx == 0) && (iterator != last))
441             result = EC_Normal;
442         else
443             result = EC_IllegalParameter;
444     }
445     return result;
446 }
447 
448 
gotoItem(const size_t num,OFListConstIterator (Item *)& iterator) const449 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::gotoItem(const size_t num, OFListConstIterator(Item *) &iterator) const
450 {
451     OFCondition result = EC_IllegalCall;
452     if (!SequenceOfItems.empty())
453     {
454         size_t idx = num + 1;
455         iterator = SequenceOfItems.begin();
456         const OFListConstIterator(Item *) last = SequenceOfItems.end();
457         while ((--idx > 0) && (iterator != last))
458             ++iterator;
459         /* specified list item found? */
460         if ((idx == 0) && (iterator != last))
461             result = EC_Normal;
462         else
463             result = EC_IllegalParameter;
464     }
465     return result;
466 }
467 
468 
gotoItem(const size_t num)469 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::gotoItem(const size_t num)
470 {
471     return gotoItem(num, CurrentItem);
472 }
473 
474 
getCurrentItem(Item * & item) const475 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getCurrentItem(Item *&item) const
476 {
477     OFCondition result = EC_IllegalCall;
478     if (CurrentItem != SequenceOfItems.end())
479     {
480         item = *CurrentItem;
481         result = EC_Normal;
482     }
483     return result;
484 }
485 
486 
getCurrentItem()487 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getCurrentItem()
488 {
489     if (CurrentItem != SequenceOfItems.end())
490         return **CurrentItem;
491     else
492         return EmptyItem;
493 }
494 
495 
getCurrentItem() const496 const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getCurrentItem() const
497 {
498     if (CurrentItem != SequenceOfItems.end())
499         return **CurrentItem;
500     else
501         return EmptyItem;
502 }
503 
504 
getItem(const size_t num,Item * & item)505 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getItem(const size_t num, Item *&item)
506 {
507     OFListIterator(Item *) iterator;
508     OFCondition result = gotoItem(num, iterator);
509     if (result.good())
510         item = *iterator;
511     return result;
512 }
513 
514 
getItem(const size_t num)515 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getItem(const size_t num)
516 {
517     OFListIterator(Item *) iterator;
518     if (gotoItem(num, iterator).good())
519         return **iterator;
520     else
521         return EmptyItem;
522 }
523 
524 
getItem(const size_t num) const525 const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::getItem(const size_t num) const
526 {
527     OFListConstIterator(Item *) iterator;
528     if (gotoItem(num, iterator).good())
529         return **iterator;
530     else
531         return EmptyItem;
532 }
533 
534 
operator [](const size_t num)535 DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::operator[](const size_t num)
536 {
537     return getItem(num);
538 }
539 
540 
operator [](const size_t num) const541 const DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::Item &DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::operator[](const size_t num) const
542 {
543     return getItem(num);
544 }
545 
546 
addItem(Item * & item)547 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::addItem(Item *&item)
548 {
549     OFCondition result = EC_IllegalCall;
550     if (!EmptyDefaultSequence)
551     {
552         item = new Item();
553         if (item != NULL)
554         {
555             SequenceOfItems.push_back(item);
556             result = EC_Normal;
557         } else
558             result = EC_MemoryExhausted;
559     }
560     return result;
561 }
562 
563 
insertItem(const size_t pos,Item * & item)564 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::insertItem(const size_t pos, Item *&item)
565 {
566     OFCondition result = EC_IllegalCall;
567     if (!EmptyDefaultSequence)
568     {
569         OFListIterator(Item *) iterator;
570         result = gotoItem(pos, iterator);
571         if (result.good())
572         {
573             item = new Item();
574             if (item != NULL)
575             {
576                 SequenceOfItems.insert(iterator, 1, item);
577                 result = EC_Normal;
578             } else
579                 result = EC_MemoryExhausted;
580         } else
581             result = addItem(item);
582     }
583     return result;
584 }
585 
586 
removeItem(const size_t pos)587 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::removeItem(const size_t pos)
588 {
589     OFCondition result = EC_IllegalCall;
590     if (!EmptyDefaultSequence)
591     {
592         OFListIterator(Item *) iterator;
593         if (gotoItem(pos, iterator).good())
594         {
595             delete *iterator;
596             iterator = SequenceOfItems.erase(iterator);
597             result = EC_Normal;
598         } else
599             result = EC_IllegalParameter;
600     }
601     return result;
602 }
603 
604 
read(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)605 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::read(DcmItem &dataset,
606                                                                                const OFString &card,
607                                                                                const OFString &type,
608                                                                                const char *moduleName)
609 {
610     OFCondition result = EC_IllegalCall;
611     if (!EmptyDefaultSequence)
612     {
613         /* re-initialize object */
614         clear();
615         /* retrieve sequence element from dataset */
616         DcmSequenceOfItems *sequence;
617         result = dataset.findAndGetSequence(DCM_TreatmentMachineSequence, sequence);
618         if (sequence != NULL)
619         {
620             if (checkElementValue(*sequence, card, type, result, moduleName))
621             {
622                 DcmStack stack;
623                 OFBool first = OFTrue;
624                 /* iterate over all sequence items */
625                 while (result.good() && sequence->nextObject(stack, first /*intoSub*/).good())
626                 {
627                     DcmItem *ditem = OFstatic_cast(DcmItem *, stack.top());
628                     if (ditem != NULL)
629                     {
630                         Item *item = new Item();
631                         if (item != NULL)
632                         {
633                             result = item->read(*ditem);
634                             if (result.good())
635                             {
636                                 /* append new item to the end of the list */
637                                 SequenceOfItems.push_back(item);
638                                 first = OFFalse;
639                             }
640                         } else
641                             result = EC_MemoryExhausted;
642                     } else
643                         result = EC_CorruptedData;
644                 }
645             }
646         } else {
647             DcmSequenceOfItems element(DCM_TreatmentMachineSequence);
648             checkElementValue(element, card, type, result, moduleName);
649         }
650     }
651     return result;
652 }
653 
654 
write(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)655 OFCondition DRTTreatmentMachineSequenceInRTBrachyApplicationSetupsModule::write(DcmItem &dataset,
656                                                                                 const OFString &card,
657                                                                                 const OFString &type,
658                                                                                 const char *moduleName)
659 {
660     OFCondition result = EC_IllegalCall;
661     if (!EmptyDefaultSequence)
662     {
663         result = EC_MemoryExhausted;
664         DcmSequenceOfItems *sequence = new DcmSequenceOfItems(DCM_TreatmentMachineSequence);
665         if (sequence != NULL)
666         {
667             result = EC_Normal;
668             /* an empty optional sequence is not written */
669             if ((type == "2") || !SequenceOfItems.empty())
670             {
671                 OFListIterator(Item *) iterator = SequenceOfItems.begin();
672                 const OFListConstIterator(Item *) last = SequenceOfItems.end();
673                 /* iterate over all sequence items */
674                 while (result.good() && (iterator != last))
675                 {
676                     DcmItem *item = new DcmItem();
677                     if (item != NULL)
678                     {
679                         /* append new item to the end of the sequence */
680                         result = sequence->append(item);
681                         if (result.good())
682                         {
683                             result = (*iterator)->write(*item);
684                             ++iterator;
685                         } else
686                             delete item;
687                     } else
688                         result = EC_MemoryExhausted;
689                 }
690                 if (result.good())
691                 {
692                     /* insert sequence element into the dataset */
693                     result = dataset.insert(sequence, OFTrue /*replaceOld*/);
694                 }
695                 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
696                     checkElementValue(*sequence, card, type, result, moduleName);
697                 if (result.good())
698                 {
699                     /* forget reference to sequence object (avoid deletion below) */
700                     sequence = NULL;
701                 }
702             }
703             else if (type == "1")
704             {
705                 /* empty type 1 sequence not allowed */
706                 result = RT_EC_InvalidValue;
707                 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
708                     checkElementValue(*sequence, card, type, result, moduleName);
709             }
710             /* delete sequence (if not inserted into the dataset) */
711             delete sequence;
712         }
713     }
714     return result;
715 }
716 
717 
718 // end of source file
719