]> Creatis software - clitk.git/blob - common/clitkImageToImageGenericFilter.txx
slightly decrease template compilation time
[clitk.git] / common / clitkImageToImageGenericFilter.txx
1 /*=========================================================================
2
3   Program:   vv
4   Module:    $RCSfile: clitkImageToImageGenericFilter.txx,v $
5   Language:  C++
6   Date:      $Date: 2010/03/02 13:28:42 $
7   Version:   $Revision: 1.8 $
8   Author :   Joel Schaerer <joel.schaerer@creatis.insa-lyon.fr>
9   David Sarrut <david.sarrut@creatis.insa-lyon.fr>
10
11   Copyright (C) 2008
12   Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
13   CREATIS-LRMN http://www.creatis.insa-lyon.fr
14
15   This program is free software: you can redistribute it and/or modify
16   it under the terms of the GNU General Public License as published by
17   the Free Software Foundation, version 3 of the License.
18
19   This program is distributed in the hope that it will be useful,
20   but WITHOUT ANY WARRANTY; without even the implied warranty of
21   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   GNU General Public License for more details.
23
24   You should have received a copy of the GNU General Public License
25   along with this program.  If not, see <http://www.gnu.org/licenses/>.
26
27   =========================================================================*/
28
29 // //--------------------------------------------------------------------
30 // template<class ImageType> 
31 // void clitk::ImageToImageGenericFilterBase::SetNextOutput(typename ImageType::Pointer output) {
32 //   if (mOutputFilenames.size())
33 //     {
34 //       clitk::writeImage<ImageType>(output, mOutputFilenames.front(), mIOVerbose);
35 //       mOutputFilenames.pop_front();
36 //     }
37 //   if (mInputVVImages.size()) //We assume that if a vv image is set as input, we want one as the output
38 //     mOutputVVImages.push_back(vvImageFromITK<ImageType::ImageDimension,typename ImageType::PixelType>(output));
39 // }
40 // //--------------------------------------------------------------------
41
42
43 // //--------------------------------------------------------------------
44 // template<class ImageType> 
45 // typename ImageType::Pointer clitk::ImageToImageGenericFilterBase::GetInput(unsigned int n) {
46 //   if (mInputFilenames.size() > n) {
47 //     return clitk::readImage<ImageType>(mInputFilenames[n], mIOVerbose);
48 //   }
49 //   else if (mInputVVImages.size() > n)
50 //     return typename ImageType::Pointer(const_cast<ImageType*>(vvImageToITK<ImageType>(mInputVVImages[n]).GetPointer()));
51 //   else
52 //     {
53 //       assert(false); //No input, this shouldn't happen
54 //       return typename ImageType::Pointer(NULL);
55 //     }
56 // }
57 // //--------------------------------------------------------------------
58
59
60 //--------------------------------------------------------------------
61 template<class FilterType>
62 clitk::ImageToImageGenericFilter<FilterType>::ImageToImageGenericFilter(std::string filterName) :
63   ImageToImageGenericFilterBase(filterName), 
64   mImageTypesManager(static_cast<FilterType*>(this))
65 {
66 }
67 //--------------------------------------------------------------------
68
69
70 //--------------------------------------------------------------------
71 template<class FilterType>
72 bool clitk::ImageToImageGenericFilter<FilterType>::Update() {
73   GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents);    
74   
75   // Check ImageType
76   if (!CheckImageType()) {
77     if (mFailOnImageTypeError) ImageTypeError();
78     else SetImageTypeError();
79     return false;
80   }
81
82   // Go ! Call the right templatized function
83   mImageTypesManager.DoIt(mDim, mNbOfComponents, mPixelTypeName);
84   return true;
85 }
86 //--------------------------------------------------------------------
87
88 //--------------------------------------------------------------------
89 template<class FilterType>
90 bool clitk::ImageToImageGenericFilter<FilterType>::CheckImageType(unsigned int dim,unsigned int ncomp, std::string pixeltype)
91 {
92   return static_cast<bool>(mImageTypesManager.mMapOfImageTypeToFunction[dim][ncomp][pixeltype]);
93 }
94 //--------------------------------------------------------------------
95
96
97 //--------------------------------------------------------------------
98 template<class FilterType>
99 bool clitk::ImageToImageGenericFilter<FilterType>::CheckImageType()
100 {
101   return static_cast<bool>(mImageTypesManager.mMapOfImageTypeToFunction[mDim][mNbOfComponents][mPixelTypeName]);
102 }
103 //--------------------------------------------------------------------
104
105
106 //--------------------------------------------------------------------
107 template<class FilterType>
108 std::string clitk::ImageToImageGenericFilter<FilterType>::GetAvailableImageTypes() {
109   std::ostringstream oss;
110   oss << "The filter <" << mFilterName << "> manages:" << std::endl;
111     
112   typedef typename ImageTypesManager<FilterType>::MapOfImageComponentsToFunctionType::const_iterator MCompItType;
113   typedef typename ImageTypesManager<FilterType>::MapOfImageDimensionToFunctionType::const_iterator MDimItType;
114   typedef typename ImageTypesManager<FilterType>::MapOfPixelTypeToFunctionType::const_iterator MPixelItType;
115   for (MDimItType i=mImageTypesManager.mMapOfImageTypeToFunction.begin();
116        i!=mImageTypesManager.mMapOfImageTypeToFunction.end();
117        i++) {
118     for (MCompItType j=(*i).second.begin(); j!= (*i).second.end(); j++) {
119       for (MPixelItType k=(*j).second.begin(); k!= (*j).second.end(); k++) {
120         oss << "Dim: " << (*i).first 
121             << ", Components: " << (*j).first 
122             << ", Type: " << (*k).first << std::endl;
123       }
124     }
125   }
126   return oss.str();
127 }
128 //--------------------------------------------------------------------
129