00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __itkInPlaceImageFilter_h
00021 #define __itkInPlaceImageFilter_h
00022
00023 #include "itkImageToImageFilter.h"
00024
00025 namespace itk
00026 {
00027
00061 template <class TInputImage, class TOutputImage=TInputImage>
00062 class ITK_EXPORT InPlaceImageFilter : public ImageToImageFilter<TInputImage, TOutputImage>
00063 {
00064 public:
00066 typedef InPlaceImageFilter Self;
00067 typedef ImageToImageFilter<TInputImage, TOutputImage> Superclass;
00068 typedef SmartPointer<Self> Pointer;
00069 typedef SmartPointer<const Self> ConstPointer;
00070
00071
00073 itkTypeMacro(InPlaceImageFilter,ImageToImageFilter);
00074
00076 typedef typename Superclass::OutputImageType OutputImageType;
00077 typedef typename Superclass::OutputImagePointer OutputImagePointer;
00078 typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
00079 typedef typename Superclass::OutputImagePixelType OutputImagePixelType;
00080
00082 typedef TInputImage InputImageType;
00083 typedef typename InputImageType::Pointer InputImagePointer;
00084 typedef typename InputImageType::ConstPointer InputImageConstPointer;
00085 typedef typename InputImageType::RegionType InputImageRegionType;
00086 typedef typename InputImageType::PixelType InputImagePixelType;
00087
00089 itkStaticConstMacro(InputImageDimension, unsigned int,
00090 TInputImage::ImageDimension);
00091 itkStaticConstMacro(OutputImageDimension, unsigned int,
00092 TOutputImage::ImageDimension);
00094
00097 itkSetMacro(InPlace, bool);
00098 itkGetMacro(InPlace, bool);
00099 itkBooleanMacro(InPlace);
00101
00108 bool CanRunInPlace() const
00109 {
00110 return (typeid(TInputImage) == typeid(TOutputImage));
00111 };
00113
00114 protected:
00115 InPlaceImageFilter();
00116 ~InPlaceImageFilter();
00117
00118 virtual void PrintSelf(std::ostream& os, Indent indent) const;
00119
00132 virtual void AllocateOutputs();
00133
00143 virtual void ReleaseInputs();
00144
00145 private:
00146 InPlaceImageFilter(const Self&);
00147 void operator=(const Self&);
00148
00149 bool m_InPlace;
00150
00151 };
00152
00153 }
00154
00155
00156 #define ITK_TEMPLATE_InPlaceImageFilter(_, EXPORT, x, y) namespace itk { \
00157 _(2(class EXPORT InPlaceImageFilter< ITK_TEMPLATE_2 x >)) \
00158 namespace Templates { typedef InPlaceImageFilter< ITK_TEMPLATE_2 x > InPlaceImageFilter##y; } \
00159 }
00160
00161 #if ITK_TEMPLATE_EXPLICIT
00162 # include "Templates/itkInPlaceImageFilter+-.h"
00163 #endif
00164
00165 #if ITK_TEMPLATE_TXX
00166 # include "itkInPlaceImageFilter.txx"
00167 #endif
00168
00169 #endif
00170