1 // =========================================================================
2 // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
3 // =========================================================================
4 #ifndef __cpPlugins__ProcessObject__h__
5 #define __cpPlugins__ProcessObject__h__
9 #include <cpPlugins/Object.h>
10 #include <cpPlugins/Parameters.h>
11 #include <cpPlugins/Ports.h>
19 class CPPLUGINS_EXPORT ProcessObject
23 cpPluginsTypeMacro( ProcessObject, Object );
26 typedef Parameters TParameters;
27 typedef InputPort TInputPort;
28 typedef std::map< std::string, TInputPort > TInputs;
32 * This object's unique identifier. This name will be used as the
33 * node's, in the graph interpretation of a pipeline, index inside the
37 const std::string& GetName( ) const;
38 void SetName( const std::string& name );
41 virtual void Print( std::ostream& o ) const override;
42 void SetPipeline( Pipeline* p );
45 virtual void SetInput( const std::string& name, DataObject* data );
47 virtual DataObject* GetInput(
48 const std::string& name, const unsigned int id
50 virtual const DataObject* GetInput(
51 const std::string& name, const unsigned int id
54 virtual bool HasInput( const std::string& name ) const;
56 std::set< std::string > GetInputsNames( ) const;
57 unsigned int GetNumberOfInputs( ) const;
58 unsigned int GetNumberOfInputs( const std::string& name ) const;
59 virtual std::set< std::string > GetAllInputsNames( ) const;
60 virtual std::set< std::string > GetAllOutputsNames( ) const;
62 //! Pipeline management
63 virtual bool GetExecutionDebug( ) const;
64 virtual void SetExecutionDebug( bool d );
65 virtual void ExecutionDebugOn( );
66 virtual void ExecutionDebugOff( );
67 const double& GetLastDuration( ) const;
68 virtual bool IsUpdated(
69 const TTimeStamp& d = TTimeRep::now( )
72 // Solve multiple inheritance method name conflict
73 virtual void Modified( ) override;
74 virtual void ModifiedInValue( const std::string& name ) override;
75 virtual void ModifiedInSet( const std::string& name ) override;
76 virtual void ModifiedInSequence( const std::string& name ) override;
77 virtual void ModifiedOutValue( const std::string& name ) override;
78 virtual void ModifiedOutSet( const std::string& name ) override;
79 virtual void ModifiedOutSequence( const std::string& name ) override;
80 virtual void ModifiedChoice( const std::string& name ) override;
81 virtual void Update( );
83 template< class _TXMLNode >
84 void SaveXML( _TXMLNode* node ) const;
88 virtual ~ProcessObject( );
90 virtual bool _BeforeUpdate( );
91 virtual void _GenerateData( ) = 0;
93 template< class _TData >
94 const _TData* _GetInput(
95 const std::string& name, const unsigned int& id = 0
98 TInputs::const_iterator i = this->m_Inputs.find( name );
99 if( i != this->m_Inputs.end( ) )
100 return( dynamic_cast< const _TData* >( i->second.Get( id ) ) );
104 << "Input \"" << name << "\" does not belong to this filter."
108 template< class _TData >
109 void _ConfigureInput(
110 const std::string& name, bool required, bool multiple
113 if( this->m_Inputs.find( name ) != this->m_Inputs.end( ) )
115 this, << "Input \"" << name << "\" already exists."
118 port.Configure< _TData >( required, multiple );
119 this->m_Inputs[ name ] = port;
126 //! Input ports (only DataObjects)
129 //! Last duration in microseconds
130 std::ostream* m_OutStream;
131 bool m_ExecutionDebug;
132 double m_LastDuration;
134 //! Does this object belongs to a Pipeline?
135 std::weak_ptr< Pipeline > m_Pipeline;
139 #endif // __cpPlugins__ProcessObject__h__