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 DRTContributingEquipmentSequence
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/drtces.h"
18 
19 
20 // --- item class ---
21 
Item(const OFBool emptyDefaultItem)22 DRTContributingEquipmentSequence::Item::Item(const OFBool emptyDefaultItem)
23   : EmptyDefaultItem(emptyDefaultItem),
24     ContributionDateTime(DCM_ContributionDateTime),
25     ContributionDescription(DCM_ContributionDescription),
26     DateOfLastCalibration(DCM_DateOfLastCalibration),
27     DeviceSerialNumber(DCM_DeviceSerialNumber),
28     InstitutionAddress(DCM_InstitutionAddress),
29     InstitutionName(DCM_InstitutionName),
30     InstitutionalDepartmentName(DCM_InstitutionalDepartmentName),
31     Manufacturer(DCM_Manufacturer),
32     ManufacturerModelName(DCM_ManufacturerModelName),
33     OperatorIdentificationSequence(emptyDefaultItem /*emptyDefaultSequence*/),
34     OperatorsName(DCM_OperatorsName),
35     PurposeOfReferenceCodeSequence(emptyDefaultItem /*emptyDefaultSequence*/),
36     SoftwareVersions(DCM_SoftwareVersions),
37     SpatialResolution(DCM_SpatialResolution),
38     StationName(DCM_StationName),
39     TimeOfLastCalibration(DCM_TimeOfLastCalibration)
40 {
41 }
42 
43 
Item(const Item & copy)44 DRTContributingEquipmentSequence::Item::Item(const Item &copy)
45   : EmptyDefaultItem(copy.EmptyDefaultItem),
46     ContributionDateTime(copy.ContributionDateTime),
47     ContributionDescription(copy.ContributionDescription),
48     DateOfLastCalibration(copy.DateOfLastCalibration),
49     DeviceSerialNumber(copy.DeviceSerialNumber),
50     InstitutionAddress(copy.InstitutionAddress),
51     InstitutionName(copy.InstitutionName),
52     InstitutionalDepartmentName(copy.InstitutionalDepartmentName),
53     Manufacturer(copy.Manufacturer),
54     ManufacturerModelName(copy.ManufacturerModelName),
55     OperatorIdentificationSequence(copy.OperatorIdentificationSequence),
56     OperatorsName(copy.OperatorsName),
57     PurposeOfReferenceCodeSequence(copy.PurposeOfReferenceCodeSequence),
58     SoftwareVersions(copy.SoftwareVersions),
59     SpatialResolution(copy.SpatialResolution),
60     StationName(copy.StationName),
61     TimeOfLastCalibration(copy.TimeOfLastCalibration)
62 {
63 }
64 
65 
~Item()66 DRTContributingEquipmentSequence::Item::~Item()
67 {
68 }
69 
70 
operator =(const Item & copy)71 DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::Item::operator=(const Item &copy)
72 {
73     if (this != &copy)
74     {
75         EmptyDefaultItem = copy.EmptyDefaultItem;
76         ContributionDateTime = copy.ContributionDateTime;
77         ContributionDescription = copy.ContributionDescription;
78         DateOfLastCalibration = copy.DateOfLastCalibration;
79         DeviceSerialNumber = copy.DeviceSerialNumber;
80         InstitutionAddress = copy.InstitutionAddress;
81         InstitutionName = copy.InstitutionName;
82         InstitutionalDepartmentName = copy.InstitutionalDepartmentName;
83         Manufacturer = copy.Manufacturer;
84         ManufacturerModelName = copy.ManufacturerModelName;
85         OperatorIdentificationSequence = copy.OperatorIdentificationSequence;
86         OperatorsName = copy.OperatorsName;
87         PurposeOfReferenceCodeSequence = copy.PurposeOfReferenceCodeSequence;
88         SoftwareVersions = copy.SoftwareVersions;
89         SpatialResolution = copy.SpatialResolution;
90         StationName = copy.StationName;
91         TimeOfLastCalibration = copy.TimeOfLastCalibration;
92     }
93     return *this;
94 }
95 
96 
clear()97 void DRTContributingEquipmentSequence::Item::clear()
98 {
99     if (!EmptyDefaultItem)
100     {
101         /* clear all DICOM attributes */
102         PurposeOfReferenceCodeSequence.clear();
103         Manufacturer.clear();
104         InstitutionName.clear();
105         InstitutionAddress.clear();
106         StationName.clear();
107         InstitutionalDepartmentName.clear();
108         OperatorsName.clear();
109         OperatorIdentificationSequence.clear();
110         ManufacturerModelName.clear();
111         DeviceSerialNumber.clear();
112         SoftwareVersions.clear();
113         SpatialResolution.clear();
114         DateOfLastCalibration.clear();
115         TimeOfLastCalibration.clear();
116         ContributionDateTime.clear();
117         ContributionDescription.clear();
118     }
119 }
120 
121 
isEmpty()122 OFBool DRTContributingEquipmentSequence::Item::isEmpty()
123 {
124     return PurposeOfReferenceCodeSequence.isEmpty() &&
125            Manufacturer.isEmpty() &&
126            InstitutionName.isEmpty() &&
127            InstitutionAddress.isEmpty() &&
128            StationName.isEmpty() &&
129            InstitutionalDepartmentName.isEmpty() &&
130            OperatorsName.isEmpty() &&
131            OperatorIdentificationSequence.isEmpty() &&
132            ManufacturerModelName.isEmpty() &&
133            DeviceSerialNumber.isEmpty() &&
134            SoftwareVersions.isEmpty() &&
135            SpatialResolution.isEmpty() &&
136            DateOfLastCalibration.isEmpty() &&
137            TimeOfLastCalibration.isEmpty() &&
138            ContributionDateTime.isEmpty() &&
139            ContributionDescription.isEmpty();
140 }
141 
142 
isValid() const143 OFBool DRTContributingEquipmentSequence::Item::isValid() const
144 {
145     return !EmptyDefaultItem;
146 }
147 
148 
read(DcmItem & item)149 OFCondition DRTContributingEquipmentSequence::Item::read(DcmItem &item)
150 {
151     OFCondition result = EC_IllegalCall;
152     if (!EmptyDefaultItem)
153     {
154         /* re-initialize object */
155         clear();
156         PurposeOfReferenceCodeSequence.read(item, "1-n", "1", "ContributingEquipmentSequence");
157         getAndCheckElementFromDataset(item, Manufacturer, "1", "1", "ContributingEquipmentSequence");
158         getAndCheckElementFromDataset(item, InstitutionName, "1", "3", "ContributingEquipmentSequence");
159         getAndCheckElementFromDataset(item, InstitutionAddress, "1", "3", "ContributingEquipmentSequence");
160         getAndCheckElementFromDataset(item, StationName, "1", "3", "ContributingEquipmentSequence");
161         getAndCheckElementFromDataset(item, InstitutionalDepartmentName, "1", "3", "ContributingEquipmentSequence");
162         getAndCheckElementFromDataset(item, OperatorsName, "1-n", "3", "ContributingEquipmentSequence");
163         OperatorIdentificationSequence.read(item, "1-n", "3", "ContributingEquipmentSequence");
164         getAndCheckElementFromDataset(item, ManufacturerModelName, "1", "3", "ContributingEquipmentSequence");
165         getAndCheckElementFromDataset(item, DeviceSerialNumber, "1", "3", "ContributingEquipmentSequence");
166         getAndCheckElementFromDataset(item, SoftwareVersions, "1-n", "3", "ContributingEquipmentSequence");
167         getAndCheckElementFromDataset(item, SpatialResolution, "1", "3", "ContributingEquipmentSequence");
168         getAndCheckElementFromDataset(item, DateOfLastCalibration, "1-n", "3", "ContributingEquipmentSequence");
169         getAndCheckElementFromDataset(item, TimeOfLastCalibration, "1-n", "3", "ContributingEquipmentSequence");
170         getAndCheckElementFromDataset(item, ContributionDateTime, "1", "3", "ContributingEquipmentSequence");
171         getAndCheckElementFromDataset(item, ContributionDescription, "1", "3", "ContributingEquipmentSequence");
172         result = EC_Normal;
173     }
174     return result;
175 }
176 
177 
write(DcmItem & item)178 OFCondition DRTContributingEquipmentSequence::Item::write(DcmItem &item)
179 {
180     OFCondition result = EC_IllegalCall;
181     if (!EmptyDefaultItem)
182     {
183         result = EC_Normal;
184         if (result.good()) result = PurposeOfReferenceCodeSequence.write(item, "1-n", "1", "ContributingEquipmentSequence");
185         addElementToDataset(result, item, new DcmLongString(Manufacturer), "1", "1", "ContributingEquipmentSequence");
186         addElementToDataset(result, item, new DcmLongString(InstitutionName), "1", "3", "ContributingEquipmentSequence");
187         addElementToDataset(result, item, new DcmShortText(InstitutionAddress), "1", "3", "ContributingEquipmentSequence");
188         addElementToDataset(result, item, new DcmShortString(StationName), "1", "3", "ContributingEquipmentSequence");
189         addElementToDataset(result, item, new DcmLongString(InstitutionalDepartmentName), "1", "3", "ContributingEquipmentSequence");
190         addElementToDataset(result, item, new DcmPersonName(OperatorsName), "1-n", "3", "ContributingEquipmentSequence");
191         if (result.good()) result = OperatorIdentificationSequence.write(item, "1-n", "3", "ContributingEquipmentSequence");
192         addElementToDataset(result, item, new DcmLongString(ManufacturerModelName), "1", "3", "ContributingEquipmentSequence");
193         addElementToDataset(result, item, new DcmLongString(DeviceSerialNumber), "1", "3", "ContributingEquipmentSequence");
194         addElementToDataset(result, item, new DcmLongString(SoftwareVersions), "1-n", "3", "ContributingEquipmentSequence");
195         addElementToDataset(result, item, new DcmDecimalString(SpatialResolution), "1", "3", "ContributingEquipmentSequence");
196         addElementToDataset(result, item, new DcmDate(DateOfLastCalibration), "1-n", "3", "ContributingEquipmentSequence");
197         addElementToDataset(result, item, new DcmTime(TimeOfLastCalibration), "1-n", "3", "ContributingEquipmentSequence");
198         addElementToDataset(result, item, new DcmDateTime(ContributionDateTime), "1", "3", "ContributingEquipmentSequence");
199         addElementToDataset(result, item, new DcmShortText(ContributionDescription), "1", "3", "ContributingEquipmentSequence");
200     }
201     return result;
202 }
203 
204 
getContributionDateTime(OFString & value,const signed long pos) const205 OFCondition DRTContributingEquipmentSequence::Item::getContributionDateTime(OFString &value, const signed long pos) const
206 {
207     if (EmptyDefaultItem)
208         return EC_IllegalCall;
209     else
210         return getStringValueFromElement(ContributionDateTime, value, pos);
211 }
212 
213 
getContributionDescription(OFString & value,const signed long pos) const214 OFCondition DRTContributingEquipmentSequence::Item::getContributionDescription(OFString &value, const signed long pos) const
215 {
216     if (EmptyDefaultItem)
217         return EC_IllegalCall;
218     else
219         return getStringValueFromElement(ContributionDescription, value, pos);
220 }
221 
222 
getDateOfLastCalibration(OFString & value,const signed long pos) const223 OFCondition DRTContributingEquipmentSequence::Item::getDateOfLastCalibration(OFString &value, const signed long pos) const
224 {
225     if (EmptyDefaultItem)
226         return EC_IllegalCall;
227     else
228         return getStringValueFromElement(DateOfLastCalibration, value, pos);
229 }
230 
231 
getDeviceSerialNumber(OFString & value,const signed long pos) const232 OFCondition DRTContributingEquipmentSequence::Item::getDeviceSerialNumber(OFString &value, const signed long pos) const
233 {
234     if (EmptyDefaultItem)
235         return EC_IllegalCall;
236     else
237         return getStringValueFromElement(DeviceSerialNumber, value, pos);
238 }
239 
240 
getInstitutionAddress(OFString & value,const signed long pos) const241 OFCondition DRTContributingEquipmentSequence::Item::getInstitutionAddress(OFString &value, const signed long pos) const
242 {
243     if (EmptyDefaultItem)
244         return EC_IllegalCall;
245     else
246         return getStringValueFromElement(InstitutionAddress, value, pos);
247 }
248 
249 
getInstitutionName(OFString & value,const signed long pos) const250 OFCondition DRTContributingEquipmentSequence::Item::getInstitutionName(OFString &value, const signed long pos) const
251 {
252     if (EmptyDefaultItem)
253         return EC_IllegalCall;
254     else
255         return getStringValueFromElement(InstitutionName, value, pos);
256 }
257 
258 
getInstitutionalDepartmentName(OFString & value,const signed long pos) const259 OFCondition DRTContributingEquipmentSequence::Item::getInstitutionalDepartmentName(OFString &value, const signed long pos) const
260 {
261     if (EmptyDefaultItem)
262         return EC_IllegalCall;
263     else
264         return getStringValueFromElement(InstitutionalDepartmentName, value, pos);
265 }
266 
267 
getManufacturer(OFString & value,const signed long pos) const268 OFCondition DRTContributingEquipmentSequence::Item::getManufacturer(OFString &value, const signed long pos) const
269 {
270     if (EmptyDefaultItem)
271         return EC_IllegalCall;
272     else
273         return getStringValueFromElement(Manufacturer, value, pos);
274 }
275 
276 
getManufacturerModelName(OFString & value,const signed long pos) const277 OFCondition DRTContributingEquipmentSequence::Item::getManufacturerModelName(OFString &value, const signed long pos) const
278 {
279     if (EmptyDefaultItem)
280         return EC_IllegalCall;
281     else
282         return getStringValueFromElement(ManufacturerModelName, value, pos);
283 }
284 
285 
getOperatorsName(OFString & value,const signed long pos) const286 OFCondition DRTContributingEquipmentSequence::Item::getOperatorsName(OFString &value, const signed long pos) const
287 {
288     if (EmptyDefaultItem)
289         return EC_IllegalCall;
290     else
291         return getStringValueFromElement(OperatorsName, value, pos);
292 }
293 
294 
getSoftwareVersions(OFString & value,const signed long pos) const295 OFCondition DRTContributingEquipmentSequence::Item::getSoftwareVersions(OFString &value, const signed long pos) const
296 {
297     if (EmptyDefaultItem)
298         return EC_IllegalCall;
299     else
300         return getStringValueFromElement(SoftwareVersions, value, pos);
301 }
302 
303 
getSpatialResolution(OFString & value,const signed long pos) const304 OFCondition DRTContributingEquipmentSequence::Item::getSpatialResolution(OFString &value, const signed long pos) const
305 {
306     if (EmptyDefaultItem)
307         return EC_IllegalCall;
308     else
309         return getStringValueFromElement(SpatialResolution, value, pos);
310 }
311 
312 
getSpatialResolution(Float64 & value,const unsigned long pos) const313 OFCondition DRTContributingEquipmentSequence::Item::getSpatialResolution(Float64 &value, const unsigned long pos) const
314 {
315     if (EmptyDefaultItem)
316         return EC_IllegalCall;
317     else
318         return OFconst_cast(DcmDecimalString &, SpatialResolution).getFloat64(value, pos);
319 }
320 
321 
getStationName(OFString & value,const signed long pos) const322 OFCondition DRTContributingEquipmentSequence::Item::getStationName(OFString &value, const signed long pos) const
323 {
324     if (EmptyDefaultItem)
325         return EC_IllegalCall;
326     else
327         return getStringValueFromElement(StationName, value, pos);
328 }
329 
330 
getTimeOfLastCalibration(OFString & value,const signed long pos) const331 OFCondition DRTContributingEquipmentSequence::Item::getTimeOfLastCalibration(OFString &value, const signed long pos) const
332 {
333     if (EmptyDefaultItem)
334         return EC_IllegalCall;
335     else
336         return getStringValueFromElement(TimeOfLastCalibration, value, pos);
337 }
338 
339 
setContributionDateTime(const OFString & value,const OFBool check)340 OFCondition DRTContributingEquipmentSequence::Item::setContributionDateTime(const OFString &value, const OFBool check)
341 {
342     OFCondition result = EC_IllegalCall;
343     if (!EmptyDefaultItem)
344     {
345         result = (check) ? DcmDateTime::checkStringValue(value, "1") : EC_Normal;
346         if (result.good())
347             result = ContributionDateTime.putOFStringArray(value);
348     }
349     return result;
350 }
351 
352 
setContributionDescription(const OFString & value,const OFBool check)353 OFCondition DRTContributingEquipmentSequence::Item::setContributionDescription(const OFString &value, const OFBool check)
354 {
355     OFCondition result = EC_IllegalCall;
356     if (!EmptyDefaultItem)
357     {
358         result = (check) ? DcmShortText::checkStringValue(value) : EC_Normal;
359         if (result.good())
360             result = ContributionDescription.putOFStringArray(value);
361     }
362     return result;
363 }
364 
365 
setDateOfLastCalibration(const OFString & value,const OFBool check)366 OFCondition DRTContributingEquipmentSequence::Item::setDateOfLastCalibration(const OFString &value, const OFBool check)
367 {
368     OFCondition result = EC_IllegalCall;
369     if (!EmptyDefaultItem)
370     {
371         result = (check) ? DcmDate::checkStringValue(value, "1-n") : EC_Normal;
372         if (result.good())
373             result = DateOfLastCalibration.putOFStringArray(value);
374     }
375     return result;
376 }
377 
378 
setDeviceSerialNumber(const OFString & value,const OFBool check)379 OFCondition DRTContributingEquipmentSequence::Item::setDeviceSerialNumber(const OFString &value, const OFBool check)
380 {
381     OFCondition result = EC_IllegalCall;
382     if (!EmptyDefaultItem)
383     {
384         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
385         if (result.good())
386             result = DeviceSerialNumber.putOFStringArray(value);
387     }
388     return result;
389 }
390 
391 
setInstitutionAddress(const OFString & value,const OFBool check)392 OFCondition DRTContributingEquipmentSequence::Item::setInstitutionAddress(const OFString &value, const OFBool check)
393 {
394     OFCondition result = EC_IllegalCall;
395     if (!EmptyDefaultItem)
396     {
397         result = (check) ? DcmShortText::checkStringValue(value) : EC_Normal;
398         if (result.good())
399             result = InstitutionAddress.putOFStringArray(value);
400     }
401     return result;
402 }
403 
404 
setInstitutionName(const OFString & value,const OFBool check)405 OFCondition DRTContributingEquipmentSequence::Item::setInstitutionName(const OFString &value, const OFBool check)
406 {
407     OFCondition result = EC_IllegalCall;
408     if (!EmptyDefaultItem)
409     {
410         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
411         if (result.good())
412             result = InstitutionName.putOFStringArray(value);
413     }
414     return result;
415 }
416 
417 
setInstitutionalDepartmentName(const OFString & value,const OFBool check)418 OFCondition DRTContributingEquipmentSequence::Item::setInstitutionalDepartmentName(const OFString &value, const OFBool check)
419 {
420     OFCondition result = EC_IllegalCall;
421     if (!EmptyDefaultItem)
422     {
423         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
424         if (result.good())
425             result = InstitutionalDepartmentName.putOFStringArray(value);
426     }
427     return result;
428 }
429 
430 
setManufacturer(const OFString & value,const OFBool check)431 OFCondition DRTContributingEquipmentSequence::Item::setManufacturer(const OFString &value, const OFBool check)
432 {
433     OFCondition result = EC_IllegalCall;
434     if (!EmptyDefaultItem)
435     {
436         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
437         if (result.good())
438             result = Manufacturer.putOFStringArray(value);
439     }
440     return result;
441 }
442 
443 
setManufacturerModelName(const OFString & value,const OFBool check)444 OFCondition DRTContributingEquipmentSequence::Item::setManufacturerModelName(const OFString &value, const OFBool check)
445 {
446     OFCondition result = EC_IllegalCall;
447     if (!EmptyDefaultItem)
448     {
449         result = (check) ? DcmLongString::checkStringValue(value, "1") : EC_Normal;
450         if (result.good())
451             result = ManufacturerModelName.putOFStringArray(value);
452     }
453     return result;
454 }
455 
456 
setOperatorsName(const OFString & value,const OFBool check)457 OFCondition DRTContributingEquipmentSequence::Item::setOperatorsName(const OFString &value, const OFBool check)
458 {
459     OFCondition result = EC_IllegalCall;
460     if (!EmptyDefaultItem)
461     {
462         result = (check) ? DcmPersonName::checkStringValue(value, "1-n") : EC_Normal;
463         if (result.good())
464             result = OperatorsName.putOFStringArray(value);
465     }
466     return result;
467 }
468 
469 
setSoftwareVersions(const OFString & value,const OFBool check)470 OFCondition DRTContributingEquipmentSequence::Item::setSoftwareVersions(const OFString &value, const OFBool check)
471 {
472     OFCondition result = EC_IllegalCall;
473     if (!EmptyDefaultItem)
474     {
475         result = (check) ? DcmLongString::checkStringValue(value, "1-n") : EC_Normal;
476         if (result.good())
477             result = SoftwareVersions.putOFStringArray(value);
478     }
479     return result;
480 }
481 
482 
setSpatialResolution(const OFString & value,const OFBool check)483 OFCondition DRTContributingEquipmentSequence::Item::setSpatialResolution(const OFString &value, const OFBool check)
484 {
485     OFCondition result = EC_IllegalCall;
486     if (!EmptyDefaultItem)
487     {
488         result = (check) ? DcmDecimalString::checkStringValue(value, "1") : EC_Normal;
489         if (result.good())
490             result = SpatialResolution.putOFStringArray(value);
491     }
492     return result;
493 }
494 
495 
setStationName(const OFString & value,const OFBool check)496 OFCondition DRTContributingEquipmentSequence::Item::setStationName(const OFString &value, const OFBool check)
497 {
498     OFCondition result = EC_IllegalCall;
499     if (!EmptyDefaultItem)
500     {
501         result = (check) ? DcmShortString::checkStringValue(value, "1") : EC_Normal;
502         if (result.good())
503             result = StationName.putOFStringArray(value);
504     }
505     return result;
506 }
507 
508 
setTimeOfLastCalibration(const OFString & value,const OFBool check)509 OFCondition DRTContributingEquipmentSequence::Item::setTimeOfLastCalibration(const OFString &value, const OFBool check)
510 {
511     OFCondition result = EC_IllegalCall;
512     if (!EmptyDefaultItem)
513     {
514         result = (check) ? DcmTime::checkStringValue(value, "1-n") : EC_Normal;
515         if (result.good())
516             result = TimeOfLastCalibration.putOFStringArray(value);
517     }
518     return result;
519 }
520 
521 
522 // --- sequence class ---
523 
DRTContributingEquipmentSequence(const OFBool emptyDefaultSequence)524 DRTContributingEquipmentSequence::DRTContributingEquipmentSequence(const OFBool emptyDefaultSequence)
525   : EmptyDefaultSequence(emptyDefaultSequence),
526     SequenceOfItems(),
527     CurrentItem(),
528     EmptyItem(OFTrue /*emptyDefaultItem*/)
529 {
530     CurrentItem = SequenceOfItems.end();
531 }
532 
533 
DRTContributingEquipmentSequence(const DRTContributingEquipmentSequence & copy)534 DRTContributingEquipmentSequence::DRTContributingEquipmentSequence(const DRTContributingEquipmentSequence &copy)
535   : EmptyDefaultSequence(copy.EmptyDefaultSequence),
536     SequenceOfItems(),
537     CurrentItem(),
538     EmptyItem(OFTrue /*emptyDefaultItem*/)
539 {
540     /* create a copy of the internal sequence of items */
541     Item *item = NULL;
542     OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
543     const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
544     while (current != last)
545     {
546         item = new Item(**current);
547         if (item != NULL)
548         {
549             SequenceOfItems.push_back(item);
550         } else {
551             /* memory exhausted, there is nothing we can do about it */
552             break;
553         }
554         ++current;
555     }
556     CurrentItem = SequenceOfItems.begin();
557 }
558 
559 
operator =(const DRTContributingEquipmentSequence & copy)560 DRTContributingEquipmentSequence &DRTContributingEquipmentSequence::operator=(const DRTContributingEquipmentSequence &copy)
561 {
562     if (this != &copy)
563     {
564         clear();
565         EmptyDefaultSequence = copy.EmptyDefaultSequence;
566         /* create a copy of the internal sequence of items */
567         Item *item = NULL;
568         OFListConstIterator(Item *) current = copy.SequenceOfItems.begin();
569         const OFListConstIterator(Item *) last = copy.SequenceOfItems.end();
570         while (current != last)
571         {
572             item = new Item(**current);
573             if (item != NULL)
574             {
575                 SequenceOfItems.push_back(item);
576             } else {
577                 /* memory exhausted, there is nothing we can do about it */
578                 break;
579             }
580             ++current;
581         }
582         CurrentItem = SequenceOfItems.begin();
583     }
584     return *this;
585 }
586 
587 
~DRTContributingEquipmentSequence()588 DRTContributingEquipmentSequence::~DRTContributingEquipmentSequence()
589 {
590     clear();
591 }
592 
593 
clear()594 void DRTContributingEquipmentSequence::clear()
595 {
596     if (!EmptyDefaultSequence)
597     {
598         CurrentItem = SequenceOfItems.begin();
599         const OFListConstIterator(Item *) last = SequenceOfItems.end();
600         /* delete all items and free memory */
601         while (CurrentItem != last)
602         {
603             delete (*CurrentItem);
604             CurrentItem = SequenceOfItems.erase(CurrentItem);
605         }
606         /* make sure that the list is empty */
607         SequenceOfItems.clear();
608         CurrentItem = SequenceOfItems.end();
609     }
610 }
611 
612 
isEmpty()613 OFBool DRTContributingEquipmentSequence::isEmpty()
614 {
615     return SequenceOfItems.empty();
616 }
617 
618 
isValid() const619 OFBool DRTContributingEquipmentSequence::isValid() const
620 {
621     return !EmptyDefaultSequence;
622 }
623 
624 
getNumberOfItems() const625 size_t DRTContributingEquipmentSequence::getNumberOfItems() const
626 {
627     return SequenceOfItems.size();
628 }
629 
630 
gotoFirstItem()631 OFCondition DRTContributingEquipmentSequence::gotoFirstItem()
632 {
633     OFCondition result = EC_IllegalCall;
634     if (!SequenceOfItems.empty())
635     {
636         CurrentItem = SequenceOfItems.begin();
637         result = EC_Normal;
638     }
639     return result;
640 }
641 
642 
gotoNextItem()643 OFCondition DRTContributingEquipmentSequence::gotoNextItem()
644 {
645     OFCondition result = EC_IllegalCall;
646     if (CurrentItem != SequenceOfItems.end())
647     {
648         ++CurrentItem;
649         result = EC_Normal;
650     }
651     return result;
652 }
653 
654 
gotoItem(const size_t num,OFListIterator (Item *)& iterator)655 OFCondition DRTContributingEquipmentSequence::gotoItem(const size_t num, OFListIterator(Item *) &iterator)
656 {
657     OFCondition result = EC_IllegalCall;
658     if (!SequenceOfItems.empty())
659     {
660         size_t idx = num + 1;
661         iterator = SequenceOfItems.begin();
662         const OFListConstIterator(Item *) last = SequenceOfItems.end();
663         while ((--idx > 0) && (iterator != last))
664             ++iterator;
665         /* specified list item found? */
666         if ((idx == 0) && (iterator != last))
667             result = EC_Normal;
668         else
669             result = EC_IllegalParameter;
670     }
671     return result;
672 }
673 
674 
gotoItem(const size_t num,OFListConstIterator (Item *)& iterator) const675 OFCondition DRTContributingEquipmentSequence::gotoItem(const size_t num, OFListConstIterator(Item *) &iterator) const
676 {
677     OFCondition result = EC_IllegalCall;
678     if (!SequenceOfItems.empty())
679     {
680         size_t idx = num + 1;
681         iterator = SequenceOfItems.begin();
682         const OFListConstIterator(Item *) last = SequenceOfItems.end();
683         while ((--idx > 0) && (iterator != last))
684             ++iterator;
685         /* specified list item found? */
686         if ((idx == 0) && (iterator != last))
687             result = EC_Normal;
688         else
689             result = EC_IllegalParameter;
690     }
691     return result;
692 }
693 
694 
gotoItem(const size_t num)695 OFCondition DRTContributingEquipmentSequence::gotoItem(const size_t num)
696 {
697     return gotoItem(num, CurrentItem);
698 }
699 
700 
getCurrentItem(Item * & item) const701 OFCondition DRTContributingEquipmentSequence::getCurrentItem(Item *&item) const
702 {
703     OFCondition result = EC_IllegalCall;
704     if (CurrentItem != SequenceOfItems.end())
705     {
706         item = *CurrentItem;
707         result = EC_Normal;
708     }
709     return result;
710 }
711 
712 
getCurrentItem()713 DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::getCurrentItem()
714 {
715     if (CurrentItem != SequenceOfItems.end())
716         return **CurrentItem;
717     else
718         return EmptyItem;
719 }
720 
721 
getCurrentItem() const722 const DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::getCurrentItem() const
723 {
724     if (CurrentItem != SequenceOfItems.end())
725         return **CurrentItem;
726     else
727         return EmptyItem;
728 }
729 
730 
getItem(const size_t num,Item * & item)731 OFCondition DRTContributingEquipmentSequence::getItem(const size_t num, Item *&item)
732 {
733     OFListIterator(Item *) iterator;
734     OFCondition result = gotoItem(num, iterator);
735     if (result.good())
736         item = *iterator;
737     return result;
738 }
739 
740 
getItem(const size_t num)741 DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::getItem(const size_t num)
742 {
743     OFListIterator(Item *) iterator;
744     if (gotoItem(num, iterator).good())
745         return **iterator;
746     else
747         return EmptyItem;
748 }
749 
750 
getItem(const size_t num) const751 const DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::getItem(const size_t num) const
752 {
753     OFListConstIterator(Item *) iterator;
754     if (gotoItem(num, iterator).good())
755         return **iterator;
756     else
757         return EmptyItem;
758 }
759 
760 
operator [](const size_t num)761 DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::operator[](const size_t num)
762 {
763     return getItem(num);
764 }
765 
766 
operator [](const size_t num) const767 const DRTContributingEquipmentSequence::Item &DRTContributingEquipmentSequence::operator[](const size_t num) const
768 {
769     return getItem(num);
770 }
771 
772 
addItem(Item * & item)773 OFCondition DRTContributingEquipmentSequence::addItem(Item *&item)
774 {
775     OFCondition result = EC_IllegalCall;
776     if (!EmptyDefaultSequence)
777     {
778         item = new Item();
779         if (item != NULL)
780         {
781             SequenceOfItems.push_back(item);
782             result = EC_Normal;
783         } else
784             result = EC_MemoryExhausted;
785     }
786     return result;
787 }
788 
789 
insertItem(const size_t pos,Item * & item)790 OFCondition DRTContributingEquipmentSequence::insertItem(const size_t pos, Item *&item)
791 {
792     OFCondition result = EC_IllegalCall;
793     if (!EmptyDefaultSequence)
794     {
795         OFListIterator(Item *) iterator;
796         result = gotoItem(pos, iterator);
797         if (result.good())
798         {
799             item = new Item();
800             if (item != NULL)
801             {
802                 SequenceOfItems.insert(iterator, 1, item);
803                 result = EC_Normal;
804             } else
805                 result = EC_MemoryExhausted;
806         } else
807             result = addItem(item);
808     }
809     return result;
810 }
811 
812 
removeItem(const size_t pos)813 OFCondition DRTContributingEquipmentSequence::removeItem(const size_t pos)
814 {
815     OFCondition result = EC_IllegalCall;
816     if (!EmptyDefaultSequence)
817     {
818         OFListIterator(Item *) iterator;
819         if (gotoItem(pos, iterator).good())
820         {
821             delete *iterator;
822             iterator = SequenceOfItems.erase(iterator);
823             result = EC_Normal;
824         } else
825             result = EC_IllegalParameter;
826     }
827     return result;
828 }
829 
830 
read(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)831 OFCondition DRTContributingEquipmentSequence::read(DcmItem &dataset,
832                                                    const OFString &card,
833                                                    const OFString &type,
834                                                    const char *moduleName)
835 {
836     OFCondition result = EC_IllegalCall;
837     if (!EmptyDefaultSequence)
838     {
839         /* re-initialize object */
840         clear();
841         /* retrieve sequence element from dataset */
842         DcmSequenceOfItems *sequence;
843         result = dataset.findAndGetSequence(DCM_ContributingEquipmentSequence, sequence);
844         if (sequence != NULL)
845         {
846             if (checkElementValue(*sequence, card, type, result, moduleName))
847             {
848                 DcmStack stack;
849                 OFBool first = OFTrue;
850                 /* iterate over all sequence items */
851                 while (result.good() && sequence->nextObject(stack, first /*intoSub*/).good())
852                 {
853                     DcmItem *ditem = OFstatic_cast(DcmItem *, stack.top());
854                     if (ditem != NULL)
855                     {
856                         Item *item = new Item();
857                         if (item != NULL)
858                         {
859                             result = item->read(*ditem);
860                             if (result.good())
861                             {
862                                 /* append new item to the end of the list */
863                                 SequenceOfItems.push_back(item);
864                                 first = OFFalse;
865                             }
866                         } else
867                             result = EC_MemoryExhausted;
868                     } else
869                         result = EC_CorruptedData;
870                 }
871             }
872         } else {
873             DcmSequenceOfItems element(DCM_ContributingEquipmentSequence);
874             checkElementValue(element, card, type, result, moduleName);
875         }
876     }
877     return result;
878 }
879 
880 
write(DcmItem & dataset,const OFString & card,const OFString & type,const char * moduleName)881 OFCondition DRTContributingEquipmentSequence::write(DcmItem &dataset,
882                                                     const OFString &card,
883                                                     const OFString &type,
884                                                     const char *moduleName)
885 {
886     OFCondition result = EC_IllegalCall;
887     if (!EmptyDefaultSequence)
888     {
889         result = EC_MemoryExhausted;
890         DcmSequenceOfItems *sequence = new DcmSequenceOfItems(DCM_ContributingEquipmentSequence);
891         if (sequence != NULL)
892         {
893             result = EC_Normal;
894             /* an empty optional sequence is not written */
895             if ((type == "2") || !SequenceOfItems.empty())
896             {
897                 OFListIterator(Item *) iterator = SequenceOfItems.begin();
898                 const OFListConstIterator(Item *) last = SequenceOfItems.end();
899                 /* iterate over all sequence items */
900                 while (result.good() && (iterator != last))
901                 {
902                     DcmItem *item = new DcmItem();
903                     if (item != NULL)
904                     {
905                         /* append new item to the end of the sequence */
906                         result = sequence->append(item);
907                         if (result.good())
908                         {
909                             result = (*iterator)->write(*item);
910                             ++iterator;
911                         } else
912                             delete item;
913                     } else
914                         result = EC_MemoryExhausted;
915                 }
916                 if (result.good())
917                 {
918                     /* insert sequence element into the dataset */
919                     result = dataset.insert(sequence, OFTrue /*replaceOld*/);
920                 }
921                 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
922                     checkElementValue(*sequence, card, type, result, moduleName);
923                 if (result.good())
924                 {
925                     /* forget reference to sequence object (avoid deletion below) */
926                     sequence = NULL;
927                 }
928             }
929             else if (type == "1")
930             {
931                 /* empty type 1 sequence not allowed */
932                 result = RT_EC_InvalidValue;
933                 if (DCM_dcmrtLogger.isEnabledFor(OFLogger::WARN_LOG_LEVEL))
934                     checkElementValue(*sequence, card, type, result, moduleName);
935             }
936             /* delete sequence (if not inserted into the dataset) */
937             delete sequence;
938         }
939     }
940     return result;
941 }
942 
943 
944 // end of source file
945