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

InPortCorbaProvider.h

説明を見る。
00001 // -*- C++ -*-
00020 /*
00021  * $Log: InPortCorbaProvider.h,v $
00022  * Revision 1.3  2007/01/14 23:01:47  n-ando
00023  * Now object reference is duplicate to set property.
00024  *
00025  * Revision 1.2  2007/01/06 17:52:54  n-ando
00026  * Interface and its profile publish functions (publishInterfaceProfile()
00027  * and publishInterface()) are added.
00028  *
00029  * Revision 1.1  2006/12/02 18:41:02  n-ando
00030  * InPortCorbaProvider class is an implementation of InPortAny.
00031  *
00032  */
00033 
00034 #ifndef InPortCorbaProvider_h
00035 #define InPortCorbaProvider_h
00036 
00037 #include <rtm/idl/DataPortSkel.h>
00038 #include <rtm/BufferBase.h>
00039 #include <rtm/InPortProvider.h>
00040 
00041 namespace RTC
00042 {
00052   template <class DataType>
00053   class InPortCorbaProvider
00054     : public InPortProvider,
00055       public virtual POA_RTC::InPortAny,
00056       public virtual PortableServer::RefCountServantBase
00057   {
00058   public:
00066     InPortCorbaProvider(BufferBase<DataType>& buffer)
00067       : m_buffer(buffer)
00068     {
00069       CORBA::Any any_var;
00070       DataType   tmp_var;
00071       any_var <<= tmp_var;
00072       
00073       // PortProfile setting
00074       setDataType(any_var.type()->name());
00075       setInterfaceType("CORBA_Any");
00076       setDataFlowType("Push, Pull");
00077       setSubscriptionType("Any");
00078 
00079       // ConnectorProfile setting
00080       m_objref = this->_this();
00081       CORBA_SeqUtil::push_back(m_properties,
00082                                NVUtil::newNV("dataport.corba_any.inport_ref",
00083                                              RTC::InPortAny::_duplicate(m_objref)));
00084     }
00085 
00086     virtual ~InPortCorbaProvider()
00087     {
00088     }
00089 
00090     virtual void put(const CORBA::Any& data)
00091     {
00092       DataType* tmp;
00093       if (data >>= tmp)
00094         {
00095           m_buffer.write(*tmp);
00096         }
00097       return;
00098     }
00099   private:
00100     BufferBase<DataType>& m_buffer;
00101     RTC::InPortAny_var m_objref;
00102   };
00103 
00104 
00105 };     // namespace RTC
00106 #endif // InPortCorbaProvider_h
00107 

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