X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkAnatomicalFeatureDatabase.txx;h=02907716c64c198674b95699cc15b481a657a201;hb=2b4640901e2d30671b1068519b56c80499063ad6;hp=f1ee25ebc8b863d855e4ecb052aaa77e02a1ef27;hpb=3c1886a2789de650bebcbcbc60e454b248f83e38;p=clitk.git diff --git a/segmentation/clitkAnatomicalFeatureDatabase.txx b/segmentation/clitkAnatomicalFeatureDatabase.txx index f1ee25e..0290771 100644 --- a/segmentation/clitkAnatomicalFeatureDatabase.txx +++ b/segmentation/clitkAnatomicalFeatureDatabase.txx @@ -3,7 +3,7 @@ Authors belong to: - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,13 +14,13 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - ======================================================================-====*/ + ===========================================================================**/ //-------------------------------------------------------------------- template typename ImageType::Pointer AnatomicalFeatureDatabase:: -GetImage(std::string tag) +GetImage(std::string tag, bool reload) { if (m_MapOfTag.find(tag) == m_MapOfTag.end()) { clitkExceptionMacro("Could not find the tag <" << tag << "> of type 'Image' in the DB ('" @@ -28,7 +28,7 @@ GetImage(std::string tag) } else { typename ImageType::Pointer image; - if (m_MapOfImage[tag]) { + if ((!reload) && (m_MapOfImage[tag])) { image = static_cast(m_MapOfImage[tag]); } else { @@ -37,7 +37,8 @@ GetImage(std::string tag) image = readImage(s); // I add a reference count because the cache is not a smartpointer image->SetReferenceCount(image->GetReferenceCount()+1); - // Insert into the cache + // Insert into the cache + m_MapOfImage.erase(tag); m_MapOfImage[tag] = &(*image); // pointer } return image; @@ -53,6 +54,8 @@ SetImage(TagType tag, std::string f, typename ImageType::Pointer image, bool wri { SetImageFilename(tag, f); m_MapOfImage[tag] = &(*image); + // I add a reference count because the cache is not a smartpointer + image->SetReferenceCount(image->GetReferenceCount()+1); if (write) { writeImage(image, f); } @@ -69,22 +72,9 @@ ReleaseImage(std::string tag) clitkExceptionMacro("Could not find the tag <" << tag << "> of type Image Filename in the DB"); } else { - DD("TODO"); - exit(0); - if (m_MapOfImage[tag]) { - DD(m_MapOfImage[tag]->GetReferenceCount()); - ImageType * image = static_cast(m_MapOfImage[tag]); - image->SetReferenceCount(image->GetReferenceCount()-1); - m_MapOfImage.erase(tag); - /* - DD(image->GetReferenceCount()); - image->Delete(); - */ - // DD(image->GetReferenceCount()); - } - else { - // Do nothing in this case (image not loaded) - } + typename ImageType::Pointer image = GetImage(tag); + image->SetReferenceCount(image->GetReferenceCount()-1); + m_MapOfImage.erase(tag); } } //--------------------------------------------------------------------