00001 // -*- C++ -*- 00020 /* 00021 * $Log: DataInPort.h,v $ 00022 * Revision 1.4 2007/01/14 22:57:48 n-ando 00023 * A bug fix about template argument for buffer-type in constructor. 00024 * 00025 * Revision 1.3 2007/01/12 14:29:48 n-ando 00026 * A trivial bug fix. 00027 * 00028 * Revision 1.2 2007/01/06 17:43:39 n-ando 00029 * The behavior on notify_connect() and notify_disconnect() are now 00030 * implemented in protected functions(ex. publisherInterfaces()). 00031 * 00032 * Revision 1.1 2006/12/02 18:27:49 n-ando 00033 * The first commitment. 00034 * 00035 * 00036 */ 00037 00038 #ifndef DataInPort_h 00039 #define DataInPort_h 00040 00041 #include <rtm/PortBase.h> 00042 #include <rtm/BufferBase.h> 00043 #include <rtm/InPortCorbaProvider.h> 00044 #include <rtm/OutPortCorbaConsumer.h> 00045 #include <rtm/NVUtil.h> 00046 #include <rtm/InPort.h> 00047 namespace RTC 00048 { 00060 class DataInPort 00061 : public virtual PortBase 00062 { 00063 00064 public: 00065 template <class DataType, template <class DataType> class Buffer> 00066 DataInPort(const char* name, InPort<DataType, Buffer>& inport) 00067 : PortBase(name) 00068 { 00069 // PortProfile::properties を設定 00070 addProperty("port.port_type", "DataInPort"); 00071 00072 m_providers.push_back(new InPortCorbaProvider<DataType>(inport)); 00073 00074 m_consumers.push_back(new OutPortCorbaConsumer<DataType>(inport)); 00075 00076 } 00077 00078 virtual ~DataInPort(){}; 00079 00116 protected: 00117 virtual ReturnCode_t 00118 publishInterfaces(ConnectorProfile& connector_profile); 00119 00120 virtual ReturnCode_t 00121 subscribeInterfaces(const ConnectorProfile& connector_profile); 00122 00123 virtual void 00124 unsubscribeInterfaces(const ConnectorProfile& connector_profile); 00125 00126 struct publish 00127 { 00128 publish(SDOPackage::NVList& prop) : m_prop(prop) {} 00129 void operator()(InPortProvider* provider) 00130 { 00131 provider->publishInterface(m_prop); 00132 } 00133 SDOPackage::NVList& m_prop; 00134 }; 00135 00136 struct subscribe 00137 { 00138 subscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00139 void operator()(OutPortConsumer* consumer) 00140 { 00141 consumer->subscribeInterface(m_prop); 00142 } 00143 const SDOPackage::NVList& m_prop; 00144 }; 00145 00146 struct unsubscribe 00147 { 00148 unsubscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00149 void operator()(OutPortConsumer* consumer) 00150 { 00151 consumer->unsubscribeInterface(m_prop); 00152 } 00153 const SDOPackage::NVList& m_prop; 00154 }; 00155 00156 private: 00157 struct find_conn_id; 00158 std::vector<InPortProvider*> m_providers; 00159 std::vector<OutPortConsumer*> m_consumers; 00160 }; 00161 }; // namespace RTC 00162 00163 #endif // DataInPort_h