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