vtk-dicom  0.8.14
vtkDICOMDataElement.h
1 /*=========================================================================
2 
3  Program: DICOM for VTK
4 
5  Copyright (c) 2012-2022 David Gobbi
6  All rights reserved.
7  See Copyright.txt or http://dgobbi.github.io/bsd3.txt for details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
14 #ifndef vtkDICOMDataElement_h
15 #define vtkDICOMDataElement_h
16 
17 #include "vtkDICOMModule.h" // For export macro
18 #include "vtkDICOMTag.h"
19 #include "vtkDICOMValue.h"
20 
22 
29 class VTKDICOM_EXPORT vtkDICOMDataElement
30 {
31 public:
33  vtkDICOMDataElement() : Tag(), Value(), Next(0), Prev(0) {}
34  vtkDICOMDataElement(const vtkDICOMTag& t, const vtkDICOMValue &v) :
35  Tag(t), Value(v), Next(0), Prev(0) {}
37 
39  vtkDICOMTag GetTag() const { return this->Tag; }
41 
43  vtkDICOMVR GetVR() const { return this->Value.GetVR(); }
45 
47  bool IsPerInstance() const { return (this->Value.GetMultiplexData() != 0); }
49 
51  int GetNumberOfInstances() const {
52  return static_cast<int>(this->Value.GetNumberOfValues()); }
53 
55  const vtkDICOMValue& GetValue() const { return this->Value; }
56 
58  const vtkDICOMValue& GetValue(int i) const {
59  const vtkDICOMValue *vptr = this->Value.GetMultiplexData();
60  return (vptr == 0 ? this->Value : vptr[i]); }
62 
64  bool operator==(const vtkDICOMDataElement& o) const {
65  return (this->Tag == o.Tag && this->Value == o.Value); }
66 
67  bool operator!=(const vtkDICOMDataElement& o) const {
68  return (this->Tag != o.Tag || this->Value != o.Value); }
70 
71 private:
72  vtkDICOMTag Tag;
73  vtkDICOMValue Value;
74 
75  // for storing elements in a linked list
76  vtkDICOMDataElement *Next;
77  vtkDICOMDataElement *Prev;
78 
79  // the classes that need to manipulate lists of elements
80  friend class vtkDICOMDataElementIterator;
81  friend class vtkDICOMMetaData;
82  friend class vtkDICOMItem;
83 };
84 
86 class VTKDICOM_EXPORT vtkDICOMDataElementIterator
87 {
88 public:
90  vtkDICOMDataElementIterator() : Pointer(0) {}
92 
94  vtkDICOMDataElementIterator& operator++() {
95  if (this->Pointer) { this->Pointer = this->Pointer->Next; }
96  return *this; }
97 
98  vtkDICOMDataElementIterator operator++(int) {
99  const vtkDICOMDataElement *ptr = this->Pointer;
100  if (ptr) { this->Pointer = this->Pointer->Next; }
101  return vtkDICOMDataElementIterator(ptr); }
102 
103  vtkDICOMDataElementIterator& operator--() {
104  if (this->Pointer) { this->Pointer = this->Pointer->Prev; }
105  return *this; }
106 
107  vtkDICOMDataElementIterator operator--(int) {
108  const vtkDICOMDataElement *ptr = this->Pointer;
109  if (ptr) { this->Pointer = this->Pointer->Prev; }
110  return vtkDICOMDataElementIterator(ptr); }
112 
114  const vtkDICOMDataElement *operator->() const { return this->Pointer; }
115  const vtkDICOMDataElement& operator*() const { return *this->Pointer; }
117 
119  bool operator==(const vtkDICOMDataElementIterator& it) const {
120  return (this->Pointer == it.Pointer); }
121 
122  bool operator!=(const vtkDICOMDataElementIterator& it) const {
123  return (this->Pointer != it.Pointer); }
125 
126 private:
128  this->Pointer = ptr; }
129 
130  const vtkDICOMDataElement *Pointer;
131 
132  friend class vtkDICOMMetaData;
133  friend class vtkDICOMItem;
134 };
135 
136 VTKDICOM_EXPORT ostream& operator<<(ostream& os, const vtkDICOMDataElement& v);
137 
138 #endif /* vtkDICOMDataElement_h */
139 // VTK-HeaderTest-Exclude: vtkDICOMDataElement.h
A const iterator for a vtkDataElement list.
Definition: vtkDICOMDataElement.h:87
A data element in a DICOM data set.
Definition: vtkDICOMDataElement.h:30
vtkDICOMVR GetVR() const
Get the VR for this data element.
Definition: vtkDICOMDataElement.h:43
int GetNumberOfInstances() const
Get the number of value instances in this data element.
Definition: vtkDICOMDataElement.h:51
const vtkDICOMValue & GetValue(int i) const
Get value instance i, if the data element is multi-valued.
Definition: vtkDICOMDataElement.h:58
const vtkDICOMValue & GetValue() const
Get the value of the data element, if not multi-valued.
Definition: vtkDICOMDataElement.h:55
An item in a DICOM sequence (type SQ).
Definition: vtkDICOMItem.h:34
A container class for DICOM metadata.
Definition: vtkDICOMMetaData.h:44
A (group,element) identifier tag for DICOM attributes.
Definition: vtkDICOMTag.h:23
VRs (Value Representations)
Definition: vtkDICOMVR.h:22
A class to store attribute values for DICOM metadata.
Definition: vtkDICOMValue.h:51