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