]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Ports.h
Moved to version 1.0
[cpPlugins.git] / lib / cpPlugins / Ports.h
1 // =========================================================================
2 // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
3 // =========================================================================
4 #ifndef __cpPlugins__Ports__h__
5 #define __cpPlugins__Ports__h__
6
7 #include <vector>
8 #include <cpPlugins/Config.h>
9
10 namespace cpPlugins
11 {
12   class Object;
13   class DataObject;
14   class Functor;
15
16   /**
17    */
18   class CPPLUGINS_EXPORT BasePort
19   {
20   public:
21     BasePort( );
22     virtual ~BasePort( );
23   }; // end class
24
25   /**
26    */
27   class CPPLUGINS_EXPORT InputPort
28     : public BasePort
29   {
30   public:
31     typedef InputPort Self;
32     typedef BasePort  Superclass;
33
34     typedef std::shared_ptr< DataObject > SharedPtr;
35     typedef std::weak_ptr< DataObject >   WeakPtr;
36
37   public:
38     InputPort( );
39     virtual ~InputPort( );
40
41     template< class _TObject >
42     void Configure( bool required, bool multiple )
43       {
44         this->m_Required = required;
45         this->m_Multiple = multiple;
46         this->m_Data.clear( );
47         this->m_Template = _TObject::New( );
48       }
49
50     DataObject* Get( const unsigned int& i );
51     const DataObject* Get( const unsigned int& i ) const;
52     unsigned int Count( ) const;
53     bool IsValid( ) const;
54     bool Set( DataObject* data );
55     bool Update( );
56
57   protected:
58     std::vector< SharedPtr > m_Data;
59     SharedPtr m_Template;
60     bool m_Required;
61     bool m_Multiple;
62   }; // end class
63
64   /**
65    */
66   class CPPLUGINS_EXPORT OutputPort
67     : public BasePort
68   {
69   public:
70     typedef OutputPort Self;
71     typedef BasePort   Superclass;
72
73     typedef std::shared_ptr< DataObject > SharedPtr;
74     typedef std::weak_ptr< DataObject >   WeakPtr;
75
76   public:
77     OutputPort( );
78     virtual ~OutputPort( );
79
80     DataObject* Get( );
81     const DataObject* Get( ) const;
82
83     template< class _TObject >
84     void Configure( )
85       {
86         this->m_Data = _TObject::New( );
87       }
88
89   protected:
90     SharedPtr m_Data;
91   }; // end class
92
93   /**
94    */
95   class CPPLUGINS_EXPORT FunctorPort
96     : public BasePort
97   {
98   public:
99     typedef FunctorPort Self;
100     typedef BasePort    Superclass;
101
102     typedef std::shared_ptr< Functor > SharedPtr;
103     typedef std::weak_ptr< Functor >   WeakPtr;
104
105   public:
106     FunctorPort( );
107     virtual ~FunctorPort( );
108
109     template< class _TFunctor >
110     void Configure( bool required )
111       {
112         this->m_Required = required;
113       }
114
115     Functor* Get( );
116     const Functor* Get( ) const;
117     bool Set( Functor* f );
118     bool Update( );
119
120   protected:
121     SharedPtr m_Functor;
122     bool m_Required;
123   }; // end class
124 } // end namespace
125
126 #endif // __cpPlugins__Ports__h__
127
128 // eof - $RCSfile$