]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Pipeline.h
Moved to version 1.0
[cpPlugins.git] / lib / cpPlugins / Pipeline.h
1 // =========================================================================
2 // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
3 // =========================================================================
4 #ifndef __cpPlugins__Pipeline__h__
5 #define __cpPlugins__Pipeline__h__
6
7 #include <map>
8 #include <set>
9 #include <cpPlugins/Filter.h>
10 #include <cpPlugins/Manager.h>
11
12 namespace cpPlugins
13 {
14   /*! \brief 
15    */
16   class CPPLUGINS_EXPORT Pipeline
17     : public Filter
18   {
19     cpPluginsTypeMacro( Pipeline, Filter );
20     cpPluginsNewMacro( );
21
22   public:
23     typedef std::pair< std::string, std::string >             TEdge;
24     typedef std::map< std::string, TEdge >                    TPortRelations;
25     typedef std::map< std::string, ProcessObject::SharedPtr > TNodes;
26
27     /**
28      */
29     class TAdjMatrix
30     {
31     public:
32       typedef std::set< TEdge >               TEdges;
33       typedef std::map< std::string, TEdges > TRow;
34       typedef std::map< std::string, TRow >   TMatrix;
35
36     public:
37       TAdjMatrix( );
38       virtual ~TAdjMatrix( );
39
40       bool HasConnection(
41         const std::string& oObj, const std::string& dObj,
42         const std::string& oPort, const std::string& dPort
43         ) const;
44
45       TEdges& operator()( const std::string& o, const std::string& d );
46       const TEdges& operator()(
47         const std::string& o, const std::string& d
48         ) const;
49
50       template< class _TXMLNode >
51       void SaveXML( _TXMLNode* node ) const;
52
53     protected:
54       TMatrix m_Matrix;
55     };
56
57   public:
58     void Clear( );
59
60     ProcessObject* CreateNode(
61       const std::string& class_name, const std::string& node_name = ""
62       );
63     ProcessObject* GetNode( const std::string& name );
64     const ProcessObject* GetNode( const std::string& name ) const;
65
66     void Connect(
67       const std::string& oObj, const std::string& dObj,
68       const std::string& oPort, const std::string& dPort
69       );
70     void Connect( const std::string& src, const std::string& dest );
71
72     void LoadXML( const std::string& fname );
73     void SaveXML( const std::string& fname ) const;
74
75     virtual bool GetExecutionDebug( ) const override;
76     virtual void SetExecutionDebug( bool d ) override;
77
78     virtual void ModifiedInValue( const std::string& name ) override;
79     virtual void ModifiedInSet( const std::string& name ) override;
80     virtual void ModifiedInSequence( const std::string& name ) override;
81     virtual void ModifiedOutValue( const std::string& name ) override;
82     virtual void ModifiedOutSet( const std::string& name ) override;
83     virtual void ModifiedOutSequence( const std::string& name ) override;
84     virtual void ModifiedChoice( const std::string& name ) override;
85
86     //! IO management
87     void DefineInput(
88       const std::string& input,
89       const std::string& node,
90       const std::string& port );
91
92     virtual void SetInput(
93       const std::string& name, DataObject* data
94       ) override;
95     virtual DataObject* GetInput(
96       const std::string& name, const unsigned int id
97       ) override;
98     virtual const DataObject* GetInput(
99       const std::string& name, const unsigned int id
100       ) const override;
101     virtual bool HasInput( const std::string& name ) const override;
102
103     void DefineOutput(
104       const std::string& output,
105       const std::string& node,
106       const std::string& port );
107
108     virtual DataObject* GetOutput( const std::string& name ) override;
109     virtual const DataObject* GetOutput(
110       const std::string& name
111       ) const override;
112
113   protected:
114     Pipeline( );
115     virtual ~Pipeline( );
116
117     virtual void _GenerateData( ) override;
118
119     void _Connect(
120       Filter* src, const std::string& srcPort,
121       ProcessObject* dest, const std::string& destPort
122       );
123
124     void _Connect(
125       Functor* functor, const std::string& functorValue,
126       ProcessObject* dest, const std::string& destValue
127       );
128
129     static void _ParseComponentName(
130       const std::string& name,
131       std::string& node,
132       std::string& component
133       );
134
135   protected:
136     Manager     m_Mgr;
137     std::string m_Description;
138     TNodes      m_Nodes;
139     TAdjMatrix  m_AdjMatrix;
140     TPortRelations m_InputRelations;
141     TPortRelations m_OutputRelations;
142
143     bool m_PipelineExecutionDebug;
144
145   }; // end class
146 } // end namespace
147
148 #endif // __cpPlugins__Pipeline__h__
149
150 // eof - $RCSfile$