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 ©)
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 ©)
72 {
73 if (this != ©)
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 ©)
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 ©)
561 {
562 if (this != ©)
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