X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FPipeline.h;fp=lib%2FcpPlugins%2FPipeline.h;h=c8b3d44aaba8ac854f9abeb135b35e4c6f1988e4;hb=2e142df11d6f312a2a2b5097b8da73571ed523e8;hp=0000000000000000000000000000000000000000;hpb=61b3659afe961ed248f30e26f9ca8f28fcfafddc;p=cpPlugins.git diff --git a/lib/cpPlugins/Pipeline.h b/lib/cpPlugins/Pipeline.h new file mode 100644 index 0000000..c8b3d44 --- /dev/null +++ b/lib/cpPlugins/Pipeline.h @@ -0,0 +1,150 @@ +// ========================================================================= +// @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) +// ========================================================================= +#ifndef __cpPlugins__Pipeline__h__ +#define __cpPlugins__Pipeline__h__ + +#include +#include +#include +#include + +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$