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 ©)
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 ©)
56 {
57 if (this != ©)
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 ©)
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 ©)
400 {
401 if (this != ©)
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