]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Pipeline.h
Moved to version 1.0
[cpPlugins.git] / lib / cpPlugins / Pipeline.h
diff --git a/lib/cpPlugins/Pipeline.h b/lib/cpPlugins/Pipeline.h
new file mode 100644 (file)
index 0000000..c8b3d44
--- /dev/null
@@ -0,0 +1,150 @@
+// =========================================================================
+// @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$