--- /dev/null
+// =========================================================================
+// @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
+// =========================================================================
+#ifndef __cpPlugins__Pipeline__h__
+#define __cpPlugins__Pipeline__h__
+
+#include <map>
+#include <set>
+#include <cpPlugins/Filter.h>
+#include <cpPlugins/Manager.h>
+
+namespace cpPlugins
+{
+ /*! \brief
+ */
+ class CPPLUGINS_EXPORT Pipeline
+ : public Filter
+ {
+ cpPluginsTypeMacro( Pipeline, Filter );
+ cpPluginsNewMacro( );
+
+ public:
+ typedef std::pair< std::string, std::string > TEdge;
+ typedef std::map< std::string, TEdge > TPortRelations;
+ typedef std::map< std::string, ProcessObject::SharedPtr > TNodes;
+
+ /**
+ */
+ class TAdjMatrix
+ {
+ public:
+ typedef std::set< TEdge > TEdges;
+ typedef std::map< std::string, TEdges > TRow;
+ typedef std::map< std::string, TRow > TMatrix;
+
+ public:
+ TAdjMatrix( );
+ virtual ~TAdjMatrix( );
+
+ bool HasConnection(
+ const std::string& oObj, const std::string& dObj,
+ const std::string& oPort, const std::string& dPort
+ ) const;
+
+ TEdges& operator()( const std::string& o, const std::string& d );
+ const TEdges& operator()(
+ const std::string& o, const std::string& d
+ ) const;
+
+ template< class _TXMLNode >
+ void SaveXML( _TXMLNode* node ) const;
+
+ protected:
+ TMatrix m_Matrix;
+ };
+
+ public:
+ void Clear( );
+
+ ProcessObject* CreateNode(
+ const std::string& class_name, const std::string& node_name = ""
+ );
+ ProcessObject* GetNode( const std::string& name );
+ const ProcessObject* GetNode( const std::string& name ) const;
+
+ void Connect(
+ const std::string& oObj, const std::string& dObj,
+ const std::string& oPort, const std::string& dPort
+ );
+ void Connect( const std::string& src, const std::string& dest );
+
+ void LoadXML( const std::string& fname );
+ void SaveXML( const std::string& fname ) const;
+
+ virtual bool GetExecutionDebug( ) const override;
+ virtual void SetExecutionDebug( bool d ) override;
+
+ virtual void ModifiedInValue( const std::string& name ) override;
+ virtual void ModifiedInSet( const std::string& name ) override;
+ virtual void ModifiedInSequence( const std::string& name ) override;
+ virtual void ModifiedOutValue( const std::string& name ) override;
+ virtual void ModifiedOutSet( const std::string& name ) override;
+ virtual void ModifiedOutSequence( const std::string& name ) override;
+ virtual void ModifiedChoice( const std::string& name ) override;
+
+ //! IO management
+ void DefineInput(
+ const std::string& input,
+ const std::string& node,
+ const std::string& port );
+
+ virtual void SetInput(
+ const std::string& name, DataObject* data
+ ) override;
+ virtual DataObject* GetInput(
+ const std::string& name, const unsigned int id
+ ) override;
+ virtual const DataObject* GetInput(
+ const std::string& name, const unsigned int id
+ ) const override;
+ virtual bool HasInput( const std::string& name ) const override;
+
+ void DefineOutput(
+ const std::string& output,
+ const std::string& node,
+ const std::string& port );
+
+ virtual DataObject* GetOutput( const std::string& name ) override;
+ virtual const DataObject* GetOutput(
+ const std::string& name
+ ) const override;
+
+ protected:
+ Pipeline( );
+ virtual ~Pipeline( );
+
+ virtual void _GenerateData( ) override;
+
+ void _Connect(
+ Filter* src, const std::string& srcPort,
+ ProcessObject* dest, const std::string& destPort
+ );
+
+ void _Connect(
+ Functor* functor, const std::string& functorValue,
+ ProcessObject* dest, const std::string& destValue
+ );
+
+ static void _ParseComponentName(
+ const std::string& name,
+ std::string& node,
+ std::string& component
+ );
+
+ protected:
+ Manager m_Mgr;
+ std::string m_Description;
+ TNodes m_Nodes;
+ TAdjMatrix m_AdjMatrix;
+ TPortRelations m_InputRelations;
+ TPortRelations m_OutputRelations;
+
+ bool m_PipelineExecutionDebug;
+
+ }; // end class
+} // end namespace
+
+#endif // __cpPlugins__Pipeline__h__
+
+// eof - $RCSfile$