Mercurial > hg > orthanc
comparison OrthancFramework/Sources/DicomFormat/DicomMap.cpp @ 4982:40fd2a485a84
fix build for older compilers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 25 Apr 2022 18:25:46 +0200 |
parents | d0c34145320c |
children | 877bc3b96476 |
comparison
equal
deleted
inserted
replaced
4981:d0c34145320c | 4982:40fd2a485a84 |
---|---|
166 private: | 166 private: |
167 friend DicomMap; | 167 friend DicomMap; |
168 | 168 |
169 // we keep many "copies" of the same data to guarantee quick access to organized data | 169 // we keep many "copies" of the same data to guarantee quick access to organized data |
170 // and avoid rebuilding it all the time. | 170 // and avoid rebuilding it all the time. |
171 std::map<ResourceType, std::map<DicomTag, std::string> > mainDicomTagsByTag_; | 171 std::map<DicomTag, std::string> patientsMainDicomTagsByTag_; |
172 std::map<ResourceType, std::map<std::string, DicomTag2> > mainDicomTagsByName_; | 172 std::map<std::string, DicomTag2> patientsMainDicomTagsByName_; |
173 std::map<ResourceType, std::set<DicomTag> > mainDicomTagsByLevel_; | 173 std::set<DicomTag> patientsMainDicomTagsByLevel_; |
174 | |
175 std::map<DicomTag, std::string> studiesMainDicomTagsByTag_; | |
176 std::map<std::string, DicomTag2> studiesMainDicomTagsByName_; | |
177 std::set<DicomTag> studiesMainDicomTagsByLevel_; | |
178 | |
179 std::map<DicomTag, std::string> seriesMainDicomTagsByTag_; | |
180 std::map<std::string, DicomTag2> seriesMainDicomTagsByName_; | |
181 std::set<DicomTag> seriesMainDicomTagsByLevel_; | |
182 | |
183 std::map<DicomTag, std::string> instancesMainDicomTagsByTag_; | |
184 std::map<std::string, DicomTag2> instancesMainDicomTagsByName_; | |
185 std::set<DicomTag> instancesMainDicomTagsByLevel_; | |
186 | |
174 std::set<DicomTag> allMainDicomTags_; | 187 std::set<DicomTag> allMainDicomTags_; |
175 | 188 |
176 std::map<ResourceType, std::string> signatures_; | 189 std::map<ResourceType, std::string> signatures_; |
177 std::map<ResourceType, std::string> defaultSignatures_; | 190 std::map<ResourceType, std::string> defaultSignatures_; |
178 | 191 |
181 ResetDefaultMainDicomTags(); | 194 ResetDefaultMainDicomTags(); |
182 } | 195 } |
183 | 196 |
184 void ResetDefaultMainDicomTags() | 197 void ResetDefaultMainDicomTags() |
185 { | 198 { |
186 mainDicomTagsByTag_.clear(); | 199 patientsMainDicomTagsByTag_.clear(); |
187 mainDicomTagsByName_.clear(); | 200 patientsMainDicomTagsByName_.clear(); |
188 mainDicomTagsByLevel_.clear(); | 201 patientsMainDicomTagsByLevel_.clear(); |
202 | |
203 studiesMainDicomTagsByTag_.clear(); | |
204 studiesMainDicomTagsByName_.clear(); | |
205 studiesMainDicomTagsByLevel_.clear(); | |
206 | |
207 seriesMainDicomTagsByTag_.clear(); | |
208 seriesMainDicomTagsByName_.clear(); | |
209 seriesMainDicomTagsByLevel_.clear(); | |
210 | |
211 instancesMainDicomTagsByTag_.clear(); | |
212 instancesMainDicomTagsByName_.clear(); | |
213 instancesMainDicomTagsByLevel_.clear(); | |
214 | |
189 allMainDicomTags_.clear(); | 215 allMainDicomTags_.clear(); |
190 | 216 |
191 // by default, initialize with the previous static list (up to 1.10.0) | 217 // by default, initialize with the previous static list (up to 1.10.0) |
192 LoadDefaultMainDicomTags(ResourceType_Patient); | 218 LoadDefaultMainDicomTags(ResourceType_Patient); |
193 LoadDefaultMainDicomTags(ResourceType_Study); | 219 LoadDefaultMainDicomTags(ResourceType_Study); |
214 return signatureText; | 240 return signatureText; |
215 } | 241 } |
216 | 242 |
217 void LoadDefaultMainDicomTags(ResourceType level) | 243 void LoadDefaultMainDicomTags(ResourceType level) |
218 { | 244 { |
219 assert(mainDicomTagsByTag_.find(level) == mainDicomTagsByTag_.end()); | |
220 | |
221 const MainDicomTag* tags = NULL; | 245 const MainDicomTag* tags = NULL; |
222 size_t size; | 246 size_t size; |
223 | 247 |
224 switch (level) | 248 switch (level) |
225 { | 249 { |
255 AddMainDicomTag(tags[i].tag_, tags[i].name_, level); | 279 AddMainDicomTag(tags[i].tag_, tags[i].name_, level); |
256 } | 280 } |
257 | 281 |
258 } | 282 } |
259 | 283 |
284 std::map<DicomTag, std::string>& GetMainDicomTags(ResourceType level) | |
285 { | |
286 switch (level) | |
287 { | |
288 case ResourceType_Patient: | |
289 return patientsMainDicomTagsByTag_; | |
290 | |
291 case ResourceType_Study: | |
292 return studiesMainDicomTagsByTag_; | |
293 | |
294 case ResourceType_Series: | |
295 return seriesMainDicomTagsByTag_; | |
296 | |
297 case ResourceType_Instance: | |
298 return instancesMainDicomTagsByTag_; | |
299 | |
300 default: | |
301 throw OrthancException(ErrorCode_InternalError); | |
302 } | |
303 } | |
304 | |
305 std::map<std::string, DicomTag2>& GetMainDicomTagsByName(ResourceType level) | |
306 { | |
307 switch (level) | |
308 { | |
309 case ResourceType_Patient: | |
310 return patientsMainDicomTagsByName_; | |
311 | |
312 case ResourceType_Study: | |
313 return studiesMainDicomTagsByName_; | |
314 | |
315 case ResourceType_Series: | |
316 return seriesMainDicomTagsByName_; | |
317 | |
318 case ResourceType_Instance: | |
319 return instancesMainDicomTagsByName_; | |
320 | |
321 default: | |
322 throw OrthancException(ErrorCode_InternalError); | |
323 } | |
324 } | |
325 | |
326 std::set<DicomTag>& GetMainDicomTagsByLevel(ResourceType level) | |
327 { | |
328 switch (level) | |
329 { | |
330 case ResourceType_Patient: | |
331 return patientsMainDicomTagsByLevel_; | |
332 | |
333 case ResourceType_Study: | |
334 return studiesMainDicomTagsByLevel_; | |
335 | |
336 case ResourceType_Series: | |
337 return seriesMainDicomTagsByLevel_; | |
338 | |
339 case ResourceType_Instance: | |
340 return instancesMainDicomTagsByLevel_; | |
341 | |
342 default: | |
343 throw OrthancException(ErrorCode_InternalError); | |
344 } | |
345 } | |
346 | |
260 public: | 347 public: |
261 // Singleton pattern | 348 // Singleton pattern |
262 static MainDicomTagsConfiguration& GetInstance() | 349 static MainDicomTagsConfiguration& GetInstance() |
263 { | 350 { |
264 static MainDicomTagsConfiguration parameters; | 351 static MainDicomTagsConfiguration parameters; |
265 return parameters; | 352 return parameters; |
266 } | 353 } |
267 | 354 |
268 void AddMainDicomTag(const DicomTag& tag, const std::string& name, ResourceType level) | 355 void AddMainDicomTag(const DicomTag& tag, const std::string& name, ResourceType level) |
269 { | 356 { |
270 if (mainDicomTagsByTag_[level].find(tag) != mainDicomTagsByTag_[level].end()) | 357 std::map<DicomTag, std::string>& byTag = GetMainDicomTags(level); |
358 std::map<std::string, DicomTag2>& byName = GetMainDicomTagsByName(level); | |
359 | |
360 if (byTag.find(tag) != byTag.end()) | |
271 { | 361 { |
272 throw OrthancException(ErrorCode_MainDicomTagsMultiplyDefined, tag.Format() + " is already defined"); | 362 throw OrthancException(ErrorCode_MainDicomTagsMultiplyDefined, tag.Format() + " is already defined"); |
273 } | 363 } |
274 | 364 |
275 if (mainDicomTagsByName_[level].find(name) != mainDicomTagsByName_[level].end()) | 365 if (byName.find(name) != byName.end()) |
276 { | 366 { |
277 throw OrthancException(ErrorCode_MainDicomTagsMultiplyDefined, name + " is already defined"); | 367 throw OrthancException(ErrorCode_MainDicomTagsMultiplyDefined, name + " is already defined"); |
278 } | 368 } |
279 | 369 |
280 mainDicomTagsByTag_[level][tag] = name; | 370 byTag[tag] = name; |
281 mainDicomTagsByName_[level][name] = DicomTag2(tag); | 371 byName[name] = DicomTag2(tag); |
282 mainDicomTagsByLevel_[level].insert(tag); | 372 GetMainDicomTagsByLevel(level).insert(tag); |
283 allMainDicomTags_.insert(tag); | 373 allMainDicomTags_.insert(tag); |
284 signatures_[level] = ComputeSignature(GetMainDicomTagsByLevel(level)); | 374 signatures_[level] = ComputeSignature(GetMainDicomTagsByLevel(level)); |
285 } | |
286 | |
287 const std::map<DicomTag, std::string>& GetMainDicomTags(ResourceType level) const | |
288 { | |
289 assert(mainDicomTagsByTag_.find(level) != mainDicomTagsByTag_.end()); | |
290 | |
291 return mainDicomTagsByTag_.at(level); | |
292 } | |
293 | |
294 const std::map<std::string, DicomTag2>& GetMainDicomTagsByName(ResourceType level) const | |
295 { | |
296 assert(mainDicomTagsByName_.find(level) != mainDicomTagsByName_.end()); | |
297 | |
298 return mainDicomTagsByName_.at(level); | |
299 } | |
300 | |
301 const std::set<DicomTag>& GetMainDicomTagsByLevel(ResourceType level) const | |
302 { | |
303 assert(mainDicomTagsByLevel_.find(level) != mainDicomTagsByLevel_.end()); | |
304 | |
305 return mainDicomTagsByLevel_.at(level); | |
306 } | 375 } |
307 | 376 |
308 const std::set<DicomTag>& GetAllMainDicomTags() const | 377 const std::set<DicomTag>& GetAllMainDicomTags() const |
309 { | 378 { |
310 return allMainDicomTags_; | 379 return allMainDicomTags_; |