]> Creatis software - clitk.git/blob - segmentation/clitkAnatomicalFeatureDatabase.txx
changes in license header
[clitk.git] / segmentation / clitkAnatomicalFeatureDatabase.txx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
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 copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ===========================================================================**/
18
19
20 //--------------------------------------------------------------------
21 template<class ImageType>
22 typename ImageType::Pointer AnatomicalFeatureDatabase::
23 GetImage(std::string tag, bool reload)
24 {
25   if (m_MapOfTag.find(tag) == m_MapOfTag.end()) {
26     clitkExceptionMacro("Could not find the tag <" << tag << "> of type 'Image' in the DB ('"
27                         << GetFilename() << "')");
28   }
29   else {
30     typename ImageType::Pointer image;
31     if ((!reload) && (m_MapOfImage[tag])) {
32       image = static_cast<ImageType *>(m_MapOfImage[tag]);
33     }
34     else {
35       std::string s = m_MapOfTag[tag];
36       // Read the file
37       image = readImage<ImageType>(s);
38       // I add a reference count because the cache is not a smartpointer
39       image->SetReferenceCount(image->GetReferenceCount()+1);
40       // Insert into the cache
41       m_MapOfImage.erase(tag); 
42       m_MapOfImage[tag] = &(*image); // pointer
43     }
44     return image;
45   }
46 }
47 //--------------------------------------------------------------------
48
49
50 //--------------------------------------------------------------------
51 template<class ImageType>
52 void AnatomicalFeatureDatabase::
53 SetImage(TagType tag, std::string f, typename ImageType::Pointer image, bool write)
54 {
55   SetImageFilename(tag, f);
56   m_MapOfImage[tag] = &(*image);
57   // I add a reference count because the cache is not a smartpointer
58   image->SetReferenceCount(image->GetReferenceCount()+1);
59   if (write) {
60     writeImage<ImageType>(image, f);
61   }
62 }
63 //--------------------------------------------------------------------
64
65
66 //--------------------------------------------------------------------
67 template<class ImageType>
68 void AnatomicalFeatureDatabase::
69 ReleaseImage(std::string tag)
70 {
71   if (m_MapOfTag.find(tag) == m_MapOfTag.end()) {
72     clitkExceptionMacro("Could not find the tag <" << tag << "> of type Image Filename in the DB");
73   }
74   else {
75     typename ImageType::Pointer image = GetImage<ImageType>(tag);
76     image->SetReferenceCount(image->GetReferenceCount()-1);
77     m_MapOfImage.erase(tag);
78   }
79 }
80 //--------------------------------------------------------------------