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