00001 // -*- C++ -*- 00020 #ifndef RTC_OUTPORTPROVIDER_H 00021 #define RTC_OUTPORTPROVIDER_H 00022 00023 #include <string> 00024 00025 #include <coil/Factory.h> 00026 #include <rtm/BufferBase.h> 00027 #include <rtm/NVUtil.h> 00028 #include <rtm/DataPortStatus.h> 00029 00030 namespace RTC 00031 { 00089 class OutPortProvider 00090 : public DataPortStatus 00091 { 00092 public: 00093 DATAPORTSTATUS_ENUM 00104 virtual ~OutPortProvider(void); 00105 00133 virtual void init(coil::Properties& prop); 00134 00160 virtual void setBuffer(BufferBase<cdrMemoryStream>* buffer); 00161 00185 virtual void publishInterfaceProfile(SDOPackage::NVList& properties); 00186 00212 virtual bool publishInterface(SDOPackage::NVList& properties); 00213 00214 protected: 00232 void setPortType(const char* port_type); 00233 00251 void setDataType(const char* data_type); 00252 00270 void setInterfaceType(const char* interface_type); 00271 00289 void setDataFlowType(const char* dataflow_type); 00290 00308 void setSubscriptionType(const char* subs_type); 00309 00310 protected: 00318 SDOPackage::NVList m_properties; 00319 00320 private: 00321 std::string m_portType; 00322 std::string m_dataType; 00323 std::string m_interfaceType; 00324 std::string m_dataflowType; 00325 std::string m_subscriptionType; 00326 00327 00328 public: 00329 // functors 00337 struct publishInterfaceProfileFunc 00338 { 00339 publishInterfaceProfileFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00340 void operator()(OutPortProvider* provider) 00341 { 00342 provider->publishInterfaceProfile(m_prop); 00343 } 00344 SDOPackage::NVList& m_prop; 00345 }; 00346 00354 struct publishInterfaceFunc 00355 { 00356 publishInterfaceFunc(SDOPackage::NVList& prop) 00357 : m_prop(prop), provider_(0) {} 00358 void operator()(OutPortProvider* provider) 00359 { 00360 if (provider->publishInterface(m_prop)) 00361 { 00362 provider_ = provider; 00363 } 00364 } 00365 SDOPackage::NVList& m_prop; 00366 OutPortProvider* provider_; 00367 }; 00368 }; 00369 00370 typedef ::coil::GlobalFactory<OutPortProvider> OutPortProviderFactory; 00371 00372 }; // namespace RTC 00373 #endif // RTC_OUTPORTPROVIDER_H