InPortCorbaProvider.h

説明を見る。
00001 // -*- C++ -*-
00020 #ifndef InPortCorbaProvider_h
00021 #define InPortCorbaProvider_h
00022 
00023 #include <rtm/idl/DataPortSkel.h>
00024 #include <rtm/BufferBase.h>
00025 #include <rtm/InPortProvider.h>
00026 
00027 namespace RTC
00028 {
00054   template <class DataType>
00055   class InPortCorbaProvider
00056     : public InPortProvider,
00057       public virtual POA_RTC::InPortAny,
00058       public virtual PortableServer::RefCountServantBase
00059   {
00060   public:
00086     InPortCorbaProvider(BufferBase<DataType>& buffer)
00087       : m_buffer(buffer)
00088     {
00089       CORBA::Any any_var;
00090       DataType   tmp_var;
00091       any_var <<= tmp_var;
00092       
00093       // PortProfile setting
00094       setDataType(any_var.type()->name());
00095       setInterfaceType("CORBA_Any");
00096       setDataFlowType("Push, Pull");
00097       setSubscriptionType("Any");
00098       
00099       // ConnectorProfile setting
00100       m_objref = this->_this();
00101       //      CORBA_SeqUtil::push_back(m_properties,
00102       //               NVUtil::newNV("dataport.corba_any.inport_ref",
00103       //                     RTC::InPortAny::_duplicate(m_objref)));
00104     }
00105     
00123     void publishInterface(SDOPackage::NVList& prop)
00124     {
00125       if (!NVUtil::isStringValue(prop,
00126                                  "dataport.interface_type",
00127                                  "CORBA_Any"))
00128         {
00129           return;
00130         }
00131       SDOPackage::NVList nv(m_properties);
00132       CORBA_SeqUtil::push_back(nv,
00133                                NVUtil::newNV("dataport.corba_any.inport_ref",
00134                                              RTC::InPortAny::_duplicate(m_objref)));
00135       
00136       NVUtil::append(prop, nv);
00137     }
00138     
00152     virtual ~InPortCorbaProvider()
00153     {
00154     }
00155     
00173     virtual void put(const CORBA::Any& data)
00174       throw (CORBA::SystemException)
00175     {
00176       const DataType* tmp;
00177       if (data >>= tmp)
00178         {
00179           m_buffer.write(*tmp);
00180         }
00181       return;
00182     }
00183     
00184   private:
00185     BufferBase<DataType>& m_buffer;
00186     RTC::InPortAny_var m_objref;
00187   };
00188 };     // namespace RTC
00189 #endif // InPortCorbaProvider_h
00190 

OpenRTMに対してWed May 21 05:17:25 2008に生成されました。  doxygen 1.5.3