00001 // -*- C++ -*- 00020 #ifndef RTC_INPORTBASE_H 00021 #define RTC_INPORTBASE_H 00022 00023 #include <rtm/PortBase.h> 00024 #include <rtm/DataPortStatus.h> 00025 #include <rtm/CdrBufferBase.h> 00026 00041 namespace RTC 00042 { 00043 class InPortProvider; 00044 class OutPortConsumer; 00045 class InPortConnector; 00046 00066 class InPortBase 00067 : public PortBase, public DataPortStatus 00068 { 00069 public: 00070 DATAPORTSTATUS_ENUM 00071 00072 typedef std::vector<InPortConnector*> ConnectorList; 00073 00098 InPortBase(const char* name, const char* data_type); 00099 00113 virtual ~InPortBase(void); 00114 00115 coil::Properties& properties(); 00116 00117 void init(); 00118 00135 virtual void activateInterfaces(); 00136 00153 virtual void deactivateInterfaces(); 00154 00155 protected: 00184 virtual ReturnCode_t 00185 publishInterfaces(ConnectorProfile& connector_profile); 00186 00214 virtual ReturnCode_t 00215 subscribeInterfaces(const ConnectorProfile& connector_profile); 00216 00238 virtual void 00239 unsubscribeInterfaces(const ConnectorProfile& connector_profile); 00240 00241 00249 void initProviders(); 00250 00258 void initConsumers(); 00259 00271 InPortProvider* 00272 createProvider(ConnectorProfile& cprof, coil::Properties& prop); 00273 00285 OutPortConsumer* 00286 createConsumer(const ConnectorProfile& cprof, coil::Properties& prop); 00287 00299 InPortConnector* 00300 createConnector(ConnectorProfile& cprof, coil::Properties& prop, 00301 InPortProvider* provider); 00313 InPortConnector* 00314 createConnector(const ConnectorProfile& cprof, coil::Properties& prop, 00315 OutPortConsumer* consumer); 00316 protected: 00317 bool m_singlebuffer; 00318 CdrBufferBase* m_thebuffer; 00319 coil::Properties m_properties; 00320 coil::vstring m_providerTypes; 00321 coil::vstring m_consumerTypes; 00322 ConnectorList m_connectors; 00323 }; 00324 }; // namespace RTC 00325 00326 #endif // RTC_INPORTBASE_H