]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ProcessObject.h
Integration of new functionalities into ProcessObject and DataObject
[cpPlugins.git] / lib / cpPlugins / Interface / ProcessObject.h
1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
3
4 #include <map>
5 #include <string>
6 #include <itkDataObject.h>
7 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
8 #include <cpPlugins/Interface/Object.h>
9
10 namespace cpPlugins
11 {
12   namespace Interface
13   {
14     class DataObject;
15
16     /**
17      */
18     class cpPlugins_Interface_EXPORT ProcessObject
19       : public Object
20     {
21     public:
22       typedef ProcessObject Self;
23       typedef Object        Superclass;
24
25       typedef std::pair< std::string, std::string > TParameter;
26       typedef std::map< std::string, TParameter >   TParameters;
27
28     public:
29       ProcessObject( );
30       virtual ~ProcessObject( );
31
32       virtual std::string GetClassName( ) const;
33       virtual const TParameters& GetDefaultParameters( ) const;
34       virtual void SetParameters( const TParameters& params );
35
36       virtual unsigned int GetNumberOfInputs( ) const;
37       virtual unsigned int GetNumberOfOutputs( ) const;
38
39       virtual void SetNumberOfInputs( unsigned int n );
40       virtual void SetNumberOfOutputs( unsigned int n );
41
42       virtual void SetInput( unsigned int idx, const DataObject* dobj );
43       virtual DataObject* GetOutput( unsigned int idx );
44
45       virtual std::string Update( );
46       virtual void DisconnectOutputs( );
47
48     protected:
49       virtual itk::DataObject* _GetInput( unsigned int idx );
50       virtual void _SetOutput( unsigned int idx, itk::DataObject* dobj );
51       virtual void _DeleteOutputs( );
52
53       template< class O >
54         void _MakeOutput( unsigned int idx )
55       {
56         if( idx >= this->m_Outputs.size( ) )
57           return;
58         
59         if( !( this->m_OutputsDisconnected ) )
60           if( this->m_Outputs[ idx ] != NULL )
61             delete this->m_Outputs[ idx ];
62
63         this->m_Outputs[ idx ] = new O( );
64       }
65
66       virtual std::string _GenerateData( ) = 0;
67
68     protected:
69       TParameters m_DefaultParameters;
70       TParameters m_Parameters;
71
72       std::vector< const DataObject* > m_Inputs;
73       std::vector< DataObject* >       m_Outputs;
74       bool m_OutputsDisconnected;
75     };
76
77   } // ecapseman
78
79 } // ecapseman
80
81 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
82
83 // eof - $RCSfile$