Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkProcessObject.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkProcessObject.h,v $
00005   Language:  C++
00006   Date:      $Date: 2006/02/09 14:57:22 $
00007   Version:   $Revision: 1.75 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012   Portions of this code are covered under the VTK copyright.
00013   See VTKCopyright.txt or http://www.kitware.com/VTKCopyright.htm for details.
00014 
00015      This software is distributed WITHOUT ANY WARRANTY; without even 
00016      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00017      PURPOSE.  See the above copyright notices for more information.
00018 
00019 =========================================================================*/
00020 #ifndef __itkProcessObject_h
00021 #define __itkProcessObject_h
00022 
00023 #include "itkObject.h"
00024 #include "itkDataObject.h"
00025 #include "itkMultiThreader.h"
00026 #include "itkObjectFactory.h"
00027 #include <vector>
00028 
00029 namespace itk
00030 {
00031 
00087 class ITKCommon_EXPORT ProcessObject : public Object
00088 {
00089 public:
00091   typedef ProcessObject       Self;
00092   typedef Object  Superclass;
00093   typedef SmartPointer<Self>  Pointer;
00094   typedef SmartPointer<const Self>  ConstPointer;
00095 
00097   itkTypeMacro(ProcessObject,Object);
00098 
00100   typedef DataObject::Pointer DataObjectPointer;
00101 
00103   typedef std::vector<DataObjectPointer> DataObjectPointerArray;
00104 
00108   DataObjectPointerArray& GetInputs() 
00109     {return m_Inputs;}
00110 
00115   std::vector<DataObjectPointer>::size_type GetNumberOfInputs() const
00116     {return m_Inputs.size();}
00117 
00125   virtual std::vector<DataObjectPointer>::size_type GetNumberOfValidRequiredInputs() const;
00126 
00130   DataObjectPointerArray& GetOutputs()
00131     { return m_Outputs; }
00132   std::vector<DataObjectPointer>::size_type GetNumberOfOutputs() const
00133     {return m_Outputs.size();}
00135 
00138   itkSetMacro(AbortGenerateData,bool);
00139 
00142   itkGetConstReferenceMacro(AbortGenerateData,bool);
00143 
00145   itkBooleanMacro(AbortGenerateData); 
00146 
00151   itkSetClampMacro(Progress,float,0.0,1.0);
00152 
00156   itkGetConstReferenceMacro(Progress,float);
00157 
00163   void UpdateProgress(float amount);
00164 
00183   virtual void Update();
00184 
00191   virtual void UpdateLargestPossibleRegion();
00192 
00205   virtual void UpdateOutputInformation();
00206 
00209   virtual void PropagateRequestedRegion(DataObject *output);
00210 
00212   virtual void UpdateOutputData(DataObject *output);
00213 
00214 
00222   virtual void EnlargeOutputRequestedRegion(DataObject *itkNotUsed(output)){};
00223 
00224 
00228   virtual void ResetPipeline();
00229 
00244   virtual DataObjectPointer MakeOutput(unsigned int idx);
00245 
00251   virtual void SetReleaseDataFlag(bool flag);
00252   virtual bool GetReleaseDataFlag() const;
00253   void ReleaseDataFlagOn() {this->SetReleaseDataFlag(true);}
00254   void ReleaseDataFlagOff() {this->SetReleaseDataFlag(false);}
00256 
00269   itkSetMacro(ReleaseDataBeforeUpdateFlag, bool);
00270   itkGetConstReferenceMacro(ReleaseDataBeforeUpdateFlag, bool);
00271   itkBooleanMacro(ReleaseDataBeforeUpdateFlag);
00273 
00274   
00276   itkSetClampMacro( NumberOfThreads, int, 1, ITK_MAX_THREADS );
00277   itkGetConstReferenceMacro( NumberOfThreads, int );
00279 
00281   MultiThreader * GetMultiThreader()
00282     {return m_Threader;}
00283 
00290   virtual void PrepareOutputs();
00291 
00292 protected:
00293   ProcessObject();
00294   ~ProcessObject();
00295   void PrintSelf(std::ostream& os, Indent indent) const;
00296   
00299   virtual void SetNthInput(unsigned int num, DataObject *input);
00300   virtual void AddInput(DataObject *input);
00301   virtual void RemoveInput(DataObject *input);
00302   itkSetMacro(NumberOfRequiredInputs,unsigned int);
00303   itkGetConstReferenceMacro(NumberOfRequiredInputs,unsigned int);
00305 
00311   virtual void PushBackInput(const DataObject *input);
00312   virtual void PopBackInput();
00313   virtual void PushFrontInput(const DataObject *input);
00314   virtual void PopFrontInput();
00316 
00317   
00319   void SetNumberOfInputs(unsigned int num);
00320 
00322   DataObject * GetInput(unsigned int idx);
00323   const DataObject * GetInput(unsigned int idx) const;
00325 
00328   virtual void SetNthOutput(unsigned int num, DataObject *output);
00329   virtual void AddOutput(DataObject *output);
00330   virtual void RemoveOutput(DataObject *output);
00331   itkSetMacro(NumberOfRequiredOutputs,unsigned int);
00332   itkGetConstReferenceMacro(NumberOfRequiredOutputs,unsigned int);
00334 
00336   void SetNumberOfOutputs(unsigned int num);
00337 
00339   DataObject * GetOutput(unsigned int idx);
00340   const DataObject * GetOutput(unsigned int idx) const;
00342 
00356   virtual void GenerateInputRequestedRegion();
00357 
00369   virtual void GenerateOutputRequestedRegion(DataObject *output);
00370 
00381   virtual void GenerateOutputInformation();
00382 
00384   virtual void GenerateData() {}
00385 
00390   virtual void PropagateResetPipeline();
00391 
00403   virtual void ReleaseInputs();
00404 
00413   virtual void CacheInputReleaseDataFlags();
00414 
00418   virtual void RestoreInputReleaseDataFlags();
00419 
00425   bool m_Updating;
00426 
00428   TimeStamp m_OutputInformationMTime;
00429 
00430 private:
00431   ProcessObject(const Self&); //purposely not implemented
00432   void operator=(const Self&); //purposely not implemented
00433 
00435   std::vector<DataObjectPointer> m_Inputs;
00436   unsigned int m_NumberOfRequiredInputs;
00437 
00439   std::vector<bool> m_CachedInputReleaseDataFlags;
00440 
00442   std::vector<DataObjectPointer> m_Outputs;
00443   unsigned int m_NumberOfRequiredOutputs;
00444 
00446   bool  m_AbortGenerateData;
00447   float m_Progress;
00448 
00451   MultiThreader::Pointer m_Threader;
00452   int m_NumberOfThreads;
00453 
00455   bool m_ReleaseDataBeforeUpdateFlag;
00456 
00458   friend class DataObject;
00459 };
00460 
00461 } // end namespace itk
00462 
00463 #endif
00464 
00465 

Generated at Fri Sep 8 03:56:38 2006 for ITK by doxygen 1.4.7 written by Dimitri van Heesch, © 1997-2000