1 #ifndef __creaImageIODicomNodeComparators_h_INCLUDED__
2 #define __creaImageIODicomNodeComparators_h_INCLUDED__
12 //=====================================================================
13 struct DicomNodeComparator
15 virtual ~DicomNodeComparator() {}
16 virtual bool operator() (DicomNode* const & x, DicomNode* const & y) = 0;
18 //=====================================================================
20 //=====================================================================
21 struct DicomNodeComparatorWithOrder : public DicomNodeComparator
23 DicomNodeComparatorWithOrder(bool reverse_order = false)
24 : mReverseOrder(reverse_order) {}
25 virtual ~DicomNodeComparatorWithOrder() {}
28 virtual bool compare(DicomNode* const &, DicomNode* const &) = 0;
30 virtual bool operator() (DicomNode* const & x, DicomNode* const & y)
32 if (mReverseOrder) return this->compare(y,x);
33 return this->compare(x,y);
38 //=====================================================================
40 //=====================================================================
41 class LexicographicalDicomNodeComparator : public DicomNodeComparator
44 LexicographicalDicomNodeComparator(const std::string& name)
46 ~LexicographicalDicomNodeComparator() {}
48 const std::string& GetName() const { return mName; }
49 void SetName(const std::string& s) { mName = s; }
50 void Clear() { mDicomNodeComparator.clear(); }
51 void DeleteComparators()
53 std::vector<DicomNodeComparator*>::iterator i;
54 for (i =mDicomNodeComparator.begin();
55 i!=mDicomNodeComparator.end();
60 mDicomNodeComparator.clear();
62 void Add(DicomNodeComparator* c) { mDicomNodeComparator.push_back(c); }
64 bool operator() (DicomNode* const & x, DicomNode * const & y);
68 std::vector<DicomNodeComparator*> mDicomNodeComparator;
70 //=====================================================================
73 //===================================================================
74 struct DicomNodeIntFieldComparator :
75 public DicomNodeComparatorWithOrder
77 DicomNodeIntFieldComparator(const std::string& key,
80 DicomNodeComparatorWithOrder(reverse_order),
83 virtual bool compare(DicomNode* const & x, DicomNode* const & y);
88 //===================================================================
90 //===================================================================
91 struct DicomNodeFloatFieldComparator :
92 public DicomNodeComparatorWithOrder
94 DicomNodeFloatFieldComparator(const std::string& key,
97 DicomNodeComparatorWithOrder(reverse_order),
101 virtual bool compare(DicomNode* const & x, DicomNode* const & y);
106 //===================================================================
108 //===================================================================
109 struct DicomNodeStringFieldComparator :
110 public DicomNodeComparatorWithOrder
112 DicomNodeStringFieldComparator(const std::string& key,
115 DicomNodeComparatorWithOrder(reverse_order),
119 virtual bool compare(DicomNode* const & x, DicomNode* const & y);
124 //===================================================================
126 //===================================================================
127 #define INT_FIELD_COMP(NAME,FIELD) \
128 struct DicomNode##NAME##Comparator : \
129 public DicomNodeIntFieldComparator \
131 DicomNode##NAME##Comparator(bool o = false) : \
132 DicomNodeIntFieldComparator(FIELD,o) \
135 //==================================================================
137 //===================================================================
138 #define FLOAT_FIELD_COMP(NAME,FIELD) \
139 struct DicomNode##NAME##Comparator : \
140 public DicomNodeFloatFieldComparator \
142 DicomNode##NAME##Comparator(bool o = false) : \
143 DicomNodeFloatFieldComparator(FIELD,o) \
146 //===================================================================
148 //===================================================================
149 #define STRING_FIELD_COMP(NAME,FIELD) \
150 struct DicomNode##NAME##Comparator : \
151 public DicomNodeStringFieldComparator \
153 DicomNode##NAME##Comparator(bool o = false) : \
154 DicomNodeStringFieldComparator(FIELD,o) \
157 //===================================================================
161 //===================================================================
162 // Patient comparators
163 STRING_FIELD_COMP(PatientName,"A0010_0010");
164 STRING_FIELD_COMP(PatientSex, "A0010_0040");
165 STRING_FIELD_COMP(PatientBirthday, "A0010_0030");
166 //===================================================================
168 //===================================================================
170 STRING_FIELD_COMP(StudyDate,"A0008_0020");
171 STRING_FIELD_COMP(StudyDescription,"A0008_1030");
172 //===================================================================
174 //===================================================================
175 // Series comparators
176 STRING_FIELD_COMP(Modality,"A0008_0060");
177 STRING_FIELD_COMP(SeriesDescription,"A0008_103E");
178 STRING_FIELD_COMP(SeriesDate,"A0008_0021");
179 //===================================================================
181 //===================================================================
183 INT_FIELD_COMP(ImageNumber,"A0020_0013");
184 FLOAT_FIELD_COMP(SliceLocation,"A0020_1041");
185 STRING_FIELD_COMP(FullFileName,"FullFileName");
186 //===================================================================
189 } // namespace creaImageIO
193 #endif // #ifndef __creaImageIOComparators_h_INCLUDED__