メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

DataInPort.h

説明を見る。
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

OpenRTMに対してMon Jan 15 12:14:43 2007に生成されました。  doxygen 1.4.1