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_;